597 / 691BT

Backtesting

Teste retrospetivo de estratégias

Backtesting simula regras previamente descritas sobre dados históricos. O resultado depende da disponibilidade temporal das informações, da seleção dos dados, do modelo de execução e dos custos. Um lucro histórico não é uma operação efetivamente realizada nem uma garantia de rentabilidade futura.

Backtesting é uma simulação histórica de regras de negociação ou decisão com dados, ordem temporal e pressupostos de execução explicitamente definidos. Permite verificar o comportamento de uma regra numa amostra passada, mas o seu valor informativo depende da conceção de todo o teste.

Backtesting reproduz regras sobre dados históricos e calcula o resultado que teriam sob os pressupostos escolhidos. Bailey e os coautores descrevem-no como uma simulação histórica de uma estratégia algorítmica e alertam também para o risco de falsas descobertas. A nossa delimitação editorial: o resultado pertence a uma versão específica das regras, dos dados e do modelo de execução. Não comprova que alguém tenha realmente efetuado essas operações. Um cálculo reproduzível pode revelar um erro ou uma ideia inadequada, mas, por si só, não transforma o passado numa previsão fiável. [Bailey et al. — The Probability of Backtest Overfitting]

A QuantConnect descreve o enviesamento em que a simulação usa informações futuras, como dados contabilísticos antes da publicação ou as suas correções posteriores. A nossa própria regra temporal exige, para cada dado de entrada, o momento da sua disponibilidade, e não apenas a data do período a que pertence. Um sinal de uma vela fechada não pode, sem um pressuposto adicional, obter uma operação a um preço que já não era possível aproveitar. No nosso exemplo, os preços de fecho anteriores só são usados no período seguinte, e o modelo define explicitamente a execução ao preço de abertura desse período. [QuantConnect — Research Guide]

A QuantConnect chama a atenção para testes que incluem apenas títulos que sobreviveram até ao fim do período e para a aplicação retrospetiva da composição atual de um índice. A nossa questão mais geral é saber se o conjunto histórico conserva também os instrumentos disponíveis na altura que desapareceram mais tarde. É necessário documentar os dados em falta, as alterações de metodologia e a seleção dos mercados. Numa simulação de bitcoin, não se pode considerar automaticamente o preço de um serviço como um preço alcançável noutro serviço. A qualidade dos dados significa poder rastrear as correções, não eliminar resultados inconvenientes. [QuantConnect — Research Guide]

A documentação da QuantConnect distingue o sinal e a ordem do modelo que determina o preço e a quantidade executada. Também destaca a diferença entre a execução parcial na negociação real e o pressuposto de execução total nos modelos predefinidos. O nosso requisito é descrever quando uma ordem pode ser executada, o que acontece perante liquidez insuficiente e como se trata um preço desatualizado. O simples toque num nível de preço nos dados históricos não prova a disponibilidade de uma contraparte para uma ordem de dimensão arbitrária. O resultado do modelo de execução continua a ser um pressuposto da simulação. [QuantConnect — Trade Fills: Key Concepts]

A QuantConnect descreve Slippage como a diferença entre o preço de execução esperado e o efetivo e refere a influência da latência, da ligação e das condições de mercado; o desvio pode ser favorável ou desfavorável. A nossa verificação dos custos separa as comissões, o preço de execução e eventuais outros custos de manutenção da posição ou de financiamento. Um custo já incluído no preço de execução não pode ser novamente subtraído. Um valor nulo é um pressuposto concreto do modelo, não uma prova de que o mercado não tem custos. A sensibilidade a custos mais elevados ajuda a determinar se um pequeno lucro histórico depende de uma configuração otimista. [QuantConnect — Slippage: Key Concepts]

A documentação de TimeSeriesSplit explica a divisão ordenada no tempo para evitar treinar o modelo no futuro e avaliá-lo no passado. O nosso requisito metodológico é definir o período de conceção das regras e o período da sua validação posterior antes de observar os resultados. Se, após um insucesso, as regras voltarem a ser ajustadas em função do período de validação, esse período já influenciou o desenvolvimento. A divisão cronológica, por si só, não resolve a fuga de informação do pré-processamento, de variáveis-alvo sobrepostas ou da seleção repetida de variantes. É necessário descrever o procedimento e as fronteiras entre os conjuntos de dados. [scikit-learn — TimeSeriesSplit]

Bailey e os coautores mostram que procurar repetidamente a melhor configuração nos mesmos dados aumenta o risco de falsas descobertas e de ajuste ao ruído passado. A nossa regra de apresentação exige indicar o historial de tentativas, e não apenas a curva vencedora. Isso inclui alterações de parâmetros, de períodos e da seleção de instrumentos. Um resultado escolhido após muitas tentativas não tem o mesmo valor informativo que uma regra definida previamente e mantida sem alterações. O método destes autores para estimar a probabilidade de sobreajuste não é aplicado no nosso exemplo simples nem substituído por uma única divisão dos dados. [Bailey et al. — The Probability of Backtest Overfitting]

A NFA alerta que os resultados hipotéticos não representam negociação real, podem beneficiar do conhecimento posterior dos acontecimentos e modelar imperfeitamente a liquidez, a derrapagem do preço ou o comportamento perante uma perda real. O nosso relatório deve, por isso, conservar a versão dos dados e do código, as regras, os pressupostos de execução, os custos incluídos e a lista completa das operações simuladas. A rentabilidade total precisa do contexto do risco e de uma comparação em condições idênticas; um gráfico atraente selecionado não basta. Nem uma implementação sem erros de um teste histórico garante a viabilidade ou a rentabilidade no mercado futuro. [NFA — Use of Promotional Material Containing Hypothetical Performance Results]

ExemploEXEMPLO · BT

Sinal do período anterior, execução no seguinte

O nosso exemplo fictício usa quatro períodos de igual duração: A, B, C e D. O saldo inicial em dinheiro é de 1000 USD, sem posições abertas, dívida, depósitos ou levantamentos. Os dois preços de fecho anteriores ao período A são [100, 100] USD/BTC. Os preços de abertura dos períodos A a D são [101, 103, 102, 105] USD/BTC e os preços de fecho são [102, 101, 104, 103] USD/BTC. A regra previamente definida compra 1 BTC no início do período apenas quando o último preço de fecho concluído excede o anterior preço de fecho concluído; no final desse mesmo período, vende tudo. Os sinais são, por isso, [0, 1, 0, 1], em que 1 significa uma operação e 0 inatividade. O modelo pressupõe execução total exatamente aos preços de abertura e de fecho indicados, spread e Slippage nulos e nenhum outro custo além de uma comissão de 0.1 USD por cada compra ou venda. Em B, compra-se por 103 USD e vende-se por 101 USD; em D, por 105 USD e 103 USD. Os resultados brutos dos períodos são [0, -2, 0, -2] USD. As quatro execuções de compra ou venda custam, no total, 0.4 USD e os resultados líquidos são [0, -2.2, 0, -2.2] USD. A soma bruta é de -4 USD, a soma líquida de -4.4 USD e o saldo final em dinheiro de 995.6 USD. O gráfico apresenta os contributos líquidos de cada período, não o saldo da conta nem uma probabilidade. Trata-se de uma simulação da ordem temporal e da contabilização que pode ser verificada à mão, não de dados reais de mercado, de otimização ou de uma prova de desempenho futuro.

Para ter uma visão mais completa, leia este verbete junto com Trading Plan, Trading Journal, Slippage, Overfitting, Walk-forward Analysis. Também há referências a este verbete em Technical analysis, OHLCV, Timeframe, Candlestick chart.

01Um backtest lucrativo prova que a estratégia dará lucro?

Não. O resultado pode depender dos dados específicos, dos custos, do modelo de execução ou da seleção da melhor variante. É necessário verificar a correção temporal, os pressupostos e o processo de seleção; mesmo depois disso, não existe garantia de rentabilidade futura.

02Basta subtrair as comissões apenas ao lucro final?

Só se esse método corresponder exatamente ao modelo e não afetar o capital disponível nem as decisões seguintes. Normalmente, é necessário contabilizar os custos nos acontecimentos correspondentes, distinguir o preço de execução das comissões e evitar a dupla subtração.

DOC · 001Bailey et al. — The Probability of Backtest OverfittingFonte primária ↗DOC · 002QuantConnect — Research GuideDocumentação ↗DOC · 003QuantConnect — Trade Fills: Key ConceptsDocumentação ↗DOC · 004QuantConnect — Slippage: Key ConceptsDocumentação ↗DOC · 005scikit-learn — TimeSeriesSplitDocumentação ↗DOC · 006NFA — Use of Promotional Material Containing Hypothetical Performance ResultsDocumentação ↗
Fontes em primeiro lugar · Não é recomendação de investimento