Saltar a contenido

MATVARD Runtime - Documento Tecnico Estrategico#

Alcance#

Este documento describe la estrategia que SI esta implementada hoy en runtime para MATVARD:

  • modos shadow disponibles:
  • autopilot:paxg_matvard_v1_shadow (perfil base)
  • autopilot:paxg_matvard_v2_shadow (perfil estricto)
  • autopilot:matvard_advanced_shadow (PRAC/AP/Hipotesis + gate configurable)
  • objetivo: decision trazable por capas (ContextGate -> SetupTrigger -> RiskEnvelope)
  • ejecucion: shadow por defecto (con infraestructura lista para promotion live con hard-stop)

Codigo fuente principal:

  • backend/services/strategies/paxg_matvard_v1_shadow.py
  • backend/services/strategies/matvard_advanced_shadow.py
  • backend/services/strategies/market_structure_ohlcv.py
  • backend/services/strategies/market_structure_deep_profile.py
  • backend/services/strategies/profile_data_adapter.py
  • backend/services/autopilot.py

Que SI usa hoy#

La estrategia usa OHLCV + volumen de vela (tick_volume) con providers:

  • ohlcv_proxy (estable)
  • deep_profile (compatibilidad)
  • deep_profile_live (runtime recomendado)

En ambos casos, las capas de decision base son:

  • tendencia: SMA21 vs SMA55
  • volatilidad: ATR(14) y ATR_pct
  • valor proxy: session_vwap + banda rolling_value_area_proxy (vwap +/- std*mult)
  • volumen relativo: vol_ratio = vol_actual / SMA(vol, 20)
  • setup: RPB y BPB
  • riesgo: stop estructural + ATR, risk_pct, max_hold_bars, cooldown_bars, tp_rr

Microestructura real (estado actual)#

Se implementó ingesta real Binance (trade + depth + kline_1m) para PAXGUSDT:

  • tablas:
  • microstructure_ticks
  • microstructure_depth_snapshots
  • microstructure_klines_1m
  • microstructure_minute_stats
  • microstructure_ingest_status
  • job runtime: binance-microstructure-job
  • endpoint técnico: GET /ops/strategy/matvard/microstructure-health

Pipeline de decision#

1) ContextGate#

Condiciones base por lado:

  • BUY: SMA21 > SMA55
  • SELL: SMA21 < SMA55 (habilitado por allow_sell_shadow, default true)
  • volatilidad valida: min_atr_pct <= ATR_pct <= max_atr_pct
  • valor: abs(close - session_vwap)/close <= value_deviation_pct
  • volumen: vol_ratio >= min_vol_ratio
  • subasta diaria: session_forecast valido y alineado con el lado

Parametros default relevantes:

  • trend_fast=21, trend_slow=55
  • atr_period=14, min_atr_pct=0.0015, max_atr_pct=0.0250
  • value_deviation_pct=0.0050
  • volume_period=20, min_vol_ratio=0.9
  • session_bars=96, value_area_std_mult=0.8

Nota operativa:

  • desde 2026-03-28 existe AUTOPILOT_PAXG_MAT_MIN_VOL_RATIO dedicado a MATVARD (antes compartia AUTOPILOT_PAXG_MIN_VOL_RATIO con mean reversion).

Salidas de contexto (persistidas en details_json):

  • context_pass, context_score
  • value_state (discount|at_value|premium)
  • rhythm_state (compressed|balanced|expanded)
  • trend_state (up|down|flat)
  • why_not_trade (razones de descarte)

2) SetupTrigger#

Solo si context_pass = true.

Setups:

  • RPB (return/pullback a valor): precio cerca de session_vwap y confirmacion de direccion.
  • BPB (breakout/pullback/continuacion): ruptura de estructura local y retest con tolerancia ATR.

Campos de salida:

  • setup_triggered
  • setup_type (RPB|BPB|none)
  • invalidation_type (below_structure_or_atr|above_structure_or_atr|none)

3) RiskEnvelope#

Si hay setup:

  • risk_pct (default 0.01)
  • max_hold_bars (default 8)
  • cooldown_bars (default 4)
  • SL BUY: min(estructura_ultimas_velas, close - ATR*sl_atr_mult)
  • SL SELL: max(estructura_ultimas_velas, close + ATR*sl_atr_mult)
  • TP por tp_rr (default 1.6)

Campos de salida:

  • stop_price, stop_distance, tp_price
  • risk_pct, max_hold_bars, cooldown_bars, timeout_bars

Integracion con Autopilot#

En modo paxg_matvard_v1_shadow, paxg_matvard_v2_shadow o matvard_advanced_shadow:

  • NO crea queue ejecutable
  • registra decision como skip con reason=shadow_opportunity
  • conserva trazabilidad completa en autopilot_decisions.details_json

En matvard_advanced_shadow se agrega contrato avanzado:

  • prac
  • aps
  • hypothesis
  • gate_policy
  • advanced_profile (strict|aggressive|conservative)

Referencia: rama de control en backend/services/autopilot.py.

Flags de activacion:

  • AUTOPILOT_PAXG_MAT_MARKET_STRUCTURE_PROVIDER=ohlcv_proxy|deep_profile|deep_profile_live
  • AUTOPILOT_PAXG_MAT_DEEP_PROFILE_ENABLED=true|false
  • AUTOPILOT_PAXG_MAT_DEEP_PROFILE_FAIL_OPEN=true|false
  • AUTOPILOT_PAXG_MAT_DEEP_PROFILE_CONFLUENCE_ENABLED=true|false
  • AUTOPILOT_PAXG_MAT_DEEP_PROFILE_HARD_STOP_ENABLED=true|false
  • AUTOPILOT_PAXG_MAT_MAX_PROVIDER_ERROR_RATE_24H=<float> (default 1.0)
  • AUTOPILOT_PAXG_MAT_MAX_FALLBACK_RATE_24H=<float> (default 5.0)
  • AUTOPILOT_PAXG_MAT_MIN_COVERAGE_PCT_24H=<float> (default 95.0)
  • AUTOPILOT_PAXG_MAT_MIN_VOL_RATIO=<float>
  • AUTOPILOT_PAXG_MAT_REQUIRE_DAILY_FORECAST=true|false
  • AUTOPILOT_PAXG_MAT_FORECAST_MIN_CONFIDENCE=<float>
  • AUTOPILOT_PAXG_MAT_FEE_BPS_PER_SIDE=<float>
  • AUTOPILOT_PAXG_MAT_SLIPPAGE_BPS_PER_SIDE=<float>
  • AUTOPILOT_PAXG_MAT_MIN_EXPECTED_MOVE_PCT_NET=<float>
  • AUTOPILOT_PAXG_MAT_V2_MIN_CONTEXT_SCORE=<float> (default 0.83)
  • AUTOPILOT_PAXG_MAT_V2_MIN_RR=<float> (default 2.0)
  • AUTOPILOT_PAXG_MAT_V2_REQUIRE_IN_VALUE_AREA=true|false (default true)
  • AUTOPILOT_PAXG_MAT_V2_REQUIRE_VALUE_EXTREME_FOR_ENTRY=true|false (default true)
  • AUTOPILOT_PAXG_MAT_V2_MAX_POC_DEVIATION_PCT=<float> (default 0.0025)
  • AUTOPILOT_PAXG_MAT_V2_MIN_EXPECTED_MOVE_PCT_NET=<float> (default 0.30)

Diferencia v1 vs v2#

  • v1: perfil base, prioriza cobertura de setups para diagnostico.
  • v2: agrega strict_quality_filter y bloquea setups si no cumplen:
  • context_score >= min_context_score
  • RR estimado >= min_rr
  • entrada dentro de value area (si require_in_value_area=true)
  • BUY solo en discount y SELL solo en premium (si require_value_extreme_for_entry=true)
  • desviacion a POC bajo umbral (max_poc_deviation_pct)

Trazabilidad nueva en details_json:

  • strict_quality_filter.active
  • strict_quality_filter.reasons
  • runtime_strategy_name

Perfil de ajuste minimo recomendado (shadow, no-live) para recuperar cobertura:

  • AUTOPILOT_PAXG_MAT_MIN_ATR_PCT=0.00025
  • AUTOPILOT_PAXG_MAT_MIN_VOL_RATIO=0.35
  • AUTOPILOT_PAXG_MAT_MAX_ATR_PCT=0.02

Objetivo: subir context_pass_rate por encima de 0 sin relajar riesgo estructural.

Proveedor de estructura de mercado#

Interfaz ya preparada:

  • MarketStructureProvider (abstracta)

Providers disponibles:

  • OhlcvProxyMarketStructureProvider (provider=ohlcv_proxy)
  • DeepProfileMarketStructureProvider (provider=deep_profile, experimental)
  • DeepProfileLiveMarketStructureProvider (provider=deep_profile_live, recomendado para v3)

Regla de seguridad:

  • si falla el provider activo y fail_open=true, cae a ohlcv_proxy,
  • si fail_open=false, no genera señal.
  • hard-stop operativo adicional: la estrategia marca why_not_trade=microstructure_quality_hard_stop cuando falla calidad 24h.

details_json ahora incluye:

  • quality_flags.provider_error_rate_24h
  • quality_flags.fallback_rate_24h
  • quality_flags.coverage_pct_24h
  • quality_flags.checks.*
  • quality_flags.hard_stop_triggered

Limitaciones tecnicas actuales#

  • El valor es proxy estadistico sobre velas, no perfil de volumen real.
  • DVA del provider profundo es una aproximacion cuantitativa basada en ventanas de velas.
  • El edge actual depende mas de filtros de tendencia/volatilidad y setup mecanico que de subasta profunda.

Session-First (nuevo)#

MATVARD agrega una capa previa SessionAnalyzer -> DailyAuctionForecast:

  • analiza sesiones Asia/Londres/NY en UTC con volumen comprador/vendedor y migración de valor,
  • genera sesgo operativo del día (bias, confidence, escenarios A/B),
  • bloquea setup cuando no hay confluencia de subasta (session_forecast).

Salida humana oficial:

  • endpoint GET /ops/strategy/matvard/daily-auction-brief,
  • tarjeta en Control Tower con sesgo, niveles y riesgo por activo.

Observabilidad: shadow bruto vs neto#

Para alinear lectura operativa con el gate historico:

  • GET /ops/strategy/matvard-shadow-report ahora expone metricas brutas y netas tras costos.
  • metrics.shadow_edge_24h incluye:
  • avg_move_pct, profit_factor, win_rate_pct (bruto),
  • avg_move_pct_net, profit_factor_net, win_rate_pct_net (neto).
  • metrics.cost_model_for_net refleja costos usados (fee_bps_per_side, slippage_bps_per_side, round_trip_cost_pct).
  • deltas netos añadidos:
  • shadow_vs_baseline_delta_7d_net,
  • shadow_vs_live_delta_7d_net.

Regla de interpretación:

  • evaluar edge intradiario con bruto y neto;
  • para decisiones de promoción de fase, priorizar neto (mismo criterio económico del gate).

Filtro economico de setup (cost floor)#

La estrategia paxg_matvard_v1_shadow aplica un filtro adicional antes de confirmar setup:

  • calcula expected_move_pct_raw desde tp_price y entry_price.
  • estima costo round-trip: round_trip_cost_pct = 2 * (fee_bps_per_side + slippage_bps_per_side) / 100.
  • calcula expected_move_pct_net = expected_move_pct_raw - round_trip_cost_pct.
  • bloquea el setup si expected_move_pct_net < min_expected_move_pct_net.

Trazabilidad en details_json:

  • bloque edge_filter con expected_move_pct_raw, expected_move_pct_net, round_trip_cost_pct, expected_edge_pass.
  • razon de bloqueo: expected_edge_too_low.

Contrato de trazabilidad minimo esperado#

Cada decision MATVARD debe incluir en details_json:

  • provider
  • fallback_used
  • fallback_reason
  • context_score
  • setup_type
  • value_state
  • rhythm_state
  • invalidation_type
  • why_not_trade
  • context_pass
  • setup_triggered
  • market_profile (si provider profundo)
  • dva (si provider profundo)

Conclusión operativa#

MATVARD runtime actual es una version cuantitativa v1 basada en OHLCV proxy.
No es todavia una implementacion de MATVARD completa con Volume Profile/DVA real.

Snapshot de validacion (CT110, 2026-03-29)#

Con release 20260329T173605Z-3480a1fb y parametros runtime actuales:

  • 15 dias: +8.35%, PF 1.443, DD 3.51%
  • 30 dias: -3.74%, PF 0.927, DD 12.92%
  • 60 dias: -9.87%, PF 0.906, DD 22.23%

Interpretacion:

  • el ajuste desbloqueo flujo de setups en shadow,
  • pero el perfil sigue en fase de optimizacion (no consolidado en ventanas largas).
  • en v3, la seguridad live se aplica con hard-stop por calidad de microestructura (coverage/error/fallback/freshness/forecast).