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.pybackend/services/strategies/matvard_advanced_shadow.pybackend/services/strategies/market_structure_ohlcv.pybackend/services/strategies/market_structure_deep_profile.pybackend/services/strategies/profile_data_adapter.pybackend/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:
SMA21vsSMA55 - volatilidad:
ATR(14)yATR_pct - valor proxy:
session_vwap+ bandarolling_value_area_proxy(vwap +/- std*mult) - volumen relativo:
vol_ratio = vol_actual / SMA(vol, 20) - setup:
RPByBPB - 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_ticksmicrostructure_depth_snapshotsmicrostructure_klines_1mmicrostructure_minute_statsmicrostructure_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 porallow_sell_shadow, defaulttrue) - 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_forecastvalido y alineado con el lado
Parametros default relevantes:
trend_fast=21,trend_slow=55atr_period=14,min_atr_pct=0.0015,max_atr_pct=0.0250value_deviation_pct=0.0050volume_period=20,min_vol_ratio=0.9session_bars=96,value_area_std_mult=0.8
Nota operativa:
- desde 2026-03-28 existe
AUTOPILOT_PAXG_MAT_MIN_VOL_RATIOdedicado a MATVARD (antes compartiaAUTOPILOT_PAXG_MIN_VOL_RATIOcon mean reversion).
Salidas de contexto (persistidas en details_json):
context_pass,context_scorevalue_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 desession_vwapy confirmacion de direccion.BPB(breakout/pullback/continuacion): ruptura de estructura local y retest con tolerancia ATR.
Campos de salida:
setup_triggeredsetup_type(RPB|BPB|none)invalidation_type(below_structure_or_atr|above_structure_or_atr|none)
3) RiskEnvelope#
Si hay setup:
risk_pct(default0.01)max_hold_bars(default8)cooldown_bars(default4)- 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(default1.6)
Campos de salida:
stop_price,stop_distance,tp_pricerisk_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
skipconreason=shadow_opportunity - conserva trazabilidad completa en
autopilot_decisions.details_json
En matvard_advanced_shadow se agrega contrato avanzado:
pracapshypothesisgate_policyadvanced_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_liveAUTOPILOT_PAXG_MAT_DEEP_PROFILE_ENABLED=true|falseAUTOPILOT_PAXG_MAT_DEEP_PROFILE_FAIL_OPEN=true|falseAUTOPILOT_PAXG_MAT_DEEP_PROFILE_CONFLUENCE_ENABLED=true|falseAUTOPILOT_PAXG_MAT_DEEP_PROFILE_HARD_STOP_ENABLED=true|falseAUTOPILOT_PAXG_MAT_MAX_PROVIDER_ERROR_RATE_24H=<float>(default1.0)AUTOPILOT_PAXG_MAT_MAX_FALLBACK_RATE_24H=<float>(default5.0)AUTOPILOT_PAXG_MAT_MIN_COVERAGE_PCT_24H=<float>(default95.0)AUTOPILOT_PAXG_MAT_MIN_VOL_RATIO=<float>AUTOPILOT_PAXG_MAT_REQUIRE_DAILY_FORECAST=true|falseAUTOPILOT_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>(default0.83)AUTOPILOT_PAXG_MAT_V2_MIN_RR=<float>(default2.0)AUTOPILOT_PAXG_MAT_V2_REQUIRE_IN_VALUE_AREA=true|false(defaulttrue)AUTOPILOT_PAXG_MAT_V2_REQUIRE_VALUE_EXTREME_FOR_ENTRY=true|false(defaulttrue)AUTOPILOT_PAXG_MAT_V2_MAX_POC_DEVIATION_PCT=<float>(default0.0025)AUTOPILOT_PAXG_MAT_V2_MIN_EXPECTED_MOVE_PCT_NET=<float>(default0.30)
Diferencia v1 vs v2#
- v1: perfil base, prioriza cobertura de setups para diagnostico.
- v2: agrega
strict_quality_filtery bloquea setups si no cumplen: context_score >= min_context_scoreRR estimado >= min_rr- entrada dentro de value area (si
require_in_value_area=true) - BUY solo en
discounty SELL solo enpremium(sirequire_value_extreme_for_entry=true) - desviacion a POC bajo umbral (
max_poc_deviation_pct)
Trazabilidad nueva en details_json:
strict_quality_filter.activestrict_quality_filter.reasonsruntime_strategy_name
Perfil de ajuste minimo recomendado (shadow, no-live) para recuperar cobertura:
AUTOPILOT_PAXG_MAT_MIN_ATR_PCT=0.00025AUTOPILOT_PAXG_MAT_MIN_VOL_RATIO=0.35AUTOPILOT_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 aohlcv_proxy, - si
fail_open=false, no genera señal. - hard-stop operativo adicional: la estrategia marca
why_not_trade=microstructure_quality_hard_stopcuando falla calidad 24h.
details_json ahora incluye:
quality_flags.provider_error_rate_24hquality_flags.fallback_rate_24hquality_flags.coverage_pct_24hquality_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/NYen 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-reportahora expone metricas brutas y netas tras costos.metrics.shadow_edge_24hincluye: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_netrefleja 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_rawdesdetp_priceyentry_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_filterconexpected_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:
providerfallback_usedfallback_reasoncontext_scoresetup_typevalue_staterhythm_stateinvalidation_typewhy_not_tradecontext_passsetup_triggeredmarket_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).