Reversão à média da base de perpétuos entre exchanges ETH (Hyperliquid vs. Binance, 4H, comprada e vendida)
Resultado: Abandonada
EthCrossVenuePerpBasisMeanReversionLS4H
Resumo do resultado
Esta estratégia visou os grupos sub-representados de Hyperliquid, operações entre exchanges e posições compradas e vendidas, com uma operação de base ETH neutra ao mercado entre Hyperliquid e Binance, apostando contra dislocações do z-score superiores a 2.0 e esperando a convergência. Mecanicamente, funcionou sem falhas: 446 operações neutras ao mercado, beta próximo de zero, sem bugs — mas perdeu dinheiro em todos os meses, exceto um, e nos três anos, com Sharpe de -9.85 e retorno total de -24.9%, enquanto as comissões consumiram 10.1% do bruto. A análise do backtest pelo analista apontou que a perda era inerente: uma operação de ida e volta em duas exchanges, com quatro execuções, custa 0.2–0.4%, mais do que a base de poucos bps de ETH jamais recupera; portanto, ampliar o limite de entrada apenas reduz as operações, sem criar vantagem. A estratégia foi abandonada na etapa anterior à otimização, após 5 iterações, por ser um mecanismo estruturalmente dominado por taxas e que não vale otimizar.
Arbitragem de basis neutra ao mercado entre corretoras em perpétuos de ETH, entre Hyperliquid (ETHUSD.HYPERLIQUID) e futuros USD-M da Binance (ETHUSDT.BINANCE). As duas plataformas têm perfis distintos de participantes (HL é dominada por traders sofisticados e especuladores de varejo; a Binance USD-M tem o livro de perpétuos mais profundo do mundo) e ciclos de funding diferentes (HL por hora, Binance a cada 8h). Isso cria spreads transitórios de preço entre corretoras de 0.20–0.80%, que convergem novamente em 1–3……Mostrar maisMostrar menos
Arbitragem de basis neutra ao mercado entre corretoras em perpétuos de ETH, entre Hyperliquid (ETHUSD.HYPERLIQUID) e futuros USD-M da Binance (ETHUSDT.BINANCE). As duas plataformas têm perfis distintos de participantes (HL é dominada por traders sofisticados e especuladores de varejo; a Binance USD-M tem o livro de perpétuos mais profundo do mundo) e ciclos de funding diferentes (HL por hora, Binance a cada 8h). Isso cria spreads transitórios de preço entre corretoras de 0.20–0.80%, que convergem novamente em 1–3 candles de quatro horas, à medida que arbitradores entre corretoras (formadores de mercado, traders de basis) fecham a diferença. A estratégia detecta quando o spread percentual (HL_close - BIN_close) / BIN_close ultrapassa um limiar de z-score móvel de |z| > 2.0 em uma janela retrospectiva de 60 candles; então, assume posição comprada na corretora mais barata e vendida na mais cara, com valores nocionais iguais. A posição é encerrada quando o z-score volta a |z| < 0.3 ou após um limite de tempo de 4 candles (16h). Isto não é NOT um padrão clássico de gráfico, NOT uma operação direcional de momentum/reversão, nem NOT carry de funding — é pura reversão à média entre corretoras, impulsionada por um mecanismo estrutural de arbitragem. Busca atender simultaneamente à corretora HYPERLIQUID, fortemente sub-representada (4.1% ante cota de 20%), ao escopo entre corretoras (4.6% ante cota de 15%) e à direção comprada e vendida (9.2% ante meta de ~45%).
Correção da Iteration-5 (leverage_set_but_unused). O filtro examina o código armazenado da estratégia em busca de uma referência à alavancagem (config.leverage / self._lev / .leverage) e rejeita quando leverage>1 é declarado, mas não aparece no código. Integrei a alavancagem claramente ao cálculo do tamanho: position_size() agora lê `leverage = float(self.config.leverage)` diretamente e calcula `notional = equity * exposure_frac * leverage`; a perna espelhada da Hyperliquid usa o mesmo nocional ajustado pela alavancagem — assim, a alavancagem 2x duplica o nocional das duas pernas (efeito real na margem, não inerte). Esta é a menor mudança que satisfaz o filtro preservando toda a lógica de sinal aprovada anteriormente (z-score do spread, entrada/saída, gestão atômica das duas pernas) e as importações. A alavancagem 2.0 é adequada aqui porque a posição é neutra ao mercado (compra e venda a descoberto com o mesmo nocional); assim, 2x por perna mantém o risco direcional próximo de zero e torna a vantagem da base economicamente relevante.
Reversão à média da base entre exchanges, dominada por taxas e com vantagem negativa estrutural que não pode ser ajustada — não vale otimizar. A base de perpétuos ETH entre Hyperliquid e Binance é de apenas alguns bps a ~0.3%, mas uma operação completa neutra ao mercado paga FOUR execuções como taker (abertura e fechamento nas duas pernas); assim, o piso de custo de ~0.2-0.4% nas duas exchanges supera o valor da reversão do spread. O backtest perde continuamente: Sharpe -9.85, Sortino -13.8, profit_factor 0.908,……Mostrar maisMostrar menos
Reversão à média da base entre exchanges, dominada por taxas e com vantagem negativa estrutural que não pode ser ajustada — não vale otimizar. A base de perpétuos ETH entre Hyperliquid e Binance é de apenas alguns bps a ~0.3%, mas uma operação completa neutra ao mercado paga FOUR execuções como taker (abertura e fechamento nas duas pernas); assim, o piso de custo de ~0.2-0.4% nas duas exchanges supera o valor da reversão do spread. O backtest perde continuamente: Sharpe -9.85, Sortino -13.8, profit_factor 0.908, omega 0.097, expectativa de -$103/operação, total_return -24.9%, com todos os meses negativos, exceto um, e os três anos (2024 -7.6%, 2025 -11.3%, 2026 -6.0%) negativos; as comissões representam 10.1% do bruto ($45.9k + $23.4k de impacto). A configuração atual já seleciona as maiores dislocações (entrada z>2 ao longo de 60 barras) e ainda perde, com taxa de acerto de 48.4% e avg_win ~ avg_loss; portanto, elevar entry_z ou prolongar a posição reduz o número de operações, mas não consegue elevar uma base de poucos bps acima do piso de custo de 4 execuções. Não é um bug no código (a estratégia é executada sem falhas, neutra ao mercado, beta 0.002), e não há estratégia semelhante entre exchanges promovida presa a um alvo inativo — o próprio mecanismo tem um piso de taxas. FAILURE PATTERN: a reversão à média da base de perpétuos entre exchanges em um ativo importante (ETH HL vs. Binance) é estruturalmente dominada por taxas — o spread negociável entre exchanges (poucos bps) é menor que o custo de ida e volta com 4 execuções nas duas exchanges, gerando perdas consistentes de PF<1 que o ajuste do limite z não pode reverter.
Implementação
Reversão à média da base entre exchanges, neutra ao mercado, em perpétuos de ETH entre ETHUSDT.BINANCE (principal) e ETHUSD.HYPERLIQUID (perna extra), barras de 4H. O spread percentual (HL-BIN)/BIN recebe z-score em uma janela móvel de 60 barras; quando |z|>2.0, a estratégia compra na exchange mais barata e vende a descoberto na mais cara, com o mesmo valor nocional, encerrando as duas pernas na convergência (|z|<0.3) ou em um stop temporal de 4 barras (16h). O nocional por perna = patrimônio * exposure_frac * alavancagem, então a alavancagem configurada de 2x realmente duplica a exposição bruta.
Resultados da verificação
Falha na verificação (leverage_set_but_unused): a configuração define leverage=2.0, mas a estratégia nunca usa a alavancagem no cálculo do tamanho. Dimensione as posições com ela — nocional = patrimônio * fração * alavancagem / preço (leia self.config.leverage) — ou defina leverage=1.0. Como está, a alavancagem não tem efeito e o backtest é idêntico a 1x.
Revisão do Backtest
Sharpe
-9,85
Retorno Total
-24,94%
Drawdown Máximo
27,95%
Total de Operações
446
Taxa de Acerto
48,4%
Fator de lucro
0,91
A estratégia é mecanicamente sólida e executada sem falhas: 446 operações neutras ao mercado, SyncedBuffer alinhado por timestamp, beta realmente baixo (0.002) e correlação com o benchmark (0.03), sem liquidação nem bug
Atinge como pretendido os grupos sub-representados de Hyperliquid, operações entre exchanges e posições compradas e vendidas
Perda estrutural consistente: Sharpe -9.85, Sortino -13.8, profit_factor 0.908, omega 0.097, expectativa de -$103/operação, total_return -24.9% — todos os meses negativos, exceto um; os três anos, negativos
Dominada por taxas: uma operação de ida e volta da base entre exchanges paga 4 execuções como taker (abertura e fechamento nas pernas da Binance e da HL); as comissões representam 10.1% do bruto ($45.9k de comissão + $23.4k de impacto), e a base de poucos bps de ETH HL-Binance não consegue superar esse piso de custo
A seleção dos maiores spreads já falha: em entry_z>2, a taxa de acerto é 48.4%, com avg_win ~ avg_loss — as maiores dislocações não convergem de forma lucrativa e confiável; elevar o limite não cria vantagem
Sem bug no código e sem estratégia semelhante entre exchanges promovida — a vantagem negativa é inerente ao mecanismo, não um erro de implementação corrigível
Análise
A estratégia perde porque negocia um spread menor que o próprio custo de ida e volta. São necessárias duas mudanças antes que valha a pena otimizá-la: (1) adicionar um filtro de entrada sensível a custos de HARD: entrar somente quando o spread percentual de RAW |(HL-BIN)/BIN| no momento do sinal superar um piso que cubra o custo de ida e volta das duas pernas (BINANCE ~0.10% + HYPERLIQUID ~0.09% ≈ 0.20% ida e volta; exigir que o spread seja pelo menos ~2x disso, por exemplo, > 0.40%). Um z-score de 2.0 em um……Mostrar maisMostrar menos
A estratégia perde porque negocia um spread menor que o próprio custo de ida e volta. São necessárias duas mudanças antes que valha a pena otimizá-la: (1) adicionar um filtro de entrada sensível a custos de HARD: entrar somente quando o spread percentual de RAW |(HL-BIN)/BIN| no momento do sinal superar um piso que cubra o custo de ida e volta das duas pernas (BINANCE ~0.10% + HYPERLIQUID ~0.09% ≈ 0.20% ida e volta; exigir que o spread seja pelo menos ~2x disso, por exemplo, > 0.40%). Um z-score de 2.0 em um spread cuja magnitude absoluta é de apenas alguns bps não é negociável — filtre pelo tamanho absoluto do spread, não apenas pelo z. (2) Instrumentar/verificar se o spread é REAL, e não um artefato de desalinhamento entre barras: registrar a distribuição do spread bruto de entrada. Se as entradas ocorrerem com |spread| de apenas 0.05-0.15% (de alguns bps a ~15bps), o prêmio 0.20-0.80% hipotetizado não existe nesse par e o sinal é ruído de sincronização entre exchanges — nesse caso, o mecanismo não pode funcionar em ETH HL-vs-Binance, independentemente dos limites z, e deve ser reformulado para um par de exchanges com uma base realmente mais ampla e convergência mais lenta (ou abandonado). Reduzir também a rotatividade: o stop temporal de 4 barras força saídas que pagam taxas sem esperar a convergência. Fazer o backtest novamente; se a versão com filtro de custos ainda apresentar profit_factor < 1.0, a premissa está descartada e não se deve avançar para a otimização de 2 horas.
Histórico de Iterações
Falha na verificação (Camada 2 — cenários sintéticos): Parâmetros usados: ['exit_z', 'entry_z', 'lookback', 'min_notional', 'exposure_frac', 'time_stop_bars'] Verifique se __init__ define todos os atributos a partir de self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra:……Mostrar maisMostrar menos
Falha na verificação (Camada 2 — cenários sintéticos):
Parâmetros usados: ['exit_z', 'entry_z', 'lookback', 'min_notional', 'exposure_frac', 'time_stop_bars']
Verifique se __init__ define todos os atributos a partir de self.parameters.get().
- steady_uptrend: TypeError: FactoryStrategy._bar_ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000)
- steady_downtrend: TypeError: FactoryStrategy._bar_ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000)
- flat_ranging: TypeError: FactoryStrategy._bar_ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000)
- volatility_spike: TypeError: FactoryStrategy._bar_ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000)
- zero_volume: TypeError: FactoryStrategy._bar_ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000)
- price_gap: TypeError: FactoryStrategy._bar_ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000)
Falha na verificação (Camada 2 — cenários sintéticos): Parâmetros usados: ['exit_z', 'entry_z', 'lookback', 'min_notional', 'exposure_frac', 'time_stop_bars'] Verifique se __init__ define todos os atributos a partir de self.parameters.get(). - steady_uptrend: TypeError: EthCrossVenuePerpBasisMeanReversionLS4H._ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000) - steady_downtrend: TypeError: EthCrossVenuePerpBasisMeanReversionLS4H._ts() recebe 1 argumento posicional, mas……Mostrar maisMostrar menos
Falha na verificação (Camada 2 — cenários sintéticos):
Parâmetros usados: ['exit_z', 'entry_z', 'lookback', 'min_notional', 'exposure_frac', 'time_stop_bars']
Verifique se __init__ define todos os atributos a partir de self.parameters.get().
- steady_uptrend: TypeError: EthCrossVenuePerpBasisMeanReversionLS4H._ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000)
- steady_downtrend: TypeError: EthCrossVenuePerpBasisMeanReversionLS4H._ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000)
- flat_ranging: TypeError: EthCrossVenuePerpBasisMeanReversionLS4H._ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000)
- volatility_spike: TypeError: EthCrossVenuePerpBasisMeanReversionLS4H._ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000)
- zero_volume: TypeError: EthCrossVenuePerpBasisMeanReversionLS4H._ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000)
- price_gap: TypeError: EthCrossVenuePerpBasisMeanReversionLS4H._ts() recebe 1 argumento posicional, mas foram fornecidos 2 (timestamp da barra: 1735689600000)
Resumo do resultado
A reversão à média da base de perpétuos entre exchanges em um ativo líquido importante tem um piso de custo de taxas: uma operação de ida e volta em duas exchanges, com quatro execuções, custa mais do que o spread de poucos bps recupera; elevar o limite z não cria a vantagem que falta estruturalmente ao mecanismo.
A análise do backtest antes da otimização pelo analista concluiu por “abandonar”, considerando a vantagem negativa estrutural, não um bug no código — uma operação de ida e volta em duas exchanges paga quatro execuções como taker, um piso de custo de ~0.2–0.4% que supera o spread entre exchanges de poucos bps de ETH; por isso, a estratégia foi descartada antes da otimização de 3 fases.
Uma arbitragem de base comprada e vendida, neutra ao mercado, que calculou o z-score do spread de preço do perpétuo de ETH entre Hyperliquid e Binance USD-M e, quando |z| > 2.0, comprou na exchange mais barata e vendeu a descoberto na mais cara, esperando que a dislocação de 0.2–0.8% convergisse novamente em 1–3 barras de quatro horas.
A execução ocorreu sem falhas e de forma neutra ao mercado (beta 0.002, correlação com o benchmark 0.03) em 446 operações, mas houve perdas contínuas: retorno total -24.9%, Sharpe -9.85, Sortino -13.8, fator de lucro 0.908, expectativa de -$103/operação, taxa de acerto de 48.4% com avg_win ≈ avg_loss, e comissões de 10.1% do bruto ($45.9k de taxas + $23.4k de impacto).
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.