Saltar al contenido
Todas las estrategias

Estrategias

Hyperliquid SOL Perp Funding-Extreme Contrarian — Long-Short, Single-Name: FADE Posicionamiento Concurrido Cuando el Z-Score Móvil de Funding Alcanza un Extremo (Funding Muy Positivo = Longs Sobreapalancados → SHORT; Muy Negativo = Shorts Capitulados → LONG), Confirmado por la No Confirmación del Precio, Salida por Reversión del Funding / Stop de ATR / Stop de Tiempo (SOLUSDT.HYPERLIQUID, 4H, 3-Parámetro)

Resultado: Abandonada

HyperliquidSolFundingExtremeContrarian

El mecanismo se dispara limpiamente y produce una muestra adecuada (201 operaciones a lo largo de 953 días) sin timeout — la implementación de funding O(log n) funciona según lo previsto

Hipótesis

Una estrategia contrarian LONG-SHORT, de un solo instrumento, impulsada por POSITIONING, en el perpetuo SOL de Hyperliquid, construida en torno a una señal mecánica NON-OHLCV — FUNDING perpetuo — utilizó la vía OPPOSITE hacia la familia muerta de cash-and-carry de la fábrica. Esto NOT un carry delta-neutral (que murió porque el P&L de funding era demasiado pequeño frente al ruido de la base) y NOT momentum de precio (las cestas de momentum HL son 0/84). En cambio, el funding se usa como medidor de……Ver másVer menos

Una estrategia contrarian LONG-SHORT, de un solo instrumento, impulsada por POSITIONING, en el perpetuo SOL de Hyperliquid, construida en torno a una señal mecánica NON-OHLCV — FUNDING perpetuo — utilizó la vía OPPOSITE hacia la familia muerta de cash-and-carry de la fábrica. Esto NOT un carry delta-neutral (que murió porque el P&L de funding era demasiado pequeño frente al ruido de la base) y NOT momentum de precio (las cestas de momentum HL son 0/84). En cambio, el funding se usa como medidor de concurrencia/posicionamiento para cronometrar un fade DIRECTIONAL: el resultado bien documentado de que cuando el funding del perp es extremadamente positivo, los longs están sobreapalancados y pagando por mantener posición — un estado que históricamente precede a LOWER rendimientos del perp a futuro (riesgo de squeeze/lavado), y simétricamente el funding extremadamente negativo marca shorts capitulados que preceden a rebotes. Elegido para llenar tres categorías subrepresentadas a la vez: HYPERLIQUID (6.8% vs objetivo de 20%), long_short (14.2%), y una ventaja segura en cuanto a datos, no OHLCV, que no está en el cementerio de sobreajuste de OHLCV. Deliberadamente de un solo nombre y 3-parámetro, para mantenerla implementable (las cestas multi-instrumento HL murieron por timeouts de codificación) y para resistir el sobreajuste. IMPLEMENTATION NOTE: mantener la línea base de funding como una deque móvil actualizada incrementalmente (O(1) por actualización) — NEVER reescanear la serie completa de funding dentro de on_bar (ese patrón causó los repetidos timeouts de sandbox de 300s).

La iteración 2 corrige el único fallo de Layer-2 (`FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given`, los seis escenarios). El `_StrategyProxy` de Layer-2 revincula cada atributo invocable de la estrategia a un wrapper simple mediante `types.MethodType`, lo que convierte el staticmethod de un argumento `_bar_ts` de la clase base en un método vinculado — de modo que `self._bar_ts(bar)` llega con dos argumentos. La corrección mínima reemplaza esa única llamada con un helper……Ver másVer menos

La iteración 2 corrige el único fallo de Layer-2 (`FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given`, los seis escenarios). El `_StrategyProxy` de Layer-2 revincula cada atributo invocable de la estrategia a un wrapper simple mediante `types.MethodType`, lo que convierte el staticmethod de un argumento `_bar_ts` de la clase base en un método vinculado — de modo que `self._bar_ts(bar)` llega con dos argumentos. La corrección mínima reemplaza esa única llamada con un helper `_bar_timestamp_ns(bar)` a nivel de módulo que lee `bar.ts_event` (recurriendo a `ts_init` como respaldo) directamente — comportamiento idéntico, inmune a la revinculación del proxy. Nada más cambió: los imports, la estructura de clase, el parseo de funding, la lógica de señal, las entradas, las salidas y el dimensionamiento son byte-idénticos a la previous_code que pasó Layer 1, por lo que ninguna verificación anterior puede regresar. Nótese que `_bar_interval_ns` sigue siendo llamado desde `__init__`, que se ejecuta en la instancia real antes de que el proxy revincule nada, por lo que no se ve afectado. El apalancamiento 2.0 se consume en `position_size` mediante `self.config.leverage` en el límite de nocional bruto.

Fade contrarian de funding-extremo en un solo nombre con expectativa negativa — sin ventaja que optimizar. PF 0.60, total_return -33.7%, Sharpe -0.42, expectativa -$156/operación, y avg_trade_return_pct -0.37% (negativo, por debajo del piso de comisiones de Hyperliquid de 0.15%, L22). Perdiendo en todos los años (2024 -14.8%, 2025 -13.8%, 2026 -6.5%) con ambas piernas, larga y corta, con tasa de acierto sub-43% y avg_loss > avg_win — el fade contrarian está sistemáticamente en el lado equivocado del movimiento, y……Ver másVer menos

Fade contrarian de funding-extremo en un solo nombre con expectativa negativa — sin ventaja que optimizar. PF 0.60, total_return -33.7%, Sharpe -0.42, expectativa -$156/operación, y avg_trade_return_pct -0.37% (negativo, por debajo del piso de comisiones de Hyperliquid de 0.15%, L22). Perdiendo en todos los años (2024 -14.8%, 2025 -13.8%, 2026 -6.5%) con ambas piernas, larga y corta, con tasa de acierto sub-43% y avg_loss > avg_win — el fade contrarian está sistemáticamente en el lado equivocado del movimiento, y el único mes positivo es un único día atípico de +10.77% (curtosis 9.8). El mecanismo está bien implementado (sin timeout, funding acreditado) pero se ubica en dos familias sin supervivientes: reversión a la media/fade de un solo nombre (L55) y direccional con puerta de datos suplementarios (funding) en un solo perp (L73). La puerta de no confirmación del precio no añadió una ventaja real. El signo de la ventaja por operación es negativo, algo que ningún ajuste de parámetros puede revertir. No vale 2 horas de optimización. Patrón de fallo: fade contrarian con puerta de funding de un solo perp fee_edge/no_edge.

Implementación

Contrarian long-short de un solo nombre en el perp SOL de Hyperliquid (barras de 4H). El funding se usa como medidor de concurrencia: un z-score móvil del registro de hl_funding_rates frente a su propia distribución rezagada se devuelve cada barra como la señal continua. El z positivo extremo (longs concurridos, pagando de más) se desvanece con un SHORT; el z negativo extremo (shorts capitulados) se desvanece con un LONG, pero solo cuando el precio no confirma a la multitud (el cierre no marca un nuevo máximo/mínimo de confirm_bars barras). Salidas por reversión del funding (|z| <= exit_z), un stop de ATR fijado en el momento de la entrada, o un stop de tiempo calendario medido desde position.ts_opened. El dimensionamiento prioriza el riesgo: el stop de ATR cuesta ~risk_frac del capital, con un límite de nocional bruto independiente.

Resultados de verificación

CLEAN RESTART 2026-09-04 — el historial de veredictos y los registros de aprendizaje de esta ejecución fueron eliminados y se reinició desde la verificación. Su abandono anterior provino del pipeline, no del mercado: el harness de Layer-2 vinculó incorrectamente los helpers @staticmethod (corregido), QA emitió veredictos de rendimiento terminal sobre una prueba de humo no optimizada (eliminado — QA ahora juzga solo la corrección), y los timeouts del sandbox provinieron de la inanición de slots de backtest (corregido). La hipótesis y el código de la estrategia no han cambiado. Verifica el código por sus méritos; el rendimiento se decide después mediante el backtest completo y el optimizador.

Reducir _param_bounds a los 3 parámetros principales ajustables (entry_z, exit_z, funding_lookback_prints); fijar los parámetros de riesgo/plumbing como constantes.

La hipótesis promociona un diseño de '3-parámetro deliberadamente, para resistir el sobreajuste', pero _param_bounds expone 11 parámetros optimizables. El mecanismo es correcto, pero una búsqueda walk-forward de 11 dimensiones contradice la justificación anti-sobreajuste declarada y aumenta el riesgo de PBO. No bloqueante.

No se requiere ninguna acción; anotado para el analista.

Todas las señales sintéticas de Layer-2 quedaron congeladas en 0.0 (sin funding inyectado), por lo que la ruta de trading solo fue ejercitada por el sandbox (que operó 65 veces con funding real). No fatal.

Revisión de backtest

Sharpe
-0,42
Rentabilidad total
-33,71%
Drawdown máximo
40,24%
Operaciones totales
201
Tasa de acierto
42,3%
Factor de beneficio
0,60

El mecanismo se dispara limpiamente y produce una muestra adecuada (201 operaciones a lo largo de 953 días) sin timeout — la implementación de funding O(log n) funciona según lo previsto

Un solo instrumento, una sola fuente suplementaria (hl_funding_rates), sin patología de datos/verificación; el funding se acredita en el PnL

Expectativa negativa: profit_factor 0.60, total_return -33.7%, expectativa -$156/operación

avg_trade_return_pct -0.37% — negativo y muy por debajo del piso de comisiones de Hyperliquid de 0.15% (L22)

Perdiendo en los tres años (2024 -14.8%, 2025 -13.8%, 2026 -6.5%) — una falta de ventaja persistente, no una que se haya deteriorado

Ambas piernas pierden (tasa de acierto larga 42%, tasa de acierto corta 42%) con avg_loss > avg_win — el fade de funding-extremo está en el lado equivocado del movimiento

El único mes positivo es un único día atípico de +10.77% (curtosis 9.8); el resultado subyacente es uniformemente negativo

Fade direccional de un solo nombre con puerta de funding — clases sin supervivientes de reversión a la media (0/174) y direccional con puerta suplementaria de un solo perp (L73)

Historial de iteraciones

La verificación falló (Layer 2 — escenarios sintéticos): Parámetros usados: ['exit_z', 'entry_z', 'atr_bars', 'risk_frac', 'min_prints', 'confirm_bars', '_param_bounds', 'atr_stop_mult', 'max_hold_bars', 'max_lag_seconds', 'max_notional_frac', 'funding_lookback_prints'] Verifica que __init__ establezca todos los atributos desde self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - steady_downtrend: TypeError:……Ver másVer menos

La verificación falló (Layer 2 — escenarios sintéticos): Parámetros usados: ['exit_z', 'entry_z', 'atr_bars', 'risk_frac', 'min_prints', 'confirm_bars', '_param_bounds', 'atr_stop_mult', 'max_hold_bars', 'max_lag_seconds', 'max_notional_frac', 'funding_lookback_prints'] Verifica que __init__ establezca todos los atributos desde self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - flat_ranging: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - volatility_spike: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - zero_volume: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000) - price_gap: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735690500000)

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.