Na terça-feira de manhã, nossa estratégia de tendência em futuros de petróleo bruto estava comprada no contrato prestes a vencer. O sinal fazia exatamente o que havíamos pedido: manter a posição enquanto a tendência continuasse positiva. O backtest mostrava um ganho modesto. A conta simulada registrava uma venda, uma compra no contrato seguinte, 2 taxas e um preço de entrada pior do que o gráfico sugeria.
Não havia nada de misterioso com o sinal. O backtest tratava “o preço do futuro” como uma coisa contínua. Na conta, era preciso encerrar um contrato e abrir outro, em 2 livros de ofertas diferentes, a 2 preços diferentes.
Encontramos a discrepância ao revisar uma posição que atravessava a janela de rolagem. A estratégia usava um contrato líquido do mês mais próximo e o mantinha até uma regra de calendário transferi-lo para o mês seguinte. A regra fazia sentido. A contabilização em torno dela, não.
Nossa série contínua havia sido ajustada retroativamente para remover a diferença entre contratos. Isso tornava o gráfico útil para calcular uma tendência. Também significava que a série não continha nenhum preço real pelo qual pudéssemos encerrar o contrato antigo ou abrir o novo. O backtest usava o nível ajustado para marcar a operação durante a rolagem e depois retomava as negociações como se a posição simplesmente tivesse continuado.
Para gerar um sinal, uma série contínua pode ser uma medida útil. Para representar uma execução, é ficção. Uma rolagem são 2 operações, e o spread entre os contratos faz parte da estrutura do mercado, não é um salto cosmético a ser suavizado.
Reconstruímos o evento com os 2 contratos listados. O mês antigo tinha bid a 79.98 e ask a 80.00. O mês seguinte tinha bid a 80.42 e ask a 80.45. Nossa posição comprada precisava vender o contrato antigo pelo bid e depois comprar o novo pelo ask. O spread calendário era de 44 centavos entre esses lados executáveis.
Esse valor não representava automaticamente uma perda de 44 centavos. Os contratos tinham meses de entrega diferentes, e o spread refletia carregamento, armazenamento, financiamento e expectativas de oferta. Uma posição mantida durante a rolagem continua exposta à trajetória de preço do novo contrato; ela não paga todo o spread cotado como se fosse uma taxa. Mas a estratégia precisa realizar a saída do contrato antigo e estabelecer a entrada no novo. Se o cálculo de retorno comparar esses preços como se fossem do mesmo instrumento, pode inventar ou apagar P&L.
Separamos as funções na reprodução. A série contínua continuou gerando o sinal de tendência. Os preços específicos de cada contrato cuidaram das marcações e das ordens. Na rolagem, o simulador enviava uma ordem de encerramento para o mês prestes a vencer e uma ordem de abertura para o mês seguinte, aplicava as taxas de cada contrato e considerava o spread e a profundidade disponível em cada livro.
Mesmo assim, a primeira reprodução ainda divergia da conta simulada. Havíamos sincronizado as 2 execuções no mesmo instante, embora as ordens tivessem sido enviadas em sequência. A ordem de encerramento do mês antigo foi executada, mas o ask do mês seguinte mudou antes que a compra chegasse ao livro. A rolagem pode ser executada como spread calendário quando a plataforma oferece essa opção, ou como 2 pernas com exposição entre elas. São premissas de execução diferentes. Para a comparação, usamos a sequência real de ordens da conta simulada.
Depois percebemos que a própria regra de calendário estava mal definida. “Rolar 5 dias antes do vencimento” parece preciso até que um feriado altere o calendário de negociação, a liquidez migre para o mês seguinte mais cedo ou a convenção de vencimento varie conforme o contrato. Em um lugar, havíamos codificado a contagem de dias corridos; em outro, a de dias úteis. A estratégia da conta simulada rolava na quinta sessão antes do último dia de negociação; o backtest rolava 5 dias corridos antes.
A data de rolagem é uma regra de negociação. Registre o calendário da bolsa e o evento que a aciona; caso contrário, mais cedo ou mais tarde, o backtest e a conta vão divergir sobre qual contrato você tem em carteira.
Alteramos a instrução de rolagem para especificar a data do último dia de negociação do contrato, contar as sessões pelo calendário da bolsa em que ele é negociado e exigir uma verificação de liquidez mínima antes da transferência. Esse limite era uma proteção prática, não uma promessa de execução melhor: volume e open interest são indicadores imperfeitos do que nossa ordem consegue executar. Registramos o contrato selecionado e os preços das 2 pernas para que cada reprodução pudesse explicar a transferência.
Depois dessas mudanças, o retorno histórico da estratégia caiu. A diferença não veio de uma única perda enorme na rolagem. Ela resultou de muitas pequenas correções: o contrato certo, a sessão de negociação certa, taxas reais nas 2 pernas e saídas e entradas precificadas em seus próprios livros. Uma rolagem com pouca liquidez saiu especialmente cara, então a mantivemos visível em vez de diluí-la numa média.
Se o seu backtest de futuros usa um gráfico contínuo, pergunte o que esse gráfico pode representar. Ele pode fornecer uma entrada consistente para um sinal. Não pode substituir um contrato que você poderia ter comprado ou vendido. Para cada posição que atravessa o vencimento, o registro da pesquisa deve identificar o contrato antigo, o novo contrato, o gatilho da rolagem, o modelo de execução e os 2 fluxos de caixa resultantes.
Aquela operação de terça-feira não foi uma falha sofisticada. Era uma linha com aparência lucrativa no gráfico que ignorava o momento em que a conta precisava trocar o que tinha em carteira. Quando incluímos esse momento de volta na reprodução, o resultado ficou menos atraente e muito mais útil.
← Todos os artigos


