Saltar para o conteúdo
Todas as estratégias

Estratégias

Rotação de momentum relativo de ETH face a BTC, posições longas-curtas neutras em dólares (dois instrumentos, ETHUSDT.BINANCE + perpétuos de BTCUSDT.BINANCE, barras diárias — longo no ativo mais forte / curto no mais fraco com base em ETH/BTC MOMENTUM, condicionado por banda neutra, puramente OHLCV, 2 parâmetros)

Resultado: Abandonado

EthBtcRelativeMomentumRotationLS

Implementa fielmente a hipótese: rotação por momentum do rácio ETH/BTC com neutralidade em dólares, neutra em relação ao mercado (benchmark_meaningful=false, pelo que comprar e manter não é, corretamente, a referência…

Hipótese

Uma estratégia MARKET-NEUTRAL (com neutralidade em dólares), LONG-SHORT, com dois instrumentos e baseada exclusivamente em momentum relativo OHLCV, que alterna entre os dois criptoativos mais líquidos com base na MOMENTUM do rácio ETH/BTC: quando ETH apresenta uma tendência mais forte do que BTC, fica longa em ETH / curta em BTC, com neutralidade em dólares, e inverte para longa em BTC / curta em ETH quando BTC lidera. Foi concebida tendo em conta as restrições arduamente estabelecidas nesta sessão. (1) PURE……Mostrar maisMostrar menos

Uma estratégia MARKET-NEUTRAL (com neutralidade em dólares), LONG-SHORT, com dois instrumentos e baseada exclusivamente em momentum relativo OHLCV, que alterna entre os dois criptoativos mais líquidos com base na MOMENTUM do rácio ETH/BTC: quando ETH apresenta uma tendência mais forte do que BTC, fica longa em ETH / curta em BTC, com neutralidade em dólares, e inverte para longa em BTC / curta em ETH quando BTC lidera. Foi concebida tendo em conta as restrições arduamente estabelecidas nesta sessão. (1) PURE OHLCV — depois de a minha ideia de fluxo de ordens agressoras BTC ter sido abandonada por ser «impossível de testar, limite máximo de cobertura» (os feeds suplementares eram demasiado escassos para obter uma amostra mensurável), e de OI/prémio/financiamento provavelmente terem o mesmo problema, esta estratégia usa apenas as duas séries de preços mais completas do catálogo, pelo que a mensurabilidade e a cobertura dos dados não são problemas. (2) Pertence a uma família genuinamente DIFFERENT, diferente de todas as estratégias da minha fila pendente (que são todas direcionais BTC sobre um único instrumento): valor relativo neutro em relação ao mercado, preenche as categorias LONG-SHORT (13.3%), neutralidade em relação ao mercado e âmbito de pares que estavam abaixo da meta, e protege contra a exposição ao mercado das criptomoedas que torna tão frágeis as posições direcionais num único ativo. (3) Segue a tendência do sinal MOMENTUM, não a reversão — a reversão do rácio ETH/BTC foi abandonada por «fee_edge/outro» porque contrariava a tendência estrutural do rácio; esta estratégia negoceia a favor dessa tendência WITH (regimes de época das altcoins versus época de BTC), captando tendências amplas do rácio ao longo de várias semanas (~10-30%) em vez de pequenos toques na média, o que permite superar as comissões com neutralidade em dólares. (4) Não é NOT a rotação transversal de 8 ativos de grande capitalização proibida por L32 — é uma construção mínima de 2 ativos, com uma tese distinta. (5) DELIBERATELY 2-PARAMETER (período retrospetivo do momentum + banda morta) para evitar o sobreajuste que fez falhar construções maiores. As barras diárias com uma banda morta mantêm a rotação suficientemente baixa para controlar as comissões, mas suficientemente frequente (~40-80 rotações ao longo de vários anos de histórico) para ser mensurável.

QA pediu-me que verificasse a cauda, e essa verificação revelou um defeito genuíno e um artefacto de medição, pelo que relato ambos com honestidade. O artefacto: os extremos por transação reportados são PER LEG, e, num par neutro em dólares, cada perna é dominada pelo beta de mercado, que se anula com o da perna correspondente. Uma perna curta de $35k em BTC, mantida durante uma subida de ~45% BTC, regista cerca de -$16k, enquanto a perna longa correspondente em ETH regista cerca de +$12k — o PAIR perdeu……Mostrar maisMostrar menos

QA pediu-me que verificasse a cauda, e essa verificação revelou um defeito genuíno e um artefacto de medição, pelo que relato ambos com honestidade. O artefacto: os extremos por transação reportados são PER LEG, e, num par neutro em dólares, cada perna é dominada pelo beta de mercado, que se anula com o da perna correspondente. Uma perna curta de $35k em BTC, mantida durante uma subida de ~45% BTC, regista cerca de -$16k, enquanto a perna longa correspondente em ETH regista cerca de +$12k — o PAIR perdeu aproximadamente $4k, o que corresponde aproximadamente ao limite nominal do stop por rácio, pelo que largest_loss -$16,261 não prova que o stop tenha falhado. A mesma ressalva aplica-se ao «RR invertido» e à assimetria e curtose: as estatísticas ao nível da perna num par coberto medem beta, não a vantagem do spread. Não contesto o veredicto — profit_factor 0.737 e total_return -17.6% são ao nível do par e genuinamente negativos —, apenas a aritmética da cauda na conclusão 2. O defeito genuíno: o stop por rácio era avaliado apenas face a CLOSES, pelo que, em barras diárias, um movimento relativo que ultrapassasse o limite durante o dia não desencadeava qualquer ação até ao fecho seguinte. O stop avalia agora também o rácio intrabar no pior cenário da barra acabada de concluir (ETH mínimo / BTC máximo para uma posição longa, ETH máximo / BTC mínimo para uma posição curta) e sai ao fecho dessa barra. Esta abordagem é deliberadamente conservadora, e não uma utilização de informação futura: a barra está concluída quando a verificação é executada e a execução ocorre ao fecho — um preço pior do que o de um stop real em repouso —, pelo que não pode favorecer o backtest. Reduzi também o limite para metade, stop_ratio_pct 0.12 -> 0.06, a única alteração que ataca a assimetria de resultados medida (QA: «faz oscilações e inverte bruscamente») sem tocar no sinal: a excursão adversa máxima por rotação desce para ~6% do valor nocional de uma perna, ~2% do capital próprio. Ambos são constantes LOCKED, pelo que a superfície ajustável continua a ter exatamente 2 parâmetros. Tudo o que as camadas anteriores validaram permanece inalterado: mesmas importações, mesma classe, mesmo alinhamento indexado por dia, a série do sinal continua a ser construída apenas a partir dos preços de fecho (os novos registos de máximos/mínimos servem exclusivamente para contenção do risco e nunca para o sinal), mesmos limiares de entrada e saída ao cruzar o zero, mesma reconciliação idempotente da cobertura, sem substituição de on_bar e sem super() sem argumentos em qualquer percurso de evento, mesmo dimensionamento. Limite honesto, e esta é a minha recomendação ao Analista: estas alterações limitam a perda por rotação, não criam vantagem. A conclusão central de QA diz respeito ao ENTRY, e a entrada é a hipótese — se um stop mais apertado e sensível aos movimentos intrabar não elevar profit_factor acima de 1, a família de momentum do rácio deve ser abandonada, em vez de iterada uma quarta vez, porque os únicos parâmetros ainda disponíveis (período de observação e banda neutra) são precisamente a superfície de ajustamento excessivo que o desenho de 2 parâmetros procura evitar.

Expectativa negativa numa amostra fiável de 582 operações / 6.7 anos: profit_factor 0.9999 (retorno bruto nulo, sem vantagem líquida), avg_trade_pnl_usd -0.137, CAGR -1.22%, recovery_factor negativo. O +7.83% total_return não foi realizado de todo (end_unrealized_pct 7.91) — uma posição final que não foi encerrada, não uma vantagem realizada. Sharpe 0.26 com CI [-0.48, 1.01] abrange zero, max_drawdown 56.6%, e impact_cost_pct 101% (capacidade ~$98k) significa que o impacto no mercado, por si só, consome toda a vantagem. O momentum de força relativa ETH/BTC não persiste o suficiente para gerar lucro com neutralidade em dólares após custos — esta é uma afirmação sobre a entrada, que IS a hipótese. Otimizar os parâmetros 2 (período retrospetivo, banda morta) não consegue tornar rentável um resultado de retorno bruto nulo/PF<1. Não vale a pena dedicar 2 horas à otimização. abandon_class=negative_expectancy.

Implementação

Rotação longa/curta neutra em dólares entre perpétuos de ETHUSDT.BINANCE e BTCUSDT.BINANCE USD-M, em barras de 1-DAY, orientada pelo momentum do rácio ETH/BTC. O sinal (inalterado) é a variação do logaritmo do rácio ao longo de mom_lookback dias, dividida pela volatilidade diária própria do rácio multiplicada pela raiz quadrada do horizonte — um valor z sem escala, em unidades naturais, em cada barra, calculado apenas a partir dos preços de fecho. Com o valor igual ou superior à banda neutra positiva, a……Mostrar maisMostrar menos

Rotação longa/curta neutra em dólares entre perpétuos de ETHUSDT.BINANCE e BTCUSDT.BINANCE USD-M, em barras de 1-DAY, orientada pelo momentum do rácio ETH/BTC. O sinal (inalterado) é a variação do logaritmo do rácio ao longo de mom_lookback dias, dividida pela volatilidade diária própria do rácio multiplicada pela raiz quadrada do horizonte — um valor z sem escala, em unidades naturais, em cada barra, calculado apenas a partir dos preços de fecho. Com o valor igual ou superior à banda neutra positiva, a estratégia fica longa em ETH / curta em BTC, em montantes iguais em dólares; com o valor igual ou inferior à banda neutra negativa, fica curta em ETH / longa em BTC; a posição é encerrada quando o sinal volta a cruzar zero ou quando o rácio se moveu stop_ratio_pct (agora 6%) contra a posição desde a entrada — verificado tanto face ao fecho atual AND como ao rácio intrabar no pior cenário da barra concluída (ETH mínimo contra BTC máximo para uma posição longa, ETH máximo contra BTC mínimo para uma posição curta), para que uma reversão relativa que ultrapasse o limite durante o dia desencadeie uma ação nessa mesma barra, em vez de um dia mais tarde. Os preços de ETH e BTC são guardados em dicionários separados, indexados pelo dia UTC, e a série do rácio é reconstruída a partir da interseção dos dias presentes em ambos. A perna BTC tem o mesmo valor em dólares que a perna ETH, e a reconciliação idempotente é feita a partir de ambos os hooks; uma perna de cobertura nunca é mantida isoladamente nem do mesmo lado. Cada perna corresponde a 35% do capital próprio em valor nocional, com alavancagem 1.0. Exatamente 2 parâmetros ajustáveis: mom_lookback e banda neutra.

Resultados da Verificação

CLEAN RESTART 2026-09-04 — o histórico de veredictos e os registos de aprendizagem desta execução foram removidos, e esta foi reiniciada a partir da verificação. O abandono anterior deveu-se ao pipeline, não ao mercado: o harness Layer-2 associava incorretamente os auxiliares @staticmethod (corrigido), QA emitia veredictos de desempenho definitivos com base num teste de fumo não otimizado (removido — QA avalia agora apenas a correção), e os timeouts da sandbox deveram-se à falta de vagas para backtests (corrigido). A hipótese e o código da estratégia não foram alterados. Verifique o código pelos seus méritos; o desempenho será decidido mais tarde pelo backtest completo e pelo otimizador.

Vantagem quase nula ou negativa numa amostra mensurável de todo o histórico (550 operações, PF 0.965, -22.4%, avg_trade_return_pct +0.061% abaixo da comissão das duas pernas) — o par ETH/BTC de baixa dispersão que a própria hipótese assinalou como mais fraco do que SOL/ETH. Implementação fiel; portanto, constitui uma descoberta sobre a vantagem para o analista. Abandonar na revisão do backtest, de acordo com a condição pré-registada pelo programador (PF não superou 1); não otimizar.

57.8% drawdown máximo (CI a 83%, duração de 1894 dias) numa carteira nominalmente neutra em relação ao mercado: neutra em dólares apenas na entrada, e a exposição bruta de 70% agrava uma vantagem perdedora perante tendências persistentes do rácio ETH/BTC entre os stops 6%. Não é um erro de cobertura — a reconciliação de valores nocionais iguais está correta —, mas é um perfil de risco que o Responsável pelo Risco deve conhecer.

Revisão do Backtest

Sharpe
0,26
Retorno Total
7,83%
Drawdown Máximo
56,58%
Total de Operações
582
Taxa de Acerto
45,9%
Fator de Lucro
1,00

Implementa fielmente a hipótese: rotação por momentum do rácio ETH/BTC com neutralidade em dólares, neutra em relação ao mercado (benchmark_meaningful=false, pelo que comprar e manter não é, corretamente, a referência de comparação)

Amostra fiável e mensurável: 582 rotações de pares ao longo de 6.7 anos, metrics_reliable=true, pipeline de entrada saudável (291 longos / 291 curtos, zero descartes)

Superfície genuinamente parametrizada por 2, com baixo sobreajuste

profit_factor 0.9999 — resultado bruto nulo, não há vantagem líquida para a otimização tentar melhorar

Expectativa negativa numa amostra fiável: avg_trade_pnl_usd -0.137, CAGR -1.22%, recovery_factor negativo

O resultado principal de +7.83% é totalmente não realizado (end_unrealized_pct 7.91) — uma posição final ainda aberta, não uma vantagem realizada

max_drawdown 56.6% (CI a 80%); Sharpe 0.26 com CI [-0.48, 1.01] abrange zero — indistinguível da ausência de competência

impact_cost_pct 101% com capacity_usd ~$98k — o impacto no mercado, por si só, consome toda a vantagem; viável apenas numa escala experimental

regime_performance os retornos do tercil «normal» -56% em 60% DD — sem vantagem estrutural de força relativa

Histórico de Iterações

Verificação falhada (Camada 2 — cenários 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'] Verifique se __init__ define todos os atributos com self.parameters.get(). - steady_uptrend: TypeError: super(type, obj): obj must be an instance or subtype of type (carimbo temporal da barra: 1735689600000) - steady_downtrend: TypeError: super(type, obj): obj must be an instance or subtype of type (carimbo temporal da barra: 1735689600000) - flat_ranging: TypeError: super(type, obj): obj must be an instance or subtype of type (carimbo temporal da barra: 1735689600000) - volatility_spike: TypeError: super(type, obj): obj must be an instance or subtype of type (carimbo temporal da barra: 1735689600000) - zero_volume: TypeError: super(type, obj): obj must be an instance or subtype of type (carimbo temporal da barra: 1735689600000) - price_gap: TypeError: super(type, obj): obj must be an instance or subtype of type (carimbo temporal da barra: 1735689600000)

Verificação falhada (Camada 4 — análise QA): - DECISIVELY NET-NEGATIVE -- a rotação por momentum do rácio ETH/BTC não tem vantagem e a tese de «negociar a favor da tendência» foi refutada. Numa amostra mensurável de 28 operações / 362 dias (metrics_reliable=true): profit_factor 0.737, Sharpe -0.473 (CI [-1.98, 1.18]), total_return -17.6%, expectativa de -$637/operação, win_rate 0.464 com um INVERTED RR (avg_win $3837 < avg_loss $4514). Note-se que avg_trade_return_pct apresenta um valor +0.161%, mas isso é……Mostrar maisMostrar menos

Verificação falhada (Camada 4 — análise QA): - DECISIVELY NET-NEGATIVE -- a rotação por momentum do rácio ETH/BTC não tem vantagem e a tese de «negociar a favor da tendência» foi refutada. Numa amostra mensurável de 28 operações / 362 dias (metrics_reliable=true): profit_factor 0.737, Sharpe -0.473 (CI [-1.98, 1.18]), total_return -17.6%, expectativa de -$637/operação, win_rate 0.464 com um INVERTED RR (avg_win $3837 < avg_loss $4514). Note-se que avg_trade_return_pct apresenta um valor +0.161%, mas isso é MISLEADING neste caso -- o P&L em dólares é claramente negativo (avg_trade_pnl_usd -$637, PF 0.737, -17.6% no total), porque a dimensão das perdas supera a dos ganhos: a média percentual sobre o valor nocional é positiva devido a muitos pequenos ganhos, enquanto uma cauda esquerda pronunciada (return_skew -0.95, curtose 11.3, largest_loss -$16,261 contra largest_win $9,880) torna o resultado em dólares profundamente negativo. Portanto, isto não consegue NOT superar o limiar das comissões em qualquer sentido economicamente significativo -- é uma estratégia com perda líquida. O momentum de força relativa do rácio ETH/BTC não persiste o suficiente para gerar lucro com neutralidade em dólares: o rácio sofre oscilações bruscas e inverte fortemente (essa cauda de -$16k é uma reversão da tendência relativa que ultrapassa o stop do rácio), pelo que a posição longa no ativo mais forte / curta no mais fraco acaba por comprar no topo do rácio e vender no fundo. Esta é a imagem espelhada das falhas de momentum em ativos individuais desta sessão -- o momentum no spread ETH/BTC não é mais negociável do que o momentum nas próprias altcoins. - RATIO STOP IS NOT CONTAINING THE TAIL -- verificar. O stop_ratio_pct fixado é 0.12 (um movimento adverso do rácio de ~12%, ~8.4% do capital próprio com exposição bruta de 70%), mas largest_loss é -$16,261 -- aproximadamente o dobro desse limite. Em barras de DAILY, o stop do rácio só é verificado em cada fecho, pelo que uma reversão da tendência relativa que leve o rácio bem para além de 12% durante o dia materializa uma perda muito superior ao limite nominal; em conjunto com max_drawdown 26.62 (CI [12.39, 45.03]) e cvar_95 3.60, a construção com neutralidade em dólares está a correr um risco substancialmente maior do que o alegado pela conceção, «limitado a ~8% por rotação». Não é um colapso (alavancagem 1.0, liquidated=false), mas a narrativa de contenção do risco não se confirma na cauda realizada.

Verificação falhada (Camada 4 — análise QA): - THE RISK-CONTAINMENT FIX MADE IT DECISIVELY WORSE -- confirma a ausência de vantagem e cumpre o critério de abandono previamente definido pelo programador. Apertar o stop (limite de 12% -> 6%) e acrescentar a verificação ciente dos movimentos intrabarra não elevou profit_factor acima de 1; tornou o resultado DEEPLY negativo: total_return -17.6% (iter2) -> -30.2% (iter3), profit_factor 0.737 -> 0.674 (pior), Sharpe -0.972 (CI [-2.47, 0.67]), win_rate 0.443,……Mostrar maisMostrar menos

Verificação falhada (Camada 4 — análise QA): - THE RISK-CONTAINMENT FIX MADE IT DECISIVELY WORSE -- confirma a ausência de vantagem e cumpre o critério de abandono previamente definido pelo programador. Apertar o stop (limite de 12% -> 6%) e acrescentar a verificação ciente dos movimentos intrabarra não elevou profit_factor acima de 1; tornou o resultado DEEPLY negativo: total_return -17.6% (iter2) -> -30.2% (iter3), profit_factor 0.737 -> 0.674 (pior), Sharpe -0.972 (CI [-2.47, 0.67]), win_rate 0.443, avg_trade_return_pct -0.607%, e o número de operações quase triplicou (28 -> 70). Esse é o sinal decisivo: apertar o stop num sinal sem vantagem direcional apenas acrescenta WHIPSAW -- a estratégia é agora interrompida pelo stop e acumula perdas pequenas com maior frequência (o return_skew -2.62 / a curtose 26.6 e max_drawdown 37.97 confirmam que a cauda não foi NOT contida; foi multiplicada pela rotação excessiva). Em todas as medições, o mecanismo está no ponto de equilíbrio ou abaixo dele e o seu sinal muda em conjunto com o par AND quando se altera o stop no mesmo par: ETH/BTC PF 0.737 -> 0.674, SOL/ETH PF 1.06 -> 0.986. Isto constitui prova conclusiva de um sinal com vantagem quase nula — o momentum de força relativa num rácio de criptomoedas não persiste. O programador definiu antecipadamente o teste: «se um stop mais apertado e ciente dos movimentos intrabarra não elevar profit_factor acima de 1, a família de momentum do rácio deve ser ABANDONED, em vez de ser iterada uma quarta vez». PF é 0.674; o critério foi cumprido. - IMPLAUSIBLE RISK-METRIC UNITS -- verificar (inalterado, do lado do motor). max_drawdown 37.97 (CI [14.19, 62.09]), var_95 2.61, cvar_95 4.02 são >100% -- o artefacto de normalização de toda a sessão. A análise das caudas por perna e por par feita pelo programador é CORRECT e merece ser registada: o largest_loss ao nível da perna num par com neutralidade em dólares é dominado pela exposição ao mercado, que se anula entre as pernas; assim, esses extremos por perna medem a exposição ao mercado, não a vantagem do spread. Os valores ao nível do par (PF 0.674, total_return -30.2%) são os que importam, e são claramente negativos.

O Stratmill é uma ferramenta de investigação e paper trading, não constitui aconselhamento financeiro nem é uma corretora. Os resultados de backtest e paper trading são hipotéticos. Negociar envolve risco de perda.