Um backtest pode registar uma execução a um preço que o mercado nunca apresentou. Normalmente, o simulador inferiu uma execução aparentemente plausível a partir de dados incompletos: o máximo e o mínimo de uma barra, um ponto médio ou um preço limite tocado por uma única transação. Assim, o registo de transações parece preciso, mas oculta o que o mercado realmente oferecia.
Comece por perguntar com que preço a sua ordem poderia ter interagido. Uma barra de últimas transações indica os preços negociados durante um intervalo. Não indica o bid e o ask quando a ordem chegou, a quantidade disponível nesse momento nem se a sua ordem poderia chegar à frente da fila.
Porque é que o meu backtest mostra uma execução fora do preço de mercado?
Primeiro, seja preciso quanto ao significado de «fora». Uma compra executada abaixo do mínimo da barra ou uma venda acima do máximo é um erro evidente de contabilização ou de temporização. Mesmo uma execução dentro do intervalo entre o máximo e o mínimo pode ser fictícia: o preço pode ter sido negociado antes de a ordem existir, do outro lado do spread ou numa quantidade demasiado pequena para executar a sua ordem.
Considere uma barra de 1 minuto com abertura em 100.00, mínimo de 99.80 e fecho em 100.10. A sua estratégia observa a barra completa, envia uma ordem de compra e o simulador executa-a a 99.80. Esse mínimo pode ter ocorrido perto do início do minuto, cinquenta segundos antes do sinal. A barra não dá qualquer indicação de que 99.80 estivesse disponível depois da decisão.
| Dados disponíveis | O que permitem concluir | O que não permitem concluir |
|---|---|---|
| Barra OHLCV | Intervalo dos preços observados e volume durante um período | Sequência de preços, bid e ask ou disponibilidade quando a ordem chega |
| Registos de transações | Execuções comunicadas com carimbos temporais e preços | Liquidez passiva ou a sua posição na fila |
| Cotações do topo do livro | Melhor bid e ask apresentados nos momentos amostrados | Profundidade para além do melhor nível ou se uma cotação se manteve entre amostras |
| Eventos do livro de ordens | Alterações na profundidade apresentada e eventos na fila, sujeitos à cobertura do feed | Liquidez oculta, acesso à plataforma ou prioridade garantida |
Há outra causa frequente: confundir preços médios com preços executáveis. Se a cotação for 99.99 bid e 100.01 ask, uma compra ao ponto médio de 100.00 fica elegante no relatório. Em geral, uma compra executável paga o ask, acrescido do impacto da dimensão da ordem. Tratar o ponto médio como preço de execução elimina discretamente metade do spread.
Uma ordem limite pode ser executada só porque o mercado tocou no seu preço?
Um toque indica que houve uma transação ao preço limite. Não prova que a sua ordem passiva teria sido executada. Se houvesse outras ordens à sua frente, o volume negociado a esse preço poderia não ser suficiente para chegar à sua posição na fila. A transação também pode ter ocorrido noutra plataforma, enquanto a sua ordem estava colocada noutro local.
Suponha que o seu limite de compra é 50.00 e que, depois de o colocar, o mercado negoceia 200 ações a esse preço. Um simulador baseado apenas no toque executa as 500 ações. Um modelo mais prudente pergunta quanto foi negociado a 50.00 ou abaixo depois da chegada da ordem e, em seguida, tem em conta uma estimativa da fila à sua frente. Sem dados do livro ao nível das ordens, essa fila é um pressuposto. Deve estar visível nos resultados, em vez de ser apresentada como uma certeza.
Num sistema de investigação pequeno, prefiro explicitar esse pressuposto e testar um intervalo de valores a fingir que os dados de velas revelam a prioridade na fila. O intervalo adequado depende da plataforma, da dimensão da ordem e da frequência de negociação da estratégia. Uma ação pouco movimentada na abertura e um contrato de cripto com pouca liquidez às 03:00 UTC são problemas de execução diferentes.
Como devo escolher um modelo de execução para dados de barras?
Ajuste o modelo aos dados e ao que a estratégia se propõe demonstrar. Um backtest baseado em barras pode continuar a ser útil para estratégias lentas, mas as execuções têm de respeitar o que as barras realmente permitem concluir.
- Defina os momentos da decisão e da chegada. Se um sinal usar o fecho da barra, envie a ordem depois desse fecho. Simule a execução a partir do próximo intervalo ou da próxima cotação disponível, e não do mínimo anterior da barra já concluída.
- Use o lado correto do spread. Para compras executáveis, comece pelo ask; para vendas, pelo bid. Se só tiver barras de transações, estime o spread a partir de outra fonte ou indique que o modelo o omite.
- Limite as execuções à liquidez plausível. Aplique um limite de participação ao volume observado e inclua comissões e impacto de mercado. O volume total de uma barra não significa que estivesse todo disponível ao preço escolhido.
- Teste a robustez dos pressupostos. Compare execuções na abertura seguinte com slippage conservador e verifique se os resultados resistem a condições de execução piores. Não ajuste o modelo de execução até a estratégia ser rentável.
Estas são opções de modelação, não uma fórmula para recuperar a única execução verdadeira a partir de dados incompletos. Se a estratégia depender de captar alguns pontos base, os dados de barras podem não ser prova suficiente para sustentar essa afirmação.
Como posso descobrir em que ponto entrou no backtest uma execução impossível?
Siga uma transação suspeita, do sinal ao livro de registos. Guarde em campos separados o carimbo temporal da decisão, o da submissão da ordem, o da chegada simulada, a observação de mercado selecionada, o preço e a quantidade da execução e a comissão. Depois, verifique pela seguinte ordem:
- A variável foi calculada com dados de uma barra que ainda não tinha terminado no momento da decisão?
- A execução usou o máximo, o mínimo ou o fecho da barra, apesar de esse preço ter ocorrido antes da chegada da ordem?
- Uma compra foi associada ao bid ou uma venda ao ask?
- A quantidade simulada excedeu o tamanho da cotação disponível ou o limite de participação do modelo?
- O arredondamento de preços, o tamanho do tick do contrato e as comissões foram aplicados depois de escolhido o preço de execução?
Se não consegue responder a estas perguntas com base no registo da transação, faltam ao backtest dados que sustentem a execução. Acrescente esses campos, reproduza manualmente algumas transações com os dados brutos e confirme se a execução registada poderia ter acontecido segundo o modelo pretendido. Uma curva de capital sem sobressaltos não deteta um preço que só existiu dentro do simulador.
← Todos os artigos


