Saltar para o conteúdo
Todas as estratégias

Estratégias

BTC COIN-M Sazonalidade de Continuação do Momentum nas Sessões US, Long-Short (Instrumento Único BTCUSD_PERP.BINANCE_CM, Barras de 1h Apenas OHLCV, Entrada na Direção de um Impulso Significativo nas Primeiras US Sessões e Captura da Continuação Intradiária até ao Fecho da Sessão, 3 Parâmetros)

Resultado: Abandonado

BtcCmInverseUsSessionMomentumContinuationLS

Critério do backtest: - métricas não fiáveis: 648 operações / 1409 dias de dados é evidência insuficiente (são necessárias >=5 operações ao longo de >=10 dias) — aumentar a frequência do sinal ou alargar a janela

Hipótese

Uma estratégia LONG-SHORT de instrumento único, baseada no calendário/sazonalidade, no contrato perpétuo inverso COIN-M da Binance BTCUSD_PERP.BINANCE_CM (com margem de BTC, comissão taker de ida e volta ~0.06%, apenas OHLCV — uma única perna, evitando assim a armadilha COIN-M de várias pernas/financiamento data_unavailable em L20/L34; as barras perpétuas de BTC CM têm o histórico completo do catálogo). A vantagem não é NOT reversão à média, NOT quebra de intervalo, NOT financiamento, NOT liquidações, nem NOT……Mostrar maisMostrar menos

Uma estratégia LONG-SHORT de instrumento único, baseada no calendário/sazonalidade, no contrato perpétuo inverso COIN-M da Binance BTCUSD_PERP.BINANCE_CM (com margem de BTC, comissão taker de ida e volta ~0.06%, apenas OHLCV — uma única perna, evitando assim a armadilha COIN-M de várias pernas/financiamento data_unavailable em L20/L34; as barras perpétuas de BTC CM têm o histórico completo do catálogo). A vantagem não é NOT reversão à média, NOT quebra de intervalo, NOT financiamento, NOT liquidações, nem NOT transversal — é uma anomalia intradiária de TIME-OF-DAY: o impulso direcional formado na abertura do mercado US tende a PERSIST ao longo da sessão US. Mecanismo: todos os dias, mede-se o retorno de BTC ao longo de uma janela de sinal fixa no início da sessão US (13:00->15:00 UTC). Se o valor absoluto do retorno da janela exceder um limiar de entrada (um impulso direcional recente e significativo, em vez de ruído), entra-se no fecho da barra 15:00 UTC na direção SAME e mantém-se a posição para captar a continuação até à hora de saída no fecho da sessão (21:00 UTC), com no máximo uma posição por dia. Encaminhada deliberadamente para COIN-M por duas razões: (1) o limite mínimo de comissões de ~0.10% CM é inferior ao limite mínimo de 0.15% USD-M, dando a uma modesta vantagem de continuação intradiária mais margem para cobrir os custos; (2) BINANCE_CM está sub-representado (3.4% face ao objetivo de >=5%) e este é um uso permitido de BTC-OHLCV de perna única CM por L20. Apenas 3 parâmetros (duração da janela de sinal, limiar de entrada, múltiplo do stop ATR) para resistir aos fracassos por sobreajuste que eliminaram 248 hipóteses anteriores.

Reinício da iteração. O feedback afirma que o abandono anterior foi um artefacto do pipeline (associação incorreta de método estático em Layer-2, veredictos de desempenho QA num teste rápido não otimizado, falta de disponibilidade de slots de backtest), pelo que o mecanismo permanece deliberadamente inalterado: a mesma referência fixada -13:00-UTC, a mesma entrada na direção da continuação, a mesma saída de calendário, o mesmo dimensionamento em contratos inteiros COIN-M, os mesmos três parâmetros ajustáveis e……Mostrar maisMostrar menos

Reinício da iteração. O feedback afirma que o abandono anterior foi um artefacto do pipeline (associação incorreta de método estático em Layer-2, veredictos de desempenho QA num teste rápido não otimizado, falta de disponibilidade de slots de backtest), pelo que o mecanismo permanece deliberadamente inalterado: a mesma referência fixada -13:00-UTC, a mesma entrada na direção da continuação, a mesma saída de calendário, o mesmo dimensionamento em contratos inteiros COIN-M, os mesmos três parâmetros ajustáveis e limites. Como voltar a submeter código idêntico byte a byte falha na verificação de hash inalterado, fiz uma alteração substancial onde o código era realmente mais fraco: o stop de proteção ATR é agora testado face ao LOW/HIGH da barra, em vez de apenas face ao respetivo CLOSE. Em barras de 1 horas, um stop verificado apenas no fecho nunca é acionado numa barra que ultrapassa o nível e fecha novamente dentro dele, pelo que uma sessão com perdas podia sofrer uma excursão de dimensão arbitrária até à saída de calendário 21:00 - o stop é o único elemento que limita esse risco, e subestimá-lo é precisamente a falha do stop no fecho da barra contra a qual as regras de programação alertam. O acionamento é intrabarra; a saída continua a ser executada no fecho da barra através da saída a mercado do modelo base, pelo que não se pressupõe um preço de execução intrabarra. Também declarei _param_bounds para os três parâmetros com limites (signal_window_hours [1,5], entry_threshold [0.002,0.02], atr_stop_mult [1.0,4.0]), para que o otimizador não possa pesquisar valores que o código reescreve silenciosamente - a docstring já prometia esta correspondência. Verificado face ao catálogo para a janela da sandbox (barras de BTCUSD_PERP.BINANCE_CM 1 horas, últimos ~830 dias): o impulso 13:00->15:00 UTC ultrapassa o limiar 0.6% em 296 de 726 dias, pelo que as entradas são frequentes e a execução não ficará sem operações; o impulso absoluto mediano é 0.46%, confortavelmente acima do custo de ida e volta de ~0.10% CM que a continuação tem de superar.

Expectativa negativa numa amostra fiável de 748 operações ao longo de 6.1 anos: avg_trade_return_pct é -0.109% (abaixo de zero, antes mesmo de se aplicar o custo de ida e volta de ~0.10% CM), profit_factor 0.84, Sharpe -0.81, conta liquidada até -100%. A implementação reproduz fielmente a hipótese e o processo de entrada está saudável, pelo que este é um veredicto de mercado: o impulso que ocorre no início da sessão US determina a direção, mas a continuação intradiária realizada é líquida negativa em todos os regimes de volatilidade e em quase todos os anos. A otimização não pode criar uma vantagem que já é negativa antes dos custos; os três parâmetros (janela, limiar, nível de stop-loss ATR) não têm nenhuma região que torne positivo um prémio de continuação negativo. A preocupação de QA quanto à vantagem confirma-se com o histórico completo. abandon_class=negative_expectancy.

Implementação

Sazonalidade intradiária long-short por hora do dia no perpétuo inverso BTC COIN-M (BTCUSD_PERP.BINANCE_CM, barras de 1 horas, apenas OHLCV). Em cada dia UTC, o fecho da barra que termina às 13:00 UTC é fixado como referência da sessão US; duas horas depois (a barra que termina às 15:00 UTC), o impulso inicial da sessão US é medido como fecho/referência - 1. Se a sua magnitude ultrapassar entry_threshold (predefinição 0.6%), a estratégia entra na direção SAME - longa num impulso ascendente, curta num impulso……Mostrar maisMostrar menos

Sazonalidade intradiária long-short por hora do dia no perpétuo inverso BTC COIN-M (BTCUSD_PERP.BINANCE_CM, barras de 1 horas, apenas OHLCV). Em cada dia UTC, o fecho da barra que termina às 13:00 UTC é fixado como referência da sessão US; duas horas depois (a barra que termina às 15:00 UTC), o impulso inicial da sessão US é medido como fecho/referência - 1. Se a sua magnitude ultrapassar entry_threshold (predefinição 0.6%), a estratégia entra na direção SAME - longa num impulso ascendente, curta num impulso descendente - para aproveitar a continuação intradiária, com no máximo uma entrada por dia UTC. A saída ocorre no fecho da sessão US (barra que termina às 21:00 UTC), num stop fixo de atr_stop_mult x ATR a partir do preço de entrada, agora testado intrabarra contra o mínimo/máximo da barra, ou num limite de segurança de max_hold_bars se faltar a barra 21:00. O dimensionamento está correto para contratos inversos: risk_pct do capital próprio dividido pela fração de stop dá um valor nocional USD, limitado a max_gross_frac do capital próprio, convertido em WHOLE contratos de $100 através de contracts_for_notional (nunca pela fórmula linear capital próprio/preço). Três parâmetros ajustáveis: signal_window_hours, entry_threshold, atr_stop_mult.

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 associou incorretamente os auxiliares @staticmethod (corrigido), QA emitiu veredictos de desempenho definitivos num teste exploratório não otimizado (removido — QA avalia agora apenas a correção), e os tempos limite do sandbox deveram-se à falta de disponibilidade de slots de backtest (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.

Não é necessária nenhuma alteração ao código; assinalar ao analista a inconsistência no campo das métricas.

avg_holding_bars é apresentado como 0.0, enquanto avg_holding_period é «5h 13m» — uma particularidade da apresentação das métricas, não uma falha do código. A lógica de manutenção da posição (entrada no fecho da barra 15:00, saída no fecho da barra 21:00 ou pelo stop intra-barra ATR, horizonte de ~6 barras) está correta e é consistente com a média de 5h13m.

Opcionalmente, adicionar uma verificação explícita de ausência de posição em should_enter() por prudência; o comportamento atual está correto, dado que o modelo base suprime as entradas.

should_enter() não verifica, por si só, se a estratégia está sem posição; depende do modelo base para suprimir entradas enquanto há uma posição aberta. Como a barra de entrada (hora ts 14) ocorre uma vez por dia UTC e a manutenção da posição se prolonga até à saída 21:00 do mesmo dia, só existe uma oportunidade de entrada por dia. Assim, na prática, respeita-se o limite pretendido de «no máximo uma posição por dia» — mas a garantia é implícita no modelo base, em vez de ser explícita aqui.

O sandbox não otimizado é negativo: total_return -22%, Sharpe -0.55, avg_trade_return_pct -0.139% (abaixo de zero, não apenas abaixo do limiar das comissões), profit_factor 0.79, e as comissões representam 19.16% do valor bruto em 296 operações intradiárias. Esta é a assinatura clássica de «a vantagem da continuação intradiária não cobre o custo de ida e volta»: o impulso do sinal 0.6% filtra as entradas, mas nada diz sobre o movimento de continuação realizado; aqui, o retorno de continuação por operação é……Mostrar maisMostrar menos

O sandbox não otimizado é negativo: total_return -22%, Sharpe -0.55, avg_trade_return_pct -0.139% (abaixo de zero, não apenas abaixo do limiar das comissões), profit_factor 0.79, e as comissões representam 19.16% do valor bruto em 296 operações intradiárias. Esta é a assinatura clássica de «a vantagem da continuação intradiária não cobre o custo de ida e volta»: o impulso do sinal 0.6% filtra as entradas, mas nada diz sobre o movimento de continuação realizado; aqui, o retorno de continuação por operação é negativo após o custo de ~0.06-0.10% CM, além da elevada rotação. Não se trata de NOT um defeito de código (win_rate 0.43, PF 0.79 e Sharpe -0.55 são valores comuns, não a assinatura de um erro de polaridade/dimensionamento inverso). regime_performance mostra que a vantagem só surge no tercil de volatilidade «normal» (+7.1%, Sharpe 0.54) e é fortemente negativa em condições calmas ou de tensão. O analista deve verificar, com o histórico completo, se alguma região de parâmetros (entry_threshold, signal_window_hours) gera um retorno de continuação por operação que supere claramente o custo de ida e volta de CM; caso contrário, a hipótese de continuação por hora do dia não tem sustentação. Esta análise é consultiva e não impede a execução.

Revisão do Backtest

Sharpe
-0,81
Retorno Total
-100,00%
Drawdown Máximo
100,00%
Total de Operações
748
Taxa de Acerto
42,2%
Fator de Lucro
0,84

Implementação fiel: as operações correspondem ao mecanismo de continuação long-short da sessão US proposto (748 operações, ~373 longas / 375 curtas, uma entrada por dia, janela de sinal 13:00->15:00 e saída 21:00 corretas).

Amostra fiável e ampla ao longo de 6.1 anos (50,537 barras) — o resultado é estatisticamente significativo, não é ruído.

O processo de entrada está saudável (875 sinalizadas = 875 submetidas, sem rejeições por tamanho zero / valor mínimo da ordem / saldo), pelo que este é um veredicto de mercado, não uma falha de código.

Expectativa negativa: avg_trade_return_pct -0.109% é BELOW ZERO, não apenas inferior ao limite mínimo de comissão de ~0.10% CM — a continuação intradiária é líquida negativa mesmo antes de os custos terem importância.

profit_factor 0.84 (<1), win_rate 0.42, expectativa -$42.64/operação, Sharpe -0.81, Sortino -0.74.

Conta liquidada (total_return -100%, max_drawdown 100%) em 2025-05-18.

Tem perdas em todos os regimes de volatilidade (calmo -53%, normal -100%, sob tensão -16%) e em todos os anos civis, exceto 2022 — nenhuma região de parâmetros revela uma vantagem persistente.

A comissão de 16.66% do bruto confirma a assinatura clássica de «a vantagem não cobre o custo de ida e volta» assinalada por QA; o limiar do impulso condiciona as entradas, mas nada diz sobre a continuação realizada, que é líquida negativa.

Análise

Critério do backtest: - métricas não fiáveis: 648 operações / 1409 dias de dados é evidência insuficiente (são necessárias >=5 operações ao longo de >=10 dias) — aumentar a frequência do sinal ou alargar a janela

Histórico de Iterações

Verificação falhada (revisão Layer 4 — QA) [classe=premise_falsified]: - A premissa de continuação do momentum na sessão US é refutada: entrar na direção do impulso 13:00-15:00 UTC e manter a posição até ao fecho 21:00 resulta num retorno líquido LOSER. profit_factor 0.757 (<1), total_return -43.11%, avg_trade_return_pct -0.169% (negativo), expectativa -$105, Sharpe -0.145, alfa -0.107, em 296 operações medidas de forma fiável. win_rate 0.432 com uma relação risco-retorno simétrica (avg_win $760 ~= avg_loss $765)……Mostrar maisMostrar menos

Verificação falhada (revisão Layer 4 — QA) [classe=premise_falsified]: - A premissa de continuação do momentum na sessão US é refutada: entrar na direção do impulso 13:00-15:00 UTC e manter a posição até ao fecho 21:00 resulta num retorno líquido LOSER. profit_factor 0.757 (<1), total_return -43.11%, avg_trade_return_pct -0.169% (negativo), expectativa -$105, Sharpe -0.145, alfa -0.107, em 296 operações medidas de forma fiável. win_rate 0.432 com uma relação risco-retorno simétrica (avg_win $760 ~= avg_loss $765) — o impulso das primeiras US sessões só continua ~43% do tempo, pelo que o efeito que a estratégia procura captar está ausente (ligeiramente invertido); após o custo de ida e volta de ~0.10% CM numa manutenção de ~6h, acumula perdas. A alavancagem 2.0 amplifica-as, causando uma queda máxima de 61.7% (de CI para 90%). A direção está implementada corretamente (continuação conforme especificado; sem erro de polaridade ou sequência), pelo que a implementação é fiel, mas os dados refutam a premissa de sazonalidade. - A alavancagem 2.0 com ~87% de avg_position transforma a aposta na sessão sem vantagem numa queda máxima de 61.7% (de CI para 90.2%) e end_unrealized -11.9% — mais risco com expectativa negativa.

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.