Saltar al contenido
Todas las estrategias

Estrategias

Spread de momentum del ratio ETH-BTC en Hyperliquid (4H, pares long-short, tendencia transversal)

Resultado: Abandonada

HyperliquidEthBtcRatioMomentumPair

Resumen de resultados

HyperliquidEthBtcRatioMomentumPair fue una operación de pares neutral al mercado, diferenciada y bien construida en Hyperliquid, con barras de 4H, que abría posiciones largas/cortas en ETH frente a BTC según el momentum del log-ratio y usaba solo tres parámetros de señal para limitar el sobreajuste. Pese a una implementación sólida —243 entradas emparejadas neutrales en dólares, sin descartes por tamaño, nocional o efectivo— perdió dinero en cada uno de sus tres años, con una rentabilidad total final de -69.8%, Sharpe de -1.22 y factor de beneficio de 0.888. El analista la abandonó en la revisión del backtest previa a la optimización, tras la iteración 4, al concluir que la premisa era errónea y no un desplome ajustable. Conclusión: el spread de ETH/BTC revierte a la media alrededor de su tendencia, por lo que las entradas de momentum sufren whipsaws estructurales; la expresión correcta de cualquier ventaja de este tipo sería la reversión a la media, una hipótesis completamente distinta.

Hipótesis

Operación de pares de momentum transversal y neutral al mercado en perpetuos de Hyperliquid, que busca captar la tendencia persistente de ETH y BTC a turnarse al frente del mercado cripto. La estrategia opera el ETH/BTC RATIO (no los precios absolutos): abre una posición larga en ETHUSD.HYPERLIQUID y corta BTCUSD.HYPERLIQUID cuando el ratio muestra tendencia alcista, y lo contrario cuando muestra tendencia bajista. Es una operación clásica de factor de fuerza relativa, presente en la renta variable (spread entre……Ver másVer menos

Operación de pares de momentum transversal y neutral al mercado en perpetuos de Hyperliquid, que busca captar la tendencia persistente de ETH y BTC a turnarse al frente del mercado cripto. La estrategia opera el ETH/BTC RATIO (no los precios absolutos): abre una posición larga en ETHUSD.HYPERLIQUID y corta BTCUSD.HYPERLIQUID cuando el ratio muestra tendencia alcista, y lo contrario cuando muestra tendencia bajista. Es una operación clásica de factor de fuerza relativa, presente en la renta variable (spread entre momentum alto y bajo), que funciona en cripto porque: (a) el dominio de BTC oscila entre ~38–58% durante meses; (b) las narrativas del ecosistema de ETH (veranos DeFi, lanzamientos de L2, especulación de ETF) generan un rendimiento superior relativo a ETH durante varias semanas; (c) los episodios macro de reducción del riesgo generan un rendimiento superior relativo a BTC (BTC = refugio de oro digital dentro de las criptomonedas). La estrategia opera exclusivamente en Hyperliquid (ambas patas en HL) y apunta a la cuota de venue menos representada (HYPERLIQUID en 4.1% frente al objetivo de 20%). Es long-short (ejecuta 9.3% frente al objetivo aproximado de 45%), de alcance por pares (ejecuta 13.9%) y usa barras seguras de 4H en BTC+ETH: el historial más extenso de HL. El mecanismo difiere fundamentalmente de la tendencia de precios absolutos (que falla por el ruido), porque el spread entre dos activos muy correlacionados revierte mucho más a la media alrededor de su tendencia de momentum que cada activo por separado. NOT es un patrón gráfico clásico (evita los fallos de patrones 8+); NOT es un arbitraje de basis entre venues (ya en la cartera como BtcInverseLinearBasisArbitrage y CrossVenueEthBasisArbitrage); NOT es una estrategia direccional de un solo activo. Solo usa tres parámetros (lookback, umbral, exit_band) para minimizar el riesgo de sobreajuste tras fallos recurrentes por señales congeladas y sobreajuste.

Corrección de la iteración 4 para el fallo de Layer-2: `HyperliquidEthBtcRatioMomentumPair._ts() takes 1 positional argument but 2 were given`. Causa raíz: el proxy de verificación de Layer-2 reconstruye la estrategia copiando cada elemento invocable a un envoltorio simple con `types.MethodType(val.__func__ if hasattr(val,'__func__') else val, wrapper)`; un `@staticmethod` (que carece de `__func__`) se vincula como si fuera un método de instancia e inyecta un `self` fantasma, por lo que una llamada posterior a……Ver másVer menos

Corrección de la iteración 4 para el fallo de Layer-2: `HyperliquidEthBtcRatioMomentumPair._ts() takes 1 positional argument but 2 were given`. Causa raíz: el proxy de verificación de Layer-2 reconstruye la estrategia copiando cada elemento invocable a un envoltorio simple con `types.MethodType(val.__func__ if hasattr(val,'__func__') else val, wrapper)`; un `@staticmethod` (que carece de `__func__`) se vincula como si fuera un método de instancia e inyecta un `self` fantasma, por lo que una llamada posterior a `self._ts(bar)` pasa 2 argumentos a una función de 1 argumentos. La corrección SMALLEST que elimina este modo de fallo de forma permanente consiste en mover el auxiliar de marcas de tiempo de barras OUT fuera de la clase y convertirlo en una función de nivel de módulo `_bar_ts_ns(bar)`: se resuelve desde los globales del módulo y nunca queda sujeto a la revinculación de métodos del proxy. Los dos antiguos puntos de llamada de `self._ts(bar)` (en `on_extra_bar` y `calculate_signal`) ahora llaman a `_bar_ts_ns(bar)`. No cambió ninguna otra lógica: la señal continua de momentum de la relación logarítmica, la ejecución emparejada neutral al dólar (`_submit_entry`/`_submit_exit`), el dimensionamiento que tiene en cuenta el apalancamiento y todos los umbrales son idénticos a los de la versión anterior, lo que conserva todo lo que ya superó Layer 1. Verificado localmente: Layer 1 (estático) pasa y los 6 escenarios sintéticos de Layer-2 (steady_uptrend, steady_downtrend, flat_ranging, volatility_spike, zero_volume, price_gap) pasan sin excepciones.

Abandonar antes de optimizar: el par de ratio ETH/BTC-MOMENTUM no tiene ventaja y pierde persistentemente después de comisiones e impacto de Hyperliquid: Sharpe -1.22, Sortino -2.06, total_return -69.8%, CAGR -45.5%, profit_factor 0.888 y NEGATIVE en todos los años (2024 -14.8%, 2025 -43.7%, 2026 -48.4%), con Sharpe móvil negativo durante casi todo el periodo. La implementación es sólida (243 entradas emparejadas limpias, ambas patas HL, neutral en dólares, sin descartes), así que no se trata de un fallo de……Ver másVer menos

Abandonar antes de optimizar: el par de ratio ETH/BTC-MOMENTUM no tiene ventaja y pierde persistentemente después de comisiones e impacto de Hyperliquid: Sharpe -1.22, Sortino -2.06, total_return -69.8%, CAGR -45.5%, profit_factor 0.888 y NEGATIVE en todos los años (2024 -14.8%, 2025 -43.7%, 2026 -48.4%), con Sharpe móvil negativo durante casi todo el periodo. La implementación es sólida (243 entradas emparejadas limpias, ambas patas HL, neutral en dólares, sin descartes), así que no se trata de un fallo de conexión o una señal congelada: la premisa es errónea. Como admite la propia hipótesis, el spread de ETH/BTC revierte a la media alrededor de su tendencia de momentum, por lo que una entrada de MOMENTUM sufre whipsaws sistemáticos (win_rate 44.6%, expectativa de -$154.8/operación). Un Sharpe de -1.22, negativo en los tres años, no es un desplome ni un artefacto del periodo que pueda volverse positivo ajustando los parámetros de momentum de 3 (lookback/umbral/exit_band); invertir la señal para usar reversión a la media sería una hipótesis nueva, no un ajuste de parámetros, así que no merece 2 horas de optimización. FAILURE PATTERN: el MOMENTUM transversal sobre el log-ratio de ETH/BTC no tiene ventaja operable en perpetuos de 4H HL: el spread de activos principales muy correlacionados revierte a la media en vez de mostrar tendencia, por lo que las entradas de momentum pierden persistentemente en todos los regímenes pese a una implementación neutral al mercado limpia y diferenciada. La expresión correcta de cualquier ventaja de ratio ETH/BTC sería la reversión a la media, una hipótesis aparte.

Implementación

Operación de pares de momentum transversal y neutral al mercado en perpetuos de Hyperliquid. La variable de decisión es el momentum del log-ratio de ETH/BTC (log(ETH/BTC)[ahora] - log(ETH/BTC)[hace lookback]), calculado continuamente en cada barra de 4H mediante un SyncedBuffer sincronizado por marca temporal para ambas patas. Cuando el ratio sube más allá del umbral positivo, abre una posición larga en ETHUSD y corta BTCUSD; cuando baja más allá del umbral negativo, hace lo contrario. Las patas se dimensionan para igualar el nocional de USD (neutral en dólares y delta-neutral respecto a BTC), usando el patrimonio de la cuenta x capital_fraction x apalancamiento. Las posiciones se cierran cuando el momentum vuelve al exit_band neutral, y ambas patas siempre se abren y cierran juntas para no mantener exposición descubierta a un solo activo.

Resultados de verificación

Verificación fallida (capa 2 — escenarios sintéticos): Parámetros usados: ['lookback', 'exit_band', 'threshold', 'min_notional', 'capital_fraction'] Comprueba que __init__ establezca todos los atributos a partir de self.parameters.get(). - steady_uptrend: TypeError: HyperliquidEthBtcRatioMomentumPair._ts() toma 1 argumento(s) posicional(es), pero recibió 2 (marca temporal de barra: 1735689600000) - steady_downtrend: TypeError: HyperliquidEthBtcRatioMomentumPair._ts() toma 1 argumento(s) posicional(es), pero……Ver másVer menos

Verificación fallida (capa 2 — escenarios sintéticos): Parámetros usados: ['lookback', 'exit_band', 'threshold', 'min_notional', 'capital_fraction'] Comprueba que __init__ establezca todos los atributos a partir de self.parameters.get(). - steady_uptrend: TypeError: HyperliquidEthBtcRatioMomentumPair._ts() toma 1 argumento(s) posicional(es), pero recibió 2 (marca temporal de barra: 1735689600000) - steady_downtrend: TypeError: HyperliquidEthBtcRatioMomentumPair._ts() toma 1 argumento(s) posicional(es), pero recibió 2 (marca temporal de barra: 1735689600000) - flat_ranging: TypeError: HyperliquidEthBtcRatioMomentumPair._ts() toma 1 argumento(s) posicional(es), pero recibió 2 (marca temporal de barra: 1735689600000) - volatility_spike: TypeError: HyperliquidEthBtcRatioMomentumPair._ts() toma 1 argumento(s) posicional(es), pero recibió 2 (marca temporal de barra: 1735689600000) - zero_volume: TypeError: HyperliquidEthBtcRatioMomentumPair._ts() toma 1 argumento(s) posicional(es), pero recibió 2 (marca temporal de barra: 1735689600000) - price_gap: TypeError: HyperliquidEthBtcRatioMomentumPair._ts() toma 1 argumento(s) posicional(es), pero recibió 2 (marca temporal de barra: 1735689600000)

Revisión de backtest

Sharpe
-1,22
Rentabilidad total
-69,83%
Drawdown máximo
72,92%
Operaciones totales
486
Tasa de acierto
44,7%
Factor de beneficio
0,89

Par neutral al mercado, limpio y bien conectado: 243 entradas emparejadas, ambas patas HL, sin descartes por tamaño/nocional/efectivo, dimensionamiento neutral en dólares

Venue y alcance realmente diferenciados (pares long-short en Hyperliquid), con una señal de solo 3 parámetros para limitar el sobreajuste

Sharpe -1.22 y Sortino -2.06: rentabilidad ajustada al riesgo muy negativa en una estrategia cuyo benchmark no es significativo, así que mandan las métricas absolutas

Pierde dinero de forma directa y persistente: total_return -69.8%, CAGR -45.5%, profit_factor 0.888, negativo en los tres años de ALL (2024/2025/2026)

La premisa del momentum sobre el ratio parece equivocada en su dirección: el spread de ETH/BTC revierte a la media alrededor de su tendencia (según la propia hipótesis), por lo que las entradas de momentum sufren whipsaws sistemáticos

Los meses positivos son picos de cola gruesa (curtosis 71, asimetría 5.9; valor atípico de +32.5% mayo-2025), no una ventaja repetible; probabilistic_sharpe 0.053

El lastre de comisiones e impacto ($38k en comisiones + $25k de impacto) se acumula sobre una señal sin ventaja bruta

Análisis

No envíes NOT a optimización: la versión base pierde en los tres años con Sharpe -1.22 y no hay una zona positiva que el barrido pueda encontrar. El mecanismo está bien codificado, pero SIGN está al revés. Tu propia hipótesis afirma que el spread de ETH/BTC revierte a la media; sin embargo, should_enter() lo opera como momentum (larga ETH/corta BTC cuando el momentum del log-ratio > +umbral, es decir, AFTER el ratio ya ha subido). Un par neutral al mercado que pierde con un Sharpe simétrico de -1.22 en todos los……Ver másVer menos

No envíes NOT a optimización: la versión base pierde en los tres años con Sharpe -1.22 y no hay una zona positiva que el barrido pueda encontrar. El mecanismo está bien codificado, pero SIGN está al revés. Tu propia hipótesis afirma que el spread de ETH/BTC revierte a la media; sin embargo, should_enter() lo opera como momentum (larga ETH/corta BTC cuando el momentum del log-ratio > +umbral, es decir, AFTER el ratio ya ha subido). Un par neutral al mercado que pierde con un Sharpe simétrico de -1.22 en todos los regímenes muestra el patrón clásico de una entrada invertida. Dos cambios concretos: (1) FLIP a reversión a la media: entra larga-ETH/corta-BTC cuando el ratio se estira hacia DOWNSIDE (momentum < -umbral o puntuación z por debajo de una banda), esperando una reversión, y haz lo inverso cuando se estire al alza; sal cuando vuelva a la media. De forma equivalente, invierte la asignación actual de BUY/SELL y vuelve a ajustar exit_band. (2) CUT la frecuencia de operaciones de forma contundente: el turnover actual es 306x, con unos $63k combinados de comisiones e impacto; amplía el umbral de entrada o añade un periodo mínimo de tenencia para que los costes de ida y vuelta de dos patas no consuman la ventaja de reversión a la media. Repite el backtest; si la variante invertida o de menor frecuencia sigue mostrando una ventaja negativa o inferior a los costes, abandona esta premisa (o escálala a revise_hypothesis).

Historial de iteraciones

Verificación fallida (leverage_set_but_unused): la configuración establece leverage=3.0, pero la estrategia nunca usa el apalancamiento al dimensionar posiciones. Dimensiona las posiciones con él: nocional = equity * fraction * leverage / price (lee self.config.leverage), o establece leverage=1.0. Tal como está, el apalancamiento no tiene efecto y el backtest es idéntico a 1x.

Resumen de resultados

El log-ratio ETH/BTC entre dos activos principales muy correlacionados revierte a la media alrededor de su tendencia, por lo que una entrada de momentum sufre whipsaws sistemáticos. Cualquier ventaja en ese spread tendría que expresarse mediante reversión a la media, una hipótesis nueva y no un ajuste de parámetros.

El analista emitió un veredicto de «abandonar» en la etapa de revisión del backtest previa a la optimización: la implementación era limpia (243 entradas emparejadas neutrales en dólares y bien conectadas, sin descartes), así que atribuyó la pérdida a una premisa errónea y no a un fallo. No alcanzó los umbrales de Sharpe, Sortino, rentabilidad total ni factor de beneficio; nunca se llegó a la optimización, la revisión final del analista ni la revisión de riesgo.

Operación de pares de Hyperliquid neutral al mercado que abrió una posición larga en ETH y corta en BTC (o al revés), según el momentum del log-ratio del spread de ETH/BTC, con la hipótesis de que los ciclos de dominio de BTC y las narrativas de ETH hacen que el spread muestre una tendencia más clara que cada activo por separado.

Durante 695 días perdió de forma persistente: rentabilidad total -69.8%, CAGR -45.5%, Sharpe -1.22, Sortino -2.06, factor de beneficio 0.888, tasa de aciertos 44.6% en 486 operaciones (243 largas / 243 cortas), con un drawdown máximo de 72.9%. Dio negativo todos los años (2024 -14.8%, 2025 -43.7%, 2026 -48.4%); las comisiones de $38k y el impacto de $25k lastraron una señal que ya carecía de ventaja.

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.