Monday, 23 September 2019

Contratos futuros contínuos para fins de backtesting


Contratos Futuros Contínuos para Fins de Backtesting


Por Michael Halls-Moore em 29 de janeiro de 2017


Em um artigo anterior sobre o QuantStart, investigamos como fazer o download de dados de futuros livres do Quandl. Neste artigo vamos discutir as características dos contratos de futuros que apresentam um desafio de dados a partir de um ponto de vista de backtesting. Em particular, a noção de "contrato contínuo" e "retornos de rolo". Vamos delinear as principais dificuldades de futuros e proporcionar uma implementação em Python com pandas que podem parcialmente aliviar os problemas.


Breve Visão Geral dos Contratos Futuros


Futuros são uma forma de contrato celebrado entre duas partes para a compra ou venda de uma quantidade de um ativo subjacente em uma data especificada no futuro. Esta data é conhecida como entrega ou expiração. Quando esta data é atingida o comprador deve entregar o subjacente físico (ou dinheiro equivalente) para o vendedor para o preço acordado na data de formação do contrato.


Na prática, os futuros são negociados em bolsas (ao contrário de Over The Counter - negociação OTC) para quantidades padronizadas e qualidades do subjacente. Os preços são marcados para o mercado todos os dias. Futuros são incrivelmente líquidos e são usados ​​pesadamente para fins especulativos. Embora os futuros fossem freqüentemente utilizados para proteger os preços de bens agrícolas ou industriais, um contrato de futuros pode ser formado em qualquer subjacente tangível ou intangível, como índices de ações, taxas de juros de valores de câmbio.


Uma lista detalhada de todos os códigos de símbolo usados ​​para contratos futuros em várias bolsas pode ser encontrada no site CSI Data: Futures Factsheet.


A principal diferença entre um contrato de futuros e propriedade de ações é o fato de que um contrato de futuros tem uma janela limitada de disponibilidade em virtude da data de vencimento. Em qualquer momento, haverá uma variedade de contratos de futuros sobre o mesmo subjacente todos com diferentes datas de expiração. O contrato com a data de vencimento mais próxima é conhecido como o contrato próximo. O problema que enfrentamos como comerciantes quantitativos é que em qualquer momento no tempo temos uma escolha de vários contratos com os quais o comércio. Assim, estamos lidando com um conjunto sobreposto de séries temporais ao invés de um fluxo contínuo, como no caso de ações ou câmbio.


O objetivo deste artigo é descrever várias abordagens para a construção de um fluxo contínuo de contratos a partir deste conjunto de séries múltiplas e para destacar os tradeoffs associados a cada técnica.


Formando um Contrato Futuro Contínuo


A principal dificuldade com a tentativa de gerar um contrato contínuo dos contratos subjacentes com entregas variadas é que os contratos não costumam negociar aos mesmos preços. Assim situações surgem onde eles não fornecem uma emenda suave de um para o outro. Isto é devido aos efeitos do contango e do backwardation. Existem várias abordagens para resolver este problema, que agora discutimos.


Abordagens comuns


Infelizmente, não existe um único método "padrão" para unir os contratos futuros no setor financeiro. Em última análise, o método escolhido dependerá fortemente da estratégia que emprega os contratos e do método de execução. Apesar do fato de que não existe um único método existem algumas abordagens comuns:


Ajuste para trás / para frente ( "Panamá")


Este método alivia a "lacuna" em vários contratos, deslocando cada contrato de tal forma que as entregas individuais se unem de forma suave aos contratos adjacentes. Assim, a abertura / fechamento em todos os contratos anteriores no vencimento coincide.


O problema chave com o método de Panamá inclui a introdução de um viés da tendência, que introduzirá uma grande deriva aos preços. Isso pode levar a dados negativos para contratos suficientemente históricos. Além disso, há uma perda das diferenças de preços relativos devido a uma mudança absoluta nos valores. Isso significa que os retornos são complicados de calcular (ou simplesmente incorretos).


Ajuste proporcional


A abordagem de Ajuste de Proporcionalidade é semelhante à metodologia de ajuste de manipulação de divisão de ações em ações. Ao invés de assumir uma mudança absoluta nos contratos sucessivos, a razão entre o preço de fechamento mais antigo (fechamento) eo preço aberto mais recente é usada para ajustar proporcionalmente os preços dos contratos históricos. Isso permite um fluxo contínuo sem uma interrupção do cálculo de retornos percentuais.


A questão principal com o ajuste proporcional é que todas as estratégias de negociação dependentes de um nível de preço absoluto também terão de ser ajustadas de forma semelhante para executar o sinal correto. Este é um processo problemático e propenso a erros. Assim, este tipo de fluxo contínuo é muitas vezes útil apenas para análise estatística sumária, em oposição à pesquisa de backtesting direta.


Rollover / Série Perpétua


A essência desta abordagem é criar um contrato contínuo de contratos sucessivos, tomando uma proporção linearmente ponderada de cada contrato ao longo de um número de dias para garantir uma transição mais suave entre cada um.


Por exemplo, considere cinco dias de suavização. O preço no dia 1, $ P_1 $, é igual a 80% do preço do contrato distante ($ F_1 $) e 20% do preço do contrato próximo ($ N_1 $). Similarmente, no dia 2 o preço é $ P_2 = 0.6 \ times F_2 + 0.4 \ times N_2 $. No dia 5, temos $ P_5 = 0,0 \ times F_5 + 1,0 \ times N_5 = N_5 $ eo contrato então se torna apenas uma continuação do preço próximo. Assim, após cinco dias o contrato é suavemente transição do longe para o próximo.


O problema com o método rollover é que ele requer negociação em todos os cinco dias, o que pode aumentar os custos de transação.


Existem outras abordagens menos comuns para o problema, mas vamos evitá-las aqui.


Formação de Roll-Return em Python e Pandas


O restante do artigo concentrar-se-á na implementação do método de série perpétua, uma vez que este é o mais adequado para o backtesting. É uma maneira útil de realizar pesquisa de pipeline de estratégia.


Vamos juntar o contrato de futuros "próximo" e "futuro" do WTI Crude Oil (símbolo CL) para gerar uma série contínua de preços. No momento da escrita (janeiro 2017), o contrato próximo é CLF2017 (janeiro) eo contrato distante é CLG2017 (fevereiro).


A fim de realizar o download de dados de futuros que eu fiz uso do plugin Quandl. Certifique-se de definir o ambiente virtual Python correto em seu sistema e instale o pacote Quandl digitando o seguinte no terminal:


Agora que o pacote Quandl é intalled, precisamos fazer uso de NumPy e pandas, a fim de realizar a roll-returns construção. Se você não tem o NumPy ou os pandas instalados, siga o meu tutorial aqui. Crie um novo arquivo e insira as seguintes instruções de importação:


O trabalho principal é realizado na função futures_rollover_weights. Ele requer uma data de início (a primeira data do próximo contrato), um dicionário de datas de liquidação do contrato (expiry_dates), os símbolos dos contratos e o número de dias para rolar o contrato sobre (padrão de cinco). Os comentários abaixo explicam o código:


Agora que a matriz de ponderação foi produzida, é possível aplicá-la às séries temporais individuais. A função principal baixa os contratos próximos e distantes, cria um único DataFrame para ambos, constrói a matriz de ponderação de rollover e, finalmente, produz uma série contínua de ambos os preços, adequadamente ponderada:


A saída é a seguinte:


Pode-se ver que a série é agora contínua entre os dois contratos. O próximo passo é realizar isso para várias entregas ao longo de uma variedade de anos, dependendo de suas necessidades backtesting.


Referências


Se você quiser mais detalhes na formação de séries contínuas de preços futuros, por favor, dê uma olhada nos seguintes links:


Michael Halls-Moore


Mike é o fundador da QuantStart e tem estado envolvido na indústria de finanças quantitativas nos últimos cinco anos, principalmente como desenvolvedor quantitativo e, mais tarde, como consultor de comerciantes de quant para hedge funds.

No comments:

Post a Comment