Files
fn_registry/dev/issues/0088e-trading-strategy-capability-group.md

59 lines
2.2 KiB
Markdown

---
id: "0088e"
title: "Trading: capability group `strategy` + Strategy contract"
status: pendiente
type: feature
domain:
- trading
- meta
scope: multi-app
priority: alta
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0088e — Trading: capability group `strategy` + Strategy contract
**Status:** pendiente
**Created:** 2026-05-14
**Type:** feature
**Parent:** 0088
**Depends:** 0088a
**Blocks:** 0088g, 0088h
## Problema
No hay contrato de estrategia. Sin contrato cada estrategia se cablea distinto y backtester/live_runner no pueden tratarlas uniformemente. El contrato debe ser **puro**: entrada = market state + portfolio state + params; salida = lista de `OrderIntent` (no efectos).
## Piezas
1. Tipos del registry en `python/types/finance/`:
- `MarketSnapshot` (OHLCV ventana + last_price + ts).
- `PortfolioSnapshot` (balance + positions).
- `StrategyParams` (dict tipado por estrategia, validado via JSON Schema).
- `OrderIntent` (lado, qty, instrument, kind=market/limit, price_limit, ttl, reason).
2. Contrato Strategy (Python protocol):
```
def decide(market: MarketSnapshot, portfolio: PortfolioSnapshot, params: StrategyParams) -> list[OrderIntent]
```
Funcion **pura**. Sin I/O, sin random sin semilla, sin tiempo system.
3. Dos estrategias de referencia (puras):
- `strategy_sma_cross_py_finance` (SMA rapida/lenta cross → entry/exit).
- `strategy_rsi_meanrev_py_finance` (RSI < 30 → long, > 70 → short con caps).
4. Funcion `validate_strategy_output_py_finance(intents, portfolio, params)` que aplica sanity (qty>0, instrumento valido, no oversize) antes de pasar a risk.
5. Tag `strategy`. Pagina madre `docs/capabilities/strategy.md` con ejemplo canonico end-to-end (snapshot fake → decide → list[intent]).
6. Tests deterministicos: dado snapshot fijado, `decide` retorna lo esperado.
## Aceptacion
- `mcp__registry__fn_search query="" tag="strategy"` devuelve interface + >= 2 estrategias.
- Tests pasan en `go test`/`pytest`.
- Estrategias son puras: `purity: pure` en frontmatter; sin imports impuros.
## No-objetivos
- Estrategias optimizadas, backtest report (sale a 0088g), parametrizacion via UI (analysis/strategy_lab futuro).