Estratégias
BTC Convergência da Base Trimestral Cash-and-Carry, Neutra ao Mercado (Longo BTCUSDT.BINANCE_SPOT + Curto no Futuro BTC USD-M DATED QUARTERLY com Vencimento Mais Próximo, Mantido até à Liquidação para Captar a Base de Contango DETERMINISTICALLY-CONVERGENT — NOT Funding de Perpétuos, Rolagem no Vencimento, 2 Parâmetros)
Resultado: Abandonado
BtcQuarterlyBasisConvergenceCarryNeutral
Resumo de Resultados
Esta estratégia propôs uma vantagem genuinamente diferente das estratégias falhadas de carry de funding perp da fábrica — um cash-and-carry de BTC, neutro em delta, que captura a base determinística e convergente de futuros trimestrais com data de vencimento, mantidos até à liquidação e substituídos a cada trimestre, com apenas dois parâmetros ajustáveis. Nunca chegou a produzir um backtest: após 3 iterações, a execução falhou porque o motor não conseguiu obter o histórico de funding para a perna trimestral 'BTCUSDT_230929.BINANCE', tratando o contrato com data de vencimento como um perp e bloqueando a execução por motivos de precisão. Como nunca chegou às fases de backtest, revisão do backtest, otimização ou análise, a estratégia foi abandonada devido a uma dependência de dados/infraestrutura, não por falta de mérito económico. A hipótese tinha avisado explicitamente que a disponibilidade de dados dos contratos trimestrais era a dependência decisiva, e foi precisamente aí que o processo parou.
Hipótese
backtest_failed: RuntimeError: dados de funding indisponíveis para a perna perpétua 'BTCUSDT_230929.BINANCE' — a recolha a pedido falhou ou a plataforma não tem histórico de funding (backtest bloqueado para garantir a precisão; defina SF_DISABLE_ONDEMAND_FUNDING=1 para contornar) Traceback (última chamada mais recente): 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étua 'BTCUSDT_230929.BINANCE' — a recolha a pedido falhou ou a plataforma não tem histórico de funding (backtest bloqueado para garantir a precisão; defina SF_DISABLE_ONDEMAND_FUNDING=1 para contornar)
Implementação
Resultados da Verificação
Verificação falhada (Camada 3 — backtest em sandbox): o teste rápido excedeu o limite de 300s. Quase sempre, isto significa trabalho por barra que aumenta com o histórico — por exemplo, voltar a percorrer toda a série de funding/dados suplementares ou reconstruir uma lista e chamar min()/sorted() dentro de calculate_signal()/on_bar() em cada barra. Pré-calcule arrays de timestamps ordenados ONCE em __init__ e use bisect, ou guarde resultados em cache por timestamp, para que o custo por barra seja O(log n), e não O(n).
Estenda extra_instruments à cadeia trimestral FULL BTC (~16-20 contratos desde 2020), usando barras trimestrais de baixa granularidade 12H/1D para respeitar o orçamento do sandbox, de modo que metrics_reliable=true e cada janela walk-forward inclua várias convergências. Apenas a configuração é ampliada — a lógica de rolagem já suporta cadeias de qualquer extensão.
A contagem de convergências é marginal (8) e metrics_reliable=false — abaixo das ~16-20 que defini como objetivo na iter-1. O programador limitou a cadeia a 8 contratos devido ao orçamento do Layer-3. UNLIKE os seguidores de tendências macro que falharam, este é um refinamento de configuração que pode ser corrigido, não um limite intrínseco: é trivialmente possível obter mais convergências listando mais contratos trimestrais históricos datados de BTC (até cerca de 2020). É fundamental que a vantagem tenha suporte diagnóstico mesmo com n=8: o Sharpe CI [1.14, 46.66] tem um limite inferior POSITIVE (exclui zero) e a distribuição apresenta características adequadas (assimetria -0.56, curtose 2.37) — um contraste acentuado com os seguidores de tendências, cujos intervalos de confiança abrangiam valores fortemente negativos. A vantagem das convergências determinísticas faz com que 8 eventos quase independentes constituam evidência real, e não sorte.
Avalie sobretudo as convergências walk-forward (cadeia alargada), não o período de teste de 15 dias; sinalize ao operador se o critério do período de teste bloquear carries válidos mantidos até ao trimestre.
Ressalva de horizonte (tal como nas estratégias macro): posições mantidas por ~90 dias significam que o período de teste de 15 dias contém ~0 convergências fechadas, pelo que é estruturalmente difícil avaliar o critério do período de teste. Menos limitativo do que para as estratégias seguidoras de tendência, pois a cadeia alargada fornece convergências suficientes para janelas walk-forward de diagnóstico; ainda assim, o operador deve ter em conta que o período de teste exige tratamento ajustado ao horizonte para carries mantidos até ao trimestre.
Confirmar a neutralidade em delta e a contribuição da base por trimestre no backtest completo da cadeia alargada.
Duas verificações de sanidade dos analistas (nenhuma é um defeito de código): (1) exposure_pct 227% — para um par delta-neutro de spot + futuro vendido, com capital_frac 0.45 por posição, o valor bruto pretendido é ~0.90x; 227% é provavelmente um artefacto do valor nominal bruto/valorização da posição (beta 0.0105, max_dd 3.24%, ganhos/perdas quase simétricos de largest_win confirmam que a carteira é IS neutra), mas confirme que não há desvios no dimensionamento ao longo da cadeia alargada. (2) avg_loss ($13,905) excede ligeiramente avg_win ($12,384) em win_rate 0.5625 — resultado positivo após custos, mas alguns trimestres convergem de forma desfavorável (backwardation/alargamento da basis antes da rolagem); confirme que a vantagem não depende de um ou dois trimestres com contango elevado.
Nenhum no código — a rolagem é sólida e reutilizável numa cadeia de comprimento arbitrário.
CREDIT (sem defeito): o ROLL está corretamente implementado conforme o meu pedido na iteração -1 — _candidate seleciona o contrato trimestral cotado com vencimento mais próximo e prazo suficiente (verificação _live de dados desatualizados há 3 dias + _dte por contrato), mantém até roll_buffer_days antes da liquidação e depois rola para o próximo trimestre, vencimento obtido por contrato, proteção contra perna descoberta, pernas delta-neutras com notional igual (margem linear USDT), perna à vista apenas BUY (CASH-segura), dimensionamento limitado e independente do percurso, trabalho O(1) por barra. O período trimestral 12-HOUR (diferente do período principal 1-DAY) evita corretamente o bloqueio de alinhamento no mesmo período para contratos expirados/não cotados. Mecanismo validado: 8 convergências limpas de 90 dias, ~4/ano, viável após comissões (comissão de 1.06%).
Histórico de Iterações
RuntimeError: dados de funding indisponíveis para a perna perpétua 'BTCUSDT_230929.BINANCE' — a recolha a pedido falhou ou a plataforma não tem histórico de funding (backtest bloqueado para garantir a precisão; defina SF_DISABLE_ONDEMAND_FUNDING=1 para contornar) Traceback (última chamada mais recente): 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étua 'BTCUSDT_230929.BINANCE' — a recolha a pedido falhou ou a plataforma não tem histórico de funding (backtest bloqueado para garantir a precisão; defina SF_DISABLE_ONDEMAND_FUNDING=1 para contornar)
Resumo de Resultados
A hipótese assinalou a disponibilidade de dados/kline trimestrais datados como dependência que exigia falha imediata, e isso revelou-se decisivo: o requisito do harness de backtest de dados de funding para a perna de futuros tem de ser satisfeito (ou contornado via SF_DISABLE_ONDEMAND_FUNDING) antes de se poder avaliar sequer um carry de base trimestral.
Foi abandonada após 3 iterações, quando o backtest falhou com um RuntimeError: os dados de funding não estavam disponíveis para a perna 'BTCUSDT_230929.BINANCE' — o motor tratou o futuro trimestral datado como um perpétuo que exigia histórico de funding, bloqueando o backtest para garantir a precisão.
Um cash-and-carry de BTC, neutro em termos de mercado, que compra spot de BTCUSDT e vende a descoberto o futuro trimestral USD-M com data de vencimento mais próxima, mantendo a posição até à liquidação para captar a base de contango determinística e convergente (~5-15% anualizada), em vez do reduzido funding de perp.
Não existem métricas de desempenho — o backtest nunca foi concluído, pelo que não há retorno, Sharpe nem número de operações; a fase de otimização nunca foi iniciada.
Motivo do Abandono
backtest_failed: RuntimeError: dados de funding indisponíveis para a perna perpétua 'BTCUSDT_230929.BINANCE' — a recolha a pedido falhou ou a plataforma não tem histórico de funding (backtest bloqueado para garantir a precisão; defina SF_DISABLE_ONDEMAND_FUNDING=1 para contornar) Traceback (última chamada mais recente): 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étua 'BTCUSDT_230929.BINANCE' — a recolha a pedido falhou ou a plataforma não tem histórico de funding (backtest bloqueado para garantir a precisão; defina SF_DISABLE_ONDEMAND_FUNDING=1 para contornar)
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.