Estratégias
Cash-and-carry de BTC com convergência da base trimestral, neutro ao mercado (compra de BTCUSDT.BINANCE_SPOT + venda do futuro BTC USD-M DATED QUARTERLY com vencimento mais próximo, mantido até a liquidação para capturar a base de contango DETERMINISTICALLY-CONVERGENT — NOT funding de perp, rolagem no vencimento, 2 parâmetros)
Resultado: Abandonada
BtcQuarterlyBasisConvergenceCarryNeutral
Resumo do resultado
Esta estratégia propôs uma vantagem realmente diferente dos carries de funding de perp malsucedidos da fábrica: um cash-and-carry BTC neutro em delta que captura a base de futuros trimestrais com vencimento definido, cuja convergência é determinística; mantido até a liquidação e rolado a cada trimestre, com apenas dois parâmetros ajustáveis. Ela nunca gerou um backtest: em 3 iterações, a execução falhou porque o motor não conseguiu obter histórico de funding para a perna trimestral 'BTCUSDT_230929.BINANCE', tratando o contrato com vencimento definido como um perp e bloqueando a execução por precisão. Sem backtest, revisão do backtest, otimização ou etapa de análise jamais alcançados, a estratégia foi abandonada por uma dependência de dados/infraestrutura, e não por mérito econômico. A hipótese havia alertado explicitamente que a disponibilidade de dados de contratos trimestrais era a dependência decisiva, e foi exatamente aí que o pipeline parou.
Hipótese
backtest_failed: RuntimeError: dados de funding indisponíveis para a perna perp 'BTCUSDT_230929.BINANCE' — a coleta sob demanda falhou ou a venue não tem histórico de funding (backtest bloqueado para preservar a precisão; defina SF_DISABLE_ONDEMAND_FUNDING=1 para contornar) Traceback (most recent call last): File "/opt/strategy-factory/src/agents/backtest_agent.py", line 190, in _run_backtest await self._ensure_funding_for_perp_legs(instrument_id, extra_instrs) File "/opt/strategy-factory/src/agents/backtest_agent.py", line 406, in _ensure_funding_for_perp_legs raise RuntimeError( RuntimeError: dados de funding indisponíveis para a perna perp 'BTCUSDT_230929.BINANCE' — a coleta sob demanda falhou ou a venue não tem histórico de funding (backtest bloqueado para preservar a precisão; defina SF_DISABLE_ONDEMAND_FUNDING=1 para contornar)
Implementação
Resultados da verificação
Verificação reprovada (Camada 3 — backtest no sandbox): o teste de fumaça excedeu o limite de 300s de tempo de execução. Isso quase sempre significa que o trabalho por barra aumenta com o histórico — por exemplo, reexaminar toda a série de funding/suplementar ou reconstruir uma lista e chamar min()/sorted() dentro de calculate_signal()/on_bar() a cada barra. Pré-calcule arrays de timestamps ordenados ONCE em __init__ e use bisect, ou armazene consultas em cache indexadas por timestamp, para que o custo por barra seja O(log n), não O(n).
Estenda extra_instruments à cadeia trimestral de FULL BTC (~16-20 contratos desde 2020), usando barras trimestrais mais espaçadas de 12H/1D para ficar dentro do orçamento do sandbox, de modo que metrics_reliable=true e cada janela walk-forward contenha várias convergências. Apenas extensão da configuração — a lógica de rolagem já processa cadeias de qualquer extensão.
A contagem de convergências é marginal (8) e metrics_reliable=false — abaixo do ~16-20 que defini em iter-1. O desenvolvedor limitou a cadeia a 8 contratos pelo orçamento de Layer-3. UNLIKE os seguidores de tendência macro que falharam, este é um refinamento de configuração corrigível, não um limite intrínseco: é fácil obter mais convergências listando mais contratos trimestrais históricos datados de BTC (até ~2020). É crucial que a vantagem tenha respaldo diagnóstico mesmo com n=8: Sharpe CI [1.14, 46.66] tem limite inferior de POSITIVE (exclui zero) e a distribuição é bem comportada (assimetria -0.56, curtose 2.37) — um contraste marcante com os seguidores de tendência, cujos ICs abrangiam valores fortemente negativos. A vantagem da convergência determinística faz de 8 eventos quase independentes evidência real, não sorte.
Avalie principalmente pelas convergências walk-forward (cadeia estendida), não pelo holdout de 15 dias; sinalize ao operador se o critério do holdout bloquear carries válidos mantidos por um trimestre.
Ressalva de horizonte (como nas estratégias macro): manutenções de ~90 dias significam que o holdout de 15 dias contém ~0 convergências fechadas, tornando estruturalmente difícil avaliar o critério de holdout. Isso é menos impeditivo que para estratégias seguidoras de tendência, porque a cadeia estendida oferece convergências suficientes para janelas walk-forward diagnósticas, mas o operador deve observar que o holdout exige um tratamento sensível ao horizonte para carries mantidos por um trimestre.
Confirmar a neutralidade em delta e a contribuição da base por trimestre no backtest completo da cadeia estendida.
Duas verificações de sanidade dos analistas (nenhuma é defeito de código): (1) exposure_pct 227% — para um par spot comprado + futuro vendido delta-neutro a capital_frac 0.45/perna, o bruto esperado é ~0.90x; 227% provavelmente é um artefato de notional bruto/marcação valorizada (beta 0.0105, max_dd 3.24%, ganhos/perdas quase simétricos de largest_win confirmam que o livro está IS neutro), mas confirme que não há desvio no dimensionamento ao longo da cadeia estendida. (2) avg_loss ($13,905) supera ligeiramente avg_win ($12,384) em win_rate 0.5625 — resultado líquido positivo, mas alguns trimestres convergem de forma desfavorável (backwardation/ampliação da base antes da rolagem); confirme que a vantagem não depende de um ou dois trimestres com contango elevado.
Nenhum problema no código — a rolagem é sólida e reutilizável em uma cadeia de qualquer extensão.
CREDIT (sem defeito): o ROLL está implementado corretamente conforme solicitado na iteração -1 — _candidate seleciona o contrato trimestral ativo mais próximo do vencimento, com margem de tempo (3 dias de verificação de defasagem _live + _dte por contrato), mantém a posição até roll_buffer_days antes da liquidação e então rola para o próximo trimestre, vencimento interpretado por contrato, proteção contra perna descoberta, pernas delta-neutras com notional igual (margem linear em USDT), spot apenas em BUY (seguro para CASH), dimensionamento limitado e independente do caminho, trabalho O(1) por barra. O período trimestral 12-HOUR (diferente do período primário 1-DAY) evita corretamente o impasse de alinhamento no mesmo período para contratos vencidos/não listados. Mecanismo validado: 8 convergências limpas em 90 dias, ~4/ano, viável após taxas (1.06% de comissão).
Histórico de Iterações
RuntimeError: dados de funding indisponíveis para a perna perp 'BTCUSDT_230929.BINANCE' — a coleta sob demanda falhou ou a venue não tem histórico de funding (backtest bloqueado para preservar a precisão; defina SF_DISABLE_ONDEMAND_FUNDING=1 para contornar) Traceback (most recent call last): File "/opt/strategy-factory/src/agents/backtest_agent.py", line 190, in _run_backtest await self._ensure_funding_for_perp_legs(instrument_id, extra_instrs) File "/opt/strategy-factory/src/agents/backtest_agent.py", line 406, in _ensure_funding_for_perp_legs raise RuntimeError( RuntimeError: dados de funding indisponíveis para a perna perp 'BTCUSDT_230929.BINANCE' — a coleta sob demanda falhou ou a venue não tem histórico de funding (backtest bloqueado para preservar a precisão; defina SF_DISABLE_ONDEMAND_FUNDING=1 para contornar)
Resumo do resultado
A hipótese apontou a disponibilidade de dados/klines de vencimentos trimestrais históricos como uma dependência que deveria interromper o processo imediatamente, e isso foi decisivo: o requisito de dados de funding do harness de backtest para a perna de futuros precisa ser atendido (ou contornado por SF_DISABLE_ONDEMAND_FUNDING) antes mesmo que um carry de base trimestral possa ser avaliado.
Foi abandonado após 3 iterações, quando o backtest falhou com um RuntimeError: não havia dados de funding disponíveis para a perna 'BTCUSDT_230929.BINANCE' — o mecanismo tratou o futuro trimestral com vencimento definido como um perp que exigia histórico de funding, bloqueando o backtest para preservar a precisão.
Um cash-and-carry BTC neutro ao mercado que compra BTCUSDT à vista e vende o futuro trimestral USD-M com vencimento mais próximo, mantendo a posição até a liquidação para capturar a base de contango com convergência determinística (~5-15% anualizada), em vez do pequeno funding de perp.
Não há métricas de desempenho — o backtest nunca foi concluído, portanto não há retorno, Sharpe ou contagem de operações; a etapa de otimização nunca foi alcançada.
Motivo do Abandono
backtest_failed: RuntimeError: dados de funding indisponíveis para a perna perp 'BTCUSDT_230929.BINANCE' — a coleta sob demanda falhou ou a venue não tem histórico de funding (backtest bloqueado para preservar a precisão; defina SF_DISABLE_ONDEMAND_FUNDING=1 para contornar) Traceback (most recent call last): File "/opt/strategy-factory/src/agents/backtest_agent.py", line 190, in _run_backtest await self._ensure_funding_for_perp_legs(instrument_id, extra_instrs) File "/opt/strategy-factory/src/agents/backtest_agent.py", line 406, in _ensure_funding_for_perp_legs raise RuntimeError( RuntimeError: dados de funding indisponíveis para a perna perp 'BTCUSDT_230929.BINANCE' — a coleta sob demanda falhou ou a venue não tem histórico de funding (backtest bloqueado para preservar a precisão; defina SF_DISABLE_ONDEMAND_FUNDING=1 para contornar)
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.