Saltar para o conteúdo
Todas as estratégias

Estratégias

BTC Continuidade do Momentum Entre Sessões — Long-Short, Instrumento Único OHLCV: A Direção do Movimento da Sessão ASIA Prevê o Movimento da Sessão US; Negociar a Sessão US Nessa Direção ONLY Quando o Movimento Asiático É Grande, Sem Posição Durante a Noite (BINANCE BTCUSDT USD-M, Barras de 1H, Intradiário, 2 Parâmetros)

Resultado: Abandonado

BtcAsiaToUsSessionCarryoverLS

Bem medido: 594 operações ao longo de todo o histórico de 2020-2026 1H, posições long/short equilibradas (293/301), execução limpa (594 sinalizadas, 594 submetidas, sem operações descartadas)

Hipótese

Uma LONG-SHORT, SINGLE-INSTRUMENT, estratégia pura-OHLCV INTRADAY sobre o perpétuo BTCUSDT.BINANCE USD-M, pertencente a uma família genuinamente diferente de tudo o que está pendente ou foi descartado aqui — não é NOT uma estratégia de tendência/rotura (momentum dual-TF, SuperTrend, Donchian, ORB), NOT uma estratégia de reversão à média/fade (ambas descartadas), nem NOT um sinal de feed suplementar (todos com perdas líquidas). Explora um SESSION LEAD-LAG intradiário: a orientação direcional estabelecida durante a……Mostrar maisMostrar menos

Uma LONG-SHORT, SINGLE-INSTRUMENT, estratégia pura-OHLCV INTRADAY sobre o perpétuo BTCUSDT.BINANCE USD-M, pertencente a uma família genuinamente diferente de tudo o que está pendente ou foi descartado aqui — não é NOT uma estratégia de tendência/rotura (momentum dual-TF, SuperTrend, Donchian, ORB), NOT uma estratégia de reversão à média/fade (ambas descartadas), nem NOT um sinal de feed suplementar (todos com perdas líquidas). Explora um SESSION LEAD-LAG intradiário: a orientação direcional estabelecida durante a sessão ASIA de baixa participação (00:00-08:00 UTC) tende a PERSIST durante a sessão US de maior liquidez (13:00-21:00 UTC), à medida que o fluxo de US/institucional dá continuidade ao movimento, em vez de o inverter. Em cada dia UTC, mede-se o sinal e a magnitude do retorno da sessão asiática; quando o movimento asiático é LARGE (um sinal direcional genuíno, não ruído), a estratégia entra na sessão US na direção SAME e mantém a posição apenas durante essa sessão, ficando FLAT sem posição durante a noite (sem exposição ao financiamento, sem lacuna de preço durante a noite, sem risco de tendência ao longo de vários dias). É distinta da rotura pendente da amplitude de abertura BTC (que negoceia uma amplitude BREAKOUT das primeiras horas) — aqui não há rotura; trata-se de uma CARRYOVER direcional de um movimento de sessão já estabelecido para uma sessão posterior e separada. Mantém os invariantes que permitem a sobrevivência (instrumento único, OHLCV puro com histórico completo de 2020-2026 1H, posições longas e curtas, sem feed suplementar, conforme a lição das perdas líquidas, sem segunda perna, conforme L69) e foi concebida para cumprir os critérios estatísticos: uma frequência quase diária proporciona uma contagem de transações LARGE (>100/ano), que ultrapassa o limiar de mensurabilidade e torna mais precisa a estimativa de Sharpe deflacionado, e apenas 2 parâmetros FREE (limiar de entrada do movimento asiático, múltiplo de stop ATR) minimizam a penalização de deflação do melhor entre -225 tentativas. Preenche também a categoria de horizontes curtos, pouco representada (8.6% vs 10%).

A iteração 2 corrige literalmente a falha de Layer-2: os seis cenários sintéticos geraram «TypeError: _day_of() takes 1 positional argument but 2 were given». O harness Layer-2 volta a associar cada atributo chamável do proxy como método BOUND, pelo que os helpers @staticmethod _day_of/_hour_of recebiam a instância como primeiro argumento e a barra como segundo. Correção: ambos são agora métodos de instância simples (self, bar) — os pontos de chamada já usavam self._day_of(bar)/self._hour_of(bar), pelo que nada……Mostrar maisMostrar menos

A iteração 2 corrige literalmente a falha de Layer-2: os seis cenários sintéticos geraram «TypeError: _day_of() takes 1 positional argument but 2 were given». O harness Layer-2 volta a associar cada atributo chamável do proxy como método BOUND, pelo que os helpers @staticmethod _day_of/_hour_of recebiam a instância como primeiro argumento e a barra como segundo. Correção: ambos são agora métodos de instância simples (self, bar) — os pontos de chamada já usavam self._day_of(bar)/self._hour_of(bar), pelo que nada mais mudou e o comportamento no motor é idêntico. Segunda alteração defensiva no mesmo percurso do helper: o carimbo temporal reportado pelo harness (1735690980000) está em MILLISECONDS, enquanto o motor fornece nanossegundos; o código antigo dividia sempre por 1e9, o que, no harness, reduziria todas as barras sintéticas à mesma hora/dia e bloquearia a lógica da sessão (uma segunda falha latente de Layer-2, assim que o TypeError fosse resolvido). A nova função _epoch_secs() normaliza conforme a ordem de grandeza (ns/us/ms/s) e não altera barras reais em nanossegundos, pelo que Layer-3 e o backtest real não são afetados. A forma do sinal, as regras de entrada/saída, ATR, o dimensionamento, as importações e a estrutura da classe mantêm-se inalterados face ao código que já passou Layer 1.

Premissa de expectativa negativa numa amostra bem medida do histórico completo. Em 594 operações ao longo de 2020-2026, a manutenção de posições entre sessões, da Ásia para US, dá prejuízo: profit_factor 0.937 (<1), total_return -9.81%, expectativa de -$17.34/operação, Sharpe -0.15 com CI [-0.760, 0.458] a atravessar zero, information_ratio -0.76. O único ano positivo é 2020 (+15.3%); todos os anos seguintes são negativos ou neutros (2021 -8.1, 2022 -5.8, 2025 -10.8), com o Sharpe móvel a tender para -8.3 até 2026 — a hipótese de que «um grande movimento na sessão asiática prevê o movimento US» simplesmente não é corroborada. Também é marginal face às comissões: avg_trade_return_pct 0.110% fica abaixo do mínimo da Binance USD-M de 0.15% (L22). Com apenas 2 parâmetros livres e uma vantagem direcional líquida negativa, a otimização não pode inverter o sinal de uma vantagem que não existe. Esta é a assinatura de um perdedor líquido fee_edge/no_edge — não vale a pena dedicar 2 horas à otimização.

Implementação

BTCUSDT.BINANCE USD-M perpétuo, barras de 1H, estratégia intradiária long-short de avanço-atraso entre sessões. Em cada dia UTC, o retorno da sessão asiática (abertura ao fecho 00:00-08:00 UTC) é acumulado incrementalmente e normalizado pelo desvio-padrão dos últimos 30 retornos asiáticos (alternativa de dispersão baseada em ATR enquanto esse histórico se acumula), produzindo uma pontuação z contínua e invariável à escala, devolvida em cada barra. À hora de abertura da sessão US (13:00 UTC), a estratégia abre uma……Mostrar maisMostrar menos

BTCUSDT.BINANCE USD-M perpétuo, barras de 1H, estratégia intradiária long-short de avanço-atraso entre sessões. Em cada dia UTC, o retorno da sessão asiática (abertura ao fecho 00:00-08:00 UTC) é acumulado incrementalmente e normalizado pelo desvio-padrão dos últimos 30 retornos asiáticos (alternativa de dispersão baseada em ATR enquanto esse histórico se acumula), produzindo uma pontuação z contínua e invariável à escala, devolvida em cada barra. À hora de abertura da sessão US (13:00 UTC), a estratégia abre uma posição na direção SAME da variação asiática quando |z| >= entry_z, com no máximo uma entrada por dia de calendário. Fecha à hora de fecho da sessão US (20:00 UTC), para que a carteira fique FLAT durante a noite (sem financiamento, sem risco de lacuna), ou mais cedo se for acionado um stop baseado em ATR (stop_atr_mult x ATR, com mínimo de min_stop_pct). O dimensionamento arrisca risk_frac do capital próprio ao longo da distância até ao stop, limitado a max_notional_frac x o capital próprio em exposição bruta. Todo o estado (ATR, retorno da sessão, deque de dispersão) é O(1) por barra; a mudança de dia é ancorada no carimbo temporal da própria barra, e não num contador de barras.

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 helpers @staticmethod (corrigido), QA emitiu veredictos finais de desempenho num teste rápido não otimizado (removido — QA avalia agora apenas a correção), e os tempos limite da sandbox deveram-se à falta de slots para backtests (corrigida). A hipótese e o código da estratégia não foram alterados. Avalie o código pelos seus méritos; o desempenho será decidido mais tarde pelo backtest completo e pelo otimizador.

Adicione _param_bounds = {entry_z: [...], stop_atr_mult: [...]} correspondentes aos limites impostos pelo código; mantenha fora os valores constantes de hora da sessão/ATR/risco.

A configuração declara NO _param_bounds, apesar de a hipótese assentar em «apenas 2 FREE parâmetros» para minimizar a penalização de deflação por melhor resultado entre -225 ensaios. Sem isso, o otimizador não dispõe de uma superfície explícita que o vincule a {entry_z, stop_atr_mult}, enfraquecendo a disciplina de 2 parâmetros. Não é um defeito de correção.

Defina us_exit_hour=21 para toda a janela ou documente 20:00 como intencional.

A hipótese identifica a sessão US como 13:00-21:00 UTC, mas us_exit_hour é 20, forçando a posição a ficar neutra uma hora antes. É um pormenor que não altera o mecanismo nem a invariável de ficar sem posição durante a noite.

Revisão do Backtest

Sharpe
-0,15
Retorno Total
-9,81%
Drawdown Máximo
23,40%
Total de Operações
594
Taxa de Acerto
44,8%
Fator de Lucro
0,94

Bem medido: 594 operações ao longo de todo o histórico de 2020-2026 1H, posições long/short equilibradas (293/301), execução limpa (594 sinalizadas, 594 submetidas, sem operações descartadas)

Família de lead-lag de sessão intraday genuinamente distinta; plana durante a noite, baixa correlação com benchmark (0.025), sem dependência de feed suplementar

Perdedor líquido: profit_factor 0.937 (<1), total_return -9.81%, expectativa de -$17.34/transação, Sharpe -0.15 (CI atravessa zero), information_ratio -0.76

avg_trade_return_pct 0.110% está abaixo do piso de comissão 0.15% Binance USD-M — marginal em termos de comissão mesmo ignorando a expetativa negativa

Apenas 2020 (+15.3%) é significativamente positivo; todos os anos seguintes são negativos ou sem variação (2025 -10.8%), o Sharpe móvel tende para -8.3 em 2026 — a premissa de continuidade entre sessões não tem uma vantagem persistente

return_kurtosis 78.6 — uma série de preços irregular (por exemplo, um dia de -6.07% em 2023-08-29), em vez de uma vantagem estável

Histórico de Iterações

Verificação falhada (Layer 2 — cenários sintéticos): Parâmetros utilizados: ['entry_z', 'min_bars', 'risk_frac', 'atr_period', 'min_notional', 'min_stop_pct', 'min_vol_days', 'us_exit_hour', 'asia_end_hour', 'stop_atr_mult', 'us_entry_hour', 'asia_start_hour', 'max_notional_frac', 'vol_lookback_days'] Verifique se __init__ define todos os atributos a partir de self.parameters.get(). - steady_uptrend: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (carimbo temporal……Mostrar maisMostrar menos

Verificação falhada (Layer 2 — cenários sintéticos): Parâmetros utilizados: ['entry_z', 'min_bars', 'risk_frac', 'atr_period', 'min_notional', 'min_stop_pct', 'min_vol_days', 'us_exit_hour', 'asia_end_hour', 'stop_atr_mult', 'us_entry_hour', 'asia_start_hour', 'max_notional_frac', 'vol_lookback_days'] Verifique se __init__ define todos os atributos a partir de self.parameters.get(). - steady_uptrend: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (carimbo temporal da barra: 1735690980000) - steady_downtrend: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (carimbo temporal da barra: 1735690980000) - flat_ranging: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (carimbo temporal da barra: 1735690980000) - volatility_spike: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (carimbo temporal da barra: 1735690980000) - zero_volume: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (carimbo temporal da barra: 1735690980000) - price_gap: TypeError: BtcAsiaToUsSessionCarryoverLS._day_of() takes 1 positional argument but 2 were given (carimbo temporal da barra: 1735690980000)

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.