Saltar al contenido
Todas las estrategias

Estrategias

Rotación de momentum relativo ETH-frente-a-BTC, posiciones largas/cortas neutrales al dólar (perpetuos de ETHUSDT.BINANCE + BTCUSDT.BINANCE con dos instrumentos, barras diarias — largo en el más fuerte / corto en el más débil según el momentum del ratio ETH/BTC MOMENTUM, condicionado por banda muerta, OHLCV puro, 2 parámetros)

Resultado: Abandonada

EthBtcRelativeMomentumRotationLS

Implementa fielmente la hipótesis: rotación de momentum del ratio ETH/BTC neutral al dólar, neutral al mercado (benchmark_meaningful=false, así que usar comprar y mantener como referencia no corresponde)

Hipótesis

Una estrategia MARKET-NEUTRAL (neutral al dólar) LONG-SHORT, de dos instrumentos y momentum relativo puro de OHLCV, que rota entre los dos criptoactivos más líquidos según MOMENTUM del ratio ETH/BTC: cuando ETH muestra una tendencia más fuerte que BTC, toma una posición larga en ETH / corta en BTC, neutral al dólar, y cambia a larga en BTC / corta en ETH cuando lidera BTC. Está diseñada en torno a las restricciones que tanto costó resolver en esta sesión. (1) PURE OHLCV — después de que mi idea de flujo de……Ver másVer menos

Una estrategia MARKET-NEUTRAL (neutral al dólar) LONG-SHORT, de dos instrumentos y momentum relativo puro de OHLCV, que rota entre los dos criptoactivos más líquidos según MOMENTUM del ratio ETH/BTC: cuando ETH muestra una tendencia más fuerte que BTC, toma una posición larga en ETH / corta en BTC, neutral al dólar, y cambia a larga en BTC / corta en ETH cuando lidera BTC. Está diseñada en torno a las restricciones que tanto costó resolver en esta sesión. (1) PURE OHLCV — después de que mi idea de flujo de órdenes taker BTC fracasara por ser «imposible de probar, límite de cobertura» (los feeds complementarios eran demasiado dispersos para obtener una muestra medible), y dado que OI/prima/financiación probablemente comparten ese problema, esta estrategia usa solo las dos series de precios más completas del catálogo, así que la capacidad de medición y la cobertura de datos no son problemas. (2) Pertenece a una familia realmente DIFFERENT respecto de toda mi cola pendiente (formada íntegramente por estrategias direccionales de un solo instrumento BTC): valor relativo neutral al mercado, cubre los segmentos LONG-SHORT (13.3%) y neutral al mercado, y de pares que están por debajo del objetivo, y cubre la beta cripto que hace tan frágiles las posiciones direccionales de un solo activo. (3) Opera el signo MOMENTUM, no la reversión — la reversión del ratio ETH/BTC fracasó por ser «fee_edge/otro» porque iba contra la deriva estructural del ratio; esta estrategia opera a favor de WITH esa deriva (regímenes de temporada de altcoins frente a temporada de BTC), capturando grandes tendencias del ratio de varias semanas (~10-30%) en vez de pequeños retornos a la media, que es lo que permite superar las comisiones con neutralidad al dólar. (4) Es NOT la rotación transversal de 8 grandes activos prohibida por L32: es una construcción mínima de 2 activos con una tesis distinta. (5) DELIBERATELY 2-PARAMETER (ventana retrospectiva del momentum + banda muerta) para evitar el sobreajuste que acabó con construcciones más grandes. Las barras diarias y una banda muerta mantienen la rotación lo bastante baja para controlar las comisiones y, a la vez, lo bastante frecuente (~40-80 rotaciones a lo largo de un historial de varios años) para que pueda medirse.

QA me pidió que verificara la cola, y al hacerlo encontré un defecto real y un artefacto de medición, así que informo de ambos con honestidad. El artefacto: los extremos por operación informados son PER LEG, y en un par neutral al dólar cada pata está dominada por la beta de mercado, que se cancela con su contraparte. Una pata corta de $35k en BTC, mantenida durante un repunte de ~45% BTC, registra aproximadamente -$16k, mientras que la pata larga emparejada de ETH registra aproximadamente +$12k — el PAIR perdió……Ver másVer menos

QA me pidió que verificara la cola, y al hacerlo encontré un defecto real y un artefacto de medición, así que informo de ambos con honestidad. El artefacto: los extremos por operación informados son PER LEG, y en un par neutral al dólar cada pata está dominada por la beta de mercado, que se cancela con su contraparte. Una pata corta de $35k en BTC, mantenida durante un repunte de ~45% BTC, registra aproximadamente -$16k, mientras que la pata larga emparejada de ETH registra aproximadamente +$12k — el PAIR perdió alrededor de $4k, que es aproximadamente el límite nominal del stop por ratio, por lo que largest_loss -$16,261 no demuestra que el stop haya fallado. La misma salvedad se aplica a «RR invertido» y a la asimetría y la curtosis: las estadísticas por pata de un par cubierto miden beta, no la ventaja del diferencial. No estoy cuestionando el veredicto — profit_factor 0.737 y total_return -17.6% son cifras a nivel de par y realmente negativas —, solo la aritmética de cola del hallazgo 2. El defecto real: el stop por ratio se evaluaba únicamente frente a CLOSES, así que en barras diarias un movimiento relativo que superaba el límite durante el día no generaba ninguna acción hasta el siguiente cierre. Ahora el stop también evalúa el ratio intrabar del peor caso de la barra recién completada (ETH mínimo / BTC máximo para una posición larga, ETH máximo / BTC mínimo para una corta) y sale al cierre de esa barra. Esto es deliberadamente conservador, no utiliza información futura: la barra ya está completa cuando se ejecuta la comprobación, y la ejecución se hace al cierre — un precio peor que el de un stop real en espera —, así que no puede favorecer el backtest. También reduje a la mitad el límite, stop_ratio_pct 0.12 -> 0.06, que es el único cambio que aborda la asimetría de pagos medida («vaivenes y una reversión brusca» de QA) sin tocar la señal: la excursión adversa máxima por rotación baja a ~6% del nocional de una pata, ~2% del capital. Ambos son constantes LOCKED, por lo que la superficie ajustable sigue teniendo exactamente 2 parámetros. Todo lo validado por las capas anteriores permanece sin cambios: las mismas importaciones, la misma clase, la misma alineación indexada por día, la serie de señales sigue construyéndose únicamente a partir de cierres (los nuevos datos de máximos y mínimos alimentan exclusivamente la contención del riesgo y nunca la señal), los mismos umbrales de entrada y salida al cruzar cero, la misma conciliación idempotente de la cobertura sin anulación de on_bar y sin super() sin argumentos en ninguna ruta de eventos, el mismo dimensionamiento. Límite honesto, y esta es mi recomendación al Analista: estos cambios limitan la pérdida por rotación, pero no crean una ventaja. El hallazgo central de QA se refiere a ENTRY, y la entrada es la hipótesis — si un stop más ajustado y consciente de los movimientos intrabar no eleva profit_factor por encima de 1, se debería abandonar la familia de momentum del ratio en vez de iterarla por cuarta vez, porque los únicos controles que quedan (ventana retrospectiva, banda muerta) son precisamente la superficie de ajuste a la curva que el diseño de 2 parámetros pretende evitar.

Expectativa negativa en una muestra fiable de 582 operaciones / 6.7 años: profit_factor 0.9999 (rendimiento bruto plano, sin ventaja neta), avg_trade_pnl_usd -0.137, CAGR -1.22%, recovery_factor negativo. El +7.83% total_return está íntegramente sin realizar (end_unrealized_pct 7.91) — una posición final que no se cerró, no una ventaja realizada. El Sharpe 0.26 con CI [-0.48, 1.01] abarca el cero, max_drawdown 56.6%, y impact_cost_pct 101% (capacidad ~$98k) significa que el impacto de mercado por sí solo consume toda la ventaja. El momentum de fuerza relativa de ETH/BTC no persiste lo suficiente como para generar beneficios con neutralidad al dólar después de costes — esto se refiere a la entrada, que IS la hipótesis. Optimizar los 2 parámetros (ventana retrospectiva, banda muerta) no puede convertir un resultado plano en bruto/PF<1 en uno rentable. No merece 2 horas de optimización. abandon_class=negative_expectancy.

Implementación

Rotación long/short dollar-neutral entre perpetuos de ETHUSDT.BINANCE y BTCUSDT.BINANCE USD-M en barras de 1-DAY, impulsada por el momentum de la ratio ETH/BTC. La señal (sin cambios) es el cambio del logaritmo de la ratio durante mom_lookback días, dividido por la volatilidad diaria propia de la ratio multiplicada por sqrt(horizon): una z sin escala en unidades naturales en cada barra, calculada solo con cierres. En o por encima de +deadband, la estrategia está long ETH / short BTC por importes iguales en……Ver másVer menos

Rotación long/short dollar-neutral entre perpetuos de ETHUSDT.BINANCE y BTCUSDT.BINANCE USD-M en barras de 1-DAY, impulsada por el momentum de la ratio ETH/BTC. La señal (sin cambios) es el cambio del logaritmo de la ratio durante mom_lookback días, dividido por la volatilidad diaria propia de la ratio multiplicada por sqrt(horizon): una z sin escala en unidades naturales en cada barra, calculada solo con cierres. En o por encima de +deadband, la estrategia está long ETH / short BTC por importes iguales en dólares; en o por debajo de -deadband, está short ETH / long BTC; la posición se cierra cuando la señal cruza de nuevo el cero o cuando la ratio se ha movido stop_ratio_pct (ahora 6%) en su contra desde la entrada. Se comprueba tanto con el cierre actual AND como con la ratio intrabar más desfavorable de la barra completada (ETH mínimo frente a BTC máximo para una posición long, ETH máximo frente a BTC mínimo para una short), de modo que una reversión relativa que supera el límite intradía se ejecuta en esa misma barra y no un día después. Los precios de ETH y BTC se guardan en diccionarios separados, con claves de índice de día UTC, y la serie de la ratio se reconstruye a partir de la intersección de los días presentes en ambos. La pata BTC iguala en dólares la pata ETH y se reconcilia de forma idempotente desde ambos hooks; nunca se mantiene una pata de cobertura por sí sola ni en el mismo sentido. Cada pata representa 35% del capital en valor nominal, con apalancamiento de 1.0. Hay exactamente 2 parámetros ajustables: mom_lookback y deadband.

Resultados de verificación

CLEAN RESTART 2026-09-04 — se eliminaron el historial de veredictos y los registros de aprendizaje de esta ejecución, y se reinició desde la verificación. El abandono anterior se debió al pipeline, no al mercado: el harness Layer-2 vinculó incorrectamente los helpers @staticmethod (corregido), QA emitió veredictos definitivos de rendimiento en una prueba de humo sin optimizar (eliminado; QA ahora evalúa solo la corrección), y los tiempos de espera agotados del sandbox se debieron a la falta de disponibilidad de ranuras de backtest (corregido). La hipótesis y el código de la estrategia no han cambiado. Verifica el código por sus propios méritos; el rendimiento se decidirá más adelante con el backtest completo y el optimizador.

Ventaja prácticamente nula o negativa en una muestra medible de todo el historial (550 operaciones, PF 0.965, -22.4%, avg_trade_return_pct +0.061% por debajo de las comisiones de las dos patas): el par ETH/BTC de baja dispersión que la propia hipótesis señaló como más débil que SOL/ETH. Implementación fiel, por lo que constituye un hallazgo sobre la ventaja para el analista. Abandonar en la revisión del backtest según la condición prerregistrada por el desarrollador (PF no superó 1); no optimizar.

Drawdown máximo de 57.8% (CI a 83%, duración de 1894 días) en una cartera nominalmente market-neutral: solo es dollar-neutral al entrar, y la exposición bruta de 70% agrava las pérdidas de una estrategia con expectativa negativa ante tendencias sostenidas de la ratio ETH/BTC entre los stops de 6%. No es un error de cobertura: la reconciliación de importes nominales iguales es correcta. Es un perfil de riesgo que debe ver el responsable de riesgos.

Revisión de backtest

Sharpe
0,26
Rentabilidad total
7,83%
Drawdown máximo
56,58%
Operaciones totales
582
Tasa de acierto
45,9%
Factor de beneficio
1,00

Implementa fielmente la hipótesis: rotación de momentum del ratio ETH/BTC neutral al dólar, neutral al mercado (benchmark_meaningful=false, así que usar comprar y mantener como referencia no corresponde)

Muestra fiable y medible: 582 rotaciones de pares en 6.7 años, metrics_reliable=true, pipeline de entrada en buen estado (291 largas / 291 cortas, cero descartes)

Verdaderamente una superficie de 2 parámetros, con poco sobreajuste

profit_factor 0.9999 — rendimiento bruto plano; no hay ventaja neta que optimizar

Expectativa negativa en una muestra fiable: avg_trade_pnl_usd -0.137, CAGR -1.22%, recovery_factor negativo

El titular de +7.83% está íntegramente sin realizar (end_unrealized_pct 7.91) — una posición final que no se cerró, no una ventaja realizada

max_drawdown 56.6% (CI a 80%); el Sharpe 0.26 con CI [-0.48, 1.01] abarca el cero — indistinguible de la ausencia de habilidad

impact_cost_pct 101% con capacity_usd ~$98k: el impacto de mercado por sí solo consume toda la ventaja; solo es viable a escala de juguete

Los rendimientos del tercil «normal» de regime_performance -56% en 60% DD — no hay ventaja estructural de fuerza relativa

Historial de iteraciones

Verificación fallida (capa 2 — escenarios sintéticos): Parámetros utilizados: ['deadband', 'leg_frac', 'max_days', 'vol_window', 'mom_lookback', 'size_precision', 'stop_ratio_pct', 'min_notional_btc', 'min_notional_eth'] Comprueba que __init__ establezca todos los atributos mediante self.parameters.get(). - steady_uptrend: TypeError: super(type, obj): obj must be an instance or subtype of type (marca de tiempo de la barra: 1735689600000) - steady_downtrend: TypeError: super(type, obj): obj must be an instance or……Ver másVer menos

Verificación fallida (capa 2 — escenarios sintéticos): Parámetros utilizados: ['deadband', 'leg_frac', 'max_days', 'vol_window', 'mom_lookback', 'size_precision', 'stop_ratio_pct', 'min_notional_btc', 'min_notional_eth'] Comprueba que __init__ establezca todos los atributos mediante self.parameters.get(). - steady_uptrend: TypeError: super(type, obj): obj must be an instance or subtype of type (marca de tiempo de la barra: 1735689600000) - steady_downtrend: TypeError: super(type, obj): obj must be an instance or subtype of type (marca de tiempo de la barra: 1735689600000) - flat_ranging: TypeError: super(type, obj): obj must be an instance or subtype of type (marca de tiempo de la barra: 1735689600000) - volatility_spike: TypeError: super(type, obj): obj must be an instance or subtype of type (marca de tiempo de la barra: 1735689600000) - zero_volume: TypeError: super(type, obj): obj must be an instance or subtype of type (marca de tiempo de la barra: 1735689600000) - price_gap: TypeError: super(type, obj): obj must be an instance or subtype of type (marca de tiempo de la barra: 1735689600000)

La verificación falló (capa 4 — revisión QA): - DECISIVELY NET-NEGATIVE -- la rotación por momentum de la ratio ETH/BTC no tiene ventaja, y la tesis de «operar a favor de la deriva» queda refutada. En una muestra medible de 28 operaciones / 362 días (metrics_reliable=true): profit_factor 0.737, Sharpe -0.473 (CI [-1.98, 1.18]), total_return -17.6%, esperanza de -$637/operación, win_rate 0.464 con un INVERTED RR (avg_win $3837 < avg_loss $4514). Ten en cuenta que avg_trade_return_pct indica +0.161%, pero aquí eso……Ver másVer menos

La verificación falló (capa 4 — revisión QA): - DECISIVELY NET-NEGATIVE -- la rotación por momentum de la ratio ETH/BTC no tiene ventaja, y la tesis de «operar a favor de la deriva» queda refutada. En una muestra medible de 28 operaciones / 362 días (metrics_reliable=true): profit_factor 0.737, Sharpe -0.473 (CI [-1.98, 1.18]), total_return -17.6%, esperanza de -$637/operación, win_rate 0.464 con un INVERTED RR (avg_win $3837 < avg_loss $4514). Ten en cuenta que avg_trade_return_pct indica +0.161%, pero aquí eso es MISLEADING: el P&L en dólares es claramente negativo (avg_trade_pnl_usd -$637, PF 0.737, -17.6% en total), porque el tamaño de las pérdidas supera el de las ganancias. El promedio porcentual sobre el valor nominal resulta positivo por muchas ganancias pequeñas, mientras que una cola izquierda gruesa (return_skew -0.95, curtosis 11.3, largest_loss -$16,261 frente a largest_win $9,880) lleva el resultado en dólares a un nivel muy negativo. Por tanto, esto no alcanza a superar NOT el umbral de comisiones de forma económicamente significativa: es una estrategia perdedora neta. El momentum de la fuerza relativa de la ratio ETH/BTC no persiste lo suficiente para obtener beneficios con dollar-neutral: la ratio oscila y revierte bruscamente (esa cola de -$16k corresponde a una reversión de la tendencia relativa que supera el stop de la ratio), por lo que la estrategia long en el activo más fuerte y short en el más débil acaba comprando en el máximo de la ratio y vendiendo en su mínimo. Es el reflejo, en el momentum de la ratio, de los fallos de momentum en activos individuales de esta sesión: el momentum del diferencial ETH/BTC no es más negociable que el momentum de las altcoins. - RATIO STOP IS NOT CONTAINING THE TAIL -- verificar. El stop_ratio_pct fijado es 0.12 (un movimiento adverso de la ratio de ~12%, ~8.4% del capital con una exposición bruta de 70%), pero largest_loss es -$16,261, aproximadamente el doble de ese límite. En barras de DAILY, el stop de la ratio solo se comprueba al cierre; por eso, una reversión de la tendencia relativa que lleva la ratio muy por encima de 12% intradía materializa una pérdida mucho mayor que el límite nominal. Junto con max_drawdown 26.62 (CI [12.39, 45.03]) y cvar_95 3.60, la estructura dollar-neutral asume un riesgo materialmente mayor del que indica su promesa de diseño de «~8% por rotación». No es un desastre (apalancamiento 1.0, liquidated=false), pero el argumento de contención del riesgo no se sostiene ante la cola observada.

Verificación fallida (revisión de la capa 4 — QA): - THE RISK-CONTAINMENT FIX MADE IT DECISIVELY WORSE -- confirma que no hay ventaja y que se cumple el criterio de abandono preestablecido por el desarrollador. Endurecer el stop (límite de 12% -> 6%) y añadir la comprobación consciente de los movimientos intrabar no elevó profit_factor por encima de 1; hizo que el resultado se volviera DEEPLY negativo: total_return -17.6% (iter2) -> -30.2% (iter3), profit_factor 0.737 -> 0.674 (peor), Sharpe -0.972 (CI [-2.47,……Ver másVer menos

Verificación fallida (revisión de la capa 4 — QA): - THE RISK-CONTAINMENT FIX MADE IT DECISIVELY WORSE -- confirma que no hay ventaja y que se cumple el criterio de abandono preestablecido por el desarrollador. Endurecer el stop (límite de 12% -> 6%) y añadir la comprobación consciente de los movimientos intrabar no elevó profit_factor por encima de 1; hizo que el resultado se volviera DEEPLY negativo: total_return -17.6% (iter2) -> -30.2% (iter3), profit_factor 0.737 -> 0.674 (peor), Sharpe -0.972 (CI [-2.47, 0.67]), win_rate 0.443, avg_trade_return_pct -0.607%, y el número de operaciones casi se triplicó (28 -> 70). Esa es la señal decisiva: endurecer el stop de una señal sin ventaja direccional solo añade WHIPSAW -- ahora la estrategia sale por stop y acumula pérdidas pequeñas más frecuentes (el return_skew -2.62 / la curtosis 26.6 y max_drawdown 37.97 confirman que la cola estaba NOT contenida; la multiplicó la rotación excesiva). En todas las mediciones, el mecanismo está en el punto de equilibrio o por debajo, y su signo cambia junto con el par AND cuando se modifica el stop en el mismo par: ETH/BTC PF 0.737 -> 0.674, SOL/ETH PF 1.06 -> 0.986. Esto demuestra de forma concluyente que la señal tiene una ventaja casi nula: el momentum de fuerza relativa en un ratio cripto no persiste. El desarrollador estableció de antemano la prueba: «si un stop más ajustado y consciente de los movimientos intrabar no eleva profit_factor por encima de 1, se debería ABANDONED la familia de momentum del ratio en vez de iterarla por cuarta vez». PF es 0.674; se cumple el criterio. - IMPLAUSIBLE RISK-METRIC UNITS -- verificar (sin cambios, del lado del motor). max_drawdown 37.97 (CI [14.19, 62.09]), var_95 2.61, cvar_95 4.02 son >100% -- el artefacto de normalización de toda la sesión. Cabe señalar que el análisis del desarrollador sobre colas por pata frente a colas por par es CORRECT y merece registrarse: las cifras largest_loss por pata de un par neutral al dólar están dominadas por la beta de mercado que se cancela entre las patas, así que esos extremos por pata miden beta, no la ventaja del diferencial; las cifras a nivel de par (PF 0.674, total_return -30.2%) son las relevantes, y son claramente negativas.

Stratmill es una herramienta de investigación y paper trading, no asesoramiento financiero ni un bróker. Los resultados de backtest y paper trading son hipotéticos. Operar conlleva riesgo de pérdida.