Hyperliquid SOL Perp Contrarian de Extremos de Funding — Long-Short, Nome Único: FADE Posicionamento Lotado Quando o Z-Score do Funding Contínuo Atinge um Extremo (Funding Muito Positivo = Longs Excessivamente Alavancados → SHORT; Muito Negativo = Shorts em Capitulação → LONG), Confirmado pela Não Confirmação de Preço, Saída na Reversão do Funding / Stop de ATR / Stop de Tempo (SOLUSDT.HYPERLIQUID, 4H, 3 Parâmetros)
Resultado: Abandonada
HyperliquidSolFundingExtremeContrarian
O mecanismo dispara de forma limpa e produz uma amostra adequada (201 trades ao longo de 953 dias) sem timeout — a implementação de funding O(log n) funciona conforme pretendido
Uma estratégia LONG-SHORT, instrumento único, dirigida por POSITIONING, contrarian no perp SOL da Hyperliquid, construída em torno de um sinal mecânico NON-OHLCV — o FUNDING perpétuo — usou o OPPOSITE caminho para a família morta de cash-and-carry da fábrica. Isso NOT é um carry delta-neutro (que morreu porque o P&L de funding era pequeno demais versus o ruído da base) e NOT é momentum de preço (as cestas de momentum HL são 0/84). Em vez disso, o funding é usado como um medidor de crowding/posicionamento para……Mostrar maisMostrar menos
Uma estratégia LONG-SHORT, instrumento único, dirigida por POSITIONING, contrarian no perp SOL da Hyperliquid, construída em torno de um sinal mecânico NON-OHLCV — o FUNDING perpétuo — usou o OPPOSITE caminho para a família morta de cash-and-carry da fábrica. Isso NOT é um carry delta-neutro (que morreu porque o P&L de funding era pequeno demais versus o ruído da base) e NOT é momentum de preço (as cestas de momentum HL são 0/84). Em vez disso, o funding é usado como um medidor de crowding/posicionamento para temporizar um fade DIRECTIONAL: o resultado bem documentado de que quando o funding do perp é extremamente positivo, os longs estão excessivamente alavancados e pagando para segurar — um estado que historicamente precede retornos forward LOWER do perp (risco de squeeze/washout), e simetricamente funding extremamente negativo marca shorts em capitulação que precedem repiques. Escolhida para preencher três buckets sub-representados de uma vez: HYPERLIQUID (6.8% vs alvo 20%), long_short (14.2%), e uma vantagem não-OHLCV segura em dados que não está no cemitério de overfitting OHLCV. Single-name e 3 parâmetros deliberadamente, para mantê-la implementável (as cestas HL multi-instrumento morreram em timeouts de codificação) e para resistir ao overfitting. IMPLEMENTATION NOTE: manter a linha de base do funding como um deque rolling atualizado incrementalmente (O(1) por atualização) — NEVER reescaneie a série completa de funding dentro de on_bar (esse padrão causou os timeouts repetidos de 300s no sandbox).
A iteração 2 corrige a única falha do Layer-2 (`FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given`, todos os seis cenários). O `_StrategyProxy` do Layer-2 reassocia cada atributo chamável da estratégia em um wrapper simples via `types.MethodType`, que converte o staticmethod `_bar_ts` de um argumento da classe base em um método vinculado — então `self._bar_ts(bar)` chega com dois argumentos. A correção mínima substitui aquela única chamada por um helper `_bar_timestamp_ns(bar)` em nível de……Mostrar maisMostrar menos
A iteração 2 corrige a única falha do Layer-2 (`FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given`, todos os seis cenários). O `_StrategyProxy` do Layer-2 reassocia cada atributo chamável da estratégia em um wrapper simples via `types.MethodType`, que converte o staticmethod `_bar_ts` de um argumento da classe base em um método vinculado — então `self._bar_ts(bar)` chega com dois argumentos. A correção mínima substitui aquela única chamada por um helper `_bar_timestamp_ns(bar)` em nível de módulo que lê `bar.ts_event` (recorrendo a `ts_init`) diretamente — comportamentalmente idêntico, imune à reassociação do proxy. Nada mais mudou: imports, estrutura de classes, parsing do funding, lógica de sinal, entradas, saídas e sizing são byte-idênticos ao previous_code que passou o Layer 1, então nenhuma verificação anterior pode regredir. Observe que `_bar_interval_ns` ainda é chamado de `__init__`, que roda na instância real antes do proxy reassocia algo, então não é afetado. A alavancagem 2.0 é consumida em `position_size` via `self.config.leverage` no cap de nocional bruto.
Fade contrarian de extremo de funding single-name com expectativa negativa — sem vantagem para otimizar. PF 0.60, total_return -33.7%, Sharpe -0.42, expectativa -$156/trade, e avg_trade_return_pct -0.37% (negativo, abaixo do piso de taxas 0.15% da Hyperliquid, L22). Perdendo em todos os anos (2024 -14.8%, 2025 -13.8%, 2026 -6.5%) com ambas as pernas long e short abaixo de -43% de win rate e avg_loss > avg_win — o fade contrarian está sistematicamente do lado errado do movimento, e o único mês positivo é um único dia outlier +10.77% (curtose 9.8). O mecanismo está bem implementado (sem timeout, funding creditado), mas está em duas famílias de sobreviventes zero: mean-reversion/fade single-name (L55) e direcional gated por funding single-perp suplementar (L73). O filtro de não confirmação de preço não adicionou uma vantagem real. O sinal da vantagem por trade é negativo, o que nenhum ajuste de parâmetros pode inverter. Não vale 2 horas de otimização. Padrão de falha: fade contrarian gated por funding single-perp fee_edge/no_edge.
Implementação
Contrarian single-name long-short no perp SOL da Hyperliquid (barras de 4H). O funding é usado como medidor de crowding: um z-score rolling do print hl_funding_rates contra sua própria distribuição trailing é retornado a cada barra como o sinal contínuo. Z positivo extremo (lotado, longs pagando em excesso) sofre fade com um SHORT; z negativo extremo (shorts em capitulação) sofre fade com um LONG, mas apenas quando o preço falha em confirmar o crowd (fechamento não fazendo nova máxima/mínima de confirm_bars barras). Saídas na reversão do funding (|z| <= exit_z), um stop de ATR capturado na entrada, ou um stop de tempo calendário medido a partir de position.ts_opened. O sizing é risk-first: o stop de ATR custa ~risk_frac do equity, com um cap independente de nocional bruto.
Resultados da verificação
CLEAN RESTART 2026-09-04 — o histórico de veredictos e os registros de aprendizado desta execução foram removidos e foi reiniciada a partir da verificação. O abandono anterior veio do pipeline, não do mercado: o harness Layer-2 associou incorretamente os helpers @staticmethod (corrigido), QA emitiu veredictos terminais de desempenho em um smoke test não otimizado (removido — QA agora julga apenas correção), e os timeouts do sandbox vieram da escassez de slots de backtest (corrigido). A hipótese e o código da estratégia permanecem inalterados. Verifique o código por seus méritos; o desempenho é decidido depois pelo backtest completo e pelo otimizador.
Restrinja _param_bounds aos tuneáveis principais 3 (entry_z, exit_z, funding_lookback_prints); trave os parâmetros de risco/plumbing como constantes.
A hipótese vende um design deliberadamente de '3 parâmetros, para resistir ao overfitting', mas _param_bounds expõe 11 parâmetros otimizáveis. O mecanismo está correto, mas uma busca walk-forward de 11 dimensões contradiz a rationale anti-overfit declarada e eleva o risco PBO. Não bloqueante.
Nenhum necessário; anotado para o analista.
Sinais sintéticos do Layer-2 todos congelados em 0.0 (sem funding injetado), então o caminho de trading foi exercitado apenas pelo sandbox (que negociou 65 vezes em funding real). Não fatal.
Revisão do Backtest
Sharpe
-0,42
Retorno Total
-33,71%
Drawdown Máximo
40,24%
Total de Operações
201
Taxa de Acerto
42,3%
Fator de lucro
0,60
O mecanismo dispara de forma limpa e produz uma amostra adequada (201 trades ao longo de 953 dias) sem timeout — a implementação de funding O(log n) funciona conforme pretendido
Instrumento único, feed suplementar único (hl_funding_rates), sem patologia de dados/verificação; funding creditado no PnL
avg_trade_return_pct -0.37% — negativo e bem abaixo do piso de taxas 0.15% da Hyperliquid (L22)
Perdendo em todos os três anos (2024 -14.8%, 2025 -13.8%, 2026 -6.5%) — uma ausência persistente de vantagem, não uma que decaiu
Ambas as pernas perdem (win long 42%, win short 42%) com avg_loss > avg_win — o fade de extremo de funding está do lado errado do movimento
O único mês positivo é um único dia outlier +10.77% (curtose 9.8); o tape subjacente é uniformemente negativo
Fade direcional gated por funding single-name — classes de sobreviventes zero mean-reversion (0/174) e direcional gated suplementar single-perp (L73)
Histórico de Iterações
Verificação falhou (Layer 2 — cenários sintéticos): Parâmetros utilizados: ['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'] Verifique se __init__ define todos os atributos a partir de self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() aceita 1 argumento(s) posicional(ais), mas 2 foram fornecidos (timestamp da barra: 1735690500000) -……Mostrar maisMostrar menos
Verificação falhou (Layer 2 — cenários sintéticos):
Parâmetros utilizados: ['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']
Verifique se __init__ define todos os atributos a partir de self.parameters.get().
- steady_uptrend: TypeError: FactoryStrategy._bar_ts() aceita 1 argumento(s) posicional(ais), mas 2 foram fornecidos (timestamp da barra: 1735690500000)
- steady_downtrend: TypeError: FactoryStrategy._bar_ts() aceita 1 argumento(s) posicional(ais), mas 2 foram fornecidos (timestamp da barra: 1735690500000)
- flat_ranging: TypeError: FactoryStrategy._bar_ts() aceita 1 argumento(s) posicional(ais), mas 2 foram fornecidos (timestamp da barra: 1735690500000)
- volatility_spike: TypeError: FactoryStrategy._bar_ts() aceita 1 argumento(s) posicional(ais), mas 2 foram fornecidos (timestamp da barra: 1735690500000)
- zero_volume: TypeError: FactoryStrategy._bar_ts() aceita 1 argumento(s) posicional(ais), mas 2 foram fornecidos (timestamp da barra: 1735690500000)
- price_gap: TypeError: FactoryStrategy._bar_ts() aceita 1 argumento(s) posicional(ais), mas 2 foram fornecidos (timestamp da barra: 1735690500000)
Stratmill é uma ferramenta de pesquisa e paper trading, não uma consultoria financeira ou corretora. Resultados de backtest e paper trading são hipotéticos. Negociar envolve risco de perda.