O que é Backtesting? Como fazer o backtest de uma estratégia de negociação de criptografia

>

Introdução ao Backtesting

Backtesting é uma simulação matemática usada por traders para avaliar o desempenho de uma estratégia de negociação. A simulação aproveita os dados históricos do mercado em uma tentativa de calcular o quão bem uma estratégia de negociação teria se saído no passado.

Em sua essência, o backtesting é uma forma de os traders tentarem prever se uma estratégia será lucrativa ou não quando implementada com capital real. Os traders usam backtesting para filtrar qualquer estratégia que não tenha sido lucrativa historicamente.

Embora o desempenho histórico não garanta resultados futuros, o backtesting ainda é a maneira mais confiável de identificar estratégias robustas. É necessário estudar essas simulações para filtrar estratégias que apresentam desempenho claramente inferior. Dessa forma, temos as melhores chances de ganhar dinheiro e não precisamos testar estratégias com fundos reais.

Conforme as ferramentas de negociação de criptomoedas se tornaram mais populares, o mesmo aconteceu com o backtesting. Hoje, é recomendado que os negociantes façam um backtest completo de cada estratégia antes de lançá-la no mercado de criptografia selvagem. Dessa forma, podemos ganhar a confiança de que a estratégia tem potencial para um desempenho ideal.

Um estudo de backtest para reequilíbrio

Este estudo avalia a eficácia de várias estratégias de rebalanceamento para determinar as melhores configurações históricas.

Requisitos de dados de backtesting

Antes de começarmos as estratégias de backtesting, devemos entender os diferentes tipos de dados que os desenvolvedores usam para construir ferramentas de backtesting e como cada um deles representa o mercado do mundo real.

Dados Candlestick

A maneira mais comum de implementar uma ferramenta de backtesting é os desenvolvedores usarem dados de velas OHLCV. A razão pela qual a maioria dos desenvolvedores usa esses dados é porque eles estão prontamente disponíveis.

Infelizmente, embora sejam os dados mais fáceis de acessar para criar essas ferramentas, são os dados menos confiáveis. Na verdade, usar dados de candlestick OHLCV para executar backtests pode ser a diferença entre construir uma estratégia lucrativa e perder seu dinheiro.

A situação fica ainda pior quando os comerciantes usam dados de velas agregados de fontes como o CoinMarketCap. Os dados agregados não são uma representação válida dos pedidos reais que estavam disponíveis em uma troca específica no momento.

Não use dados de velas para construir ferramentas de backtesting.

Dados comerciais tick-by-tick

Os dados comerciais tick-by-tick podem ser um componente útil para ferramentas de backtesting histórico. As negociações individuais de ticks são as negociações exatas que foram executadas em uma bolsa a cada momento. Essas negociações individuais representam ordens reais que foram atendidas, portanto, sabemos com certeza que deve ter havido uma ordem em aberto disponível a esse preço na bolsa.

Embora os dados de comércio de ticks possam ser um aspecto poderoso dos serviços de backtesting, eles ainda serão apenas um pouco mais precisos do que os dados de candlestick OHLCV. Os pontos de dados comerciais individuais não fornecem informações sobre o estado da carteira de pedidos no momento da negociação. Como resultado, os desenvolvedores não podem avaliar com precisão quais ordens estariam disponíveis na bolsa naquele exato momento quando uma operação simulada é executada.

O uso de dados comerciais tick-by-tick para ferramentas de backtesting é desencorajado.

Dados de instantâneo do livro de pedidos

O último tipo de dado comum nas ferramentas de backtesting são os instantâneos do livro de pedidos. Os instantâneos do livro de pedidos fornecem o estado exato de um mercado no momento do instantâneo. A intenção é ter uma representação completa de quais pedidos estavam disponíveis na bolsa em um determinado momento.

Ao construir ferramentas de backtesting, este é o tipo de dado mais poderoso a ser usado. Como os dados incluem as ordens precisas que estavam disponíveis no momento em que uma negociação é simulada, podemos calcular as negociações exatas que poderíamos realizar e o preço de cada uma dessas negociações.

Os instantâneos do livro de pedidos permitem que os desenvolvedores simulem o impacto do spread bid-ask, slippage e liquidez.

Instantâneos do livro de pedidos são altamente recomendados como o tipo de dados para ferramentas de backtesting.

Fontes de dados

A fonte primária de dados do livro de pedidos é a própria troca de criptografia individual. Na maioria dos casos, esses dados são transmitidos ao vivo por meio de websockets de uma bolsa. No entanto, devido ao grande volume de dados, as trocas geralmente não armazenam esses dados a longo prazo. Isso significa que uma vez que os dados são enviados por meio de um websocket de trocas, eles desaparecem para sempre.

A menos, é claro, que alguém colete os dados da troca e os disponibilize por meio de um serviço terceirizado. É aqui que os provedores de dados entram em cena. Os provedores de dados são essencialmente empresas que agregam dados em cada bolsa e os armazenam para que outras pessoas possam acessá-los mais tarde.

Os provedores de dados para instantâneos históricos do livro de pedidos são poucos e espaçados. Devido ao fornecimento limitado desses dados, os desenvolvedores recorreram a conjuntos de dados alternativos, como os castiçais OHCLV, que podem causar imprecisões nos backtests. Como resultado, a maioria das ferramentas de backtesting disponíveis no mercado hoje deturpam o desempenho das estratégias.

Após uma recente parceria entre Shrimpy e Kaiko, Shrimpy agora é capaz de oferecer um catálogo histórico completo de instantâneos de livros de pedidos em todas as principais bolsas. Desde 2014, a Kaiko coleciona meticulosamente dados comerciais tick-by-tick, instantâneos do livro de pedidos e castiçais OHLCV.

Os desenvolvedores podem acessar esses dados por meio do APIs de desenvolvedor Shrimpy. Usando o modelo simples de preços sob demanda, os clientes podem consultar instantâneos em diferentes períodos de tempo, pares de negociação e bolsas.

A Kaiko fornece os dados mais precisos do mercado. Agora, todo desenvolvedor pode acessar os dados do Kaiko para simular backtests com precisão por meio das APIs Shrimpy.

Scripts Python para livros de pedidos históricos

O APIs de desenvolvedor Shrimpy fornecer acesso a livros históricos de pedidos de câmbio. Instantâneos de cada livro de pedidos são tirados em um intervalo de 1 minuto. Usando o Biblioteca Python Shrimpy, forneceremos exemplos de como os desenvolvedores podem acessar dados históricos com apenas algumas linhas de código.

Simulando um Backtest

Figura 1: Um exemplo de livro de pedidos para o par de negociação ENJ-USDT.

Para calcular com precisão o desempenho de uma estratégia, um backtest requer os números mais exatos possíveis. Alguns fatores que devem ser considerados durante um backtest incluem:

  • A taxa de negociação da bolsa

  • O spread bid-ask para o par de negociação

  • Derrapagem do mercado na carteira de pedidos

  • Tempo para cada negociação individual

Ao simular a compra de um ativo, devemos usar o preço pedido no livro de pedidos. Se você está na bolsa, o melhor preço pedido é o preço mais baixo que alguém na bolsa está disposto a vender o ativo. Não se esqueça de levar em consideração também a taxa de negociação e a derrapagem.

Usando a carteira de pedidos na Figura 1 como exemplo, vamos imaginar que queremos comprar 1.500 USDT de ENJ. Por causa deste exemplo, vamos supor que este livro de pedidos seja para Binance, que tem uma taxa de negociação base de 0,1%.

Poderíamos simular a compra de 1.500 USDT de ENJ aumentando gradativamente nosso preço do pedido em relação ao livro de pedidos até adquirirmos o valor desejado de 1.500 USDT de ENJ. As negociações consecutivas que executaríamos incluem o seguinte:

  1. Compre 1151.74904126 ENJ por 0,20559424 USDT cada = 236,97296881 USDT + 0,2369729 USDT em taxas (1262,79005829 USDT restantes)

  2. Compre 2559.954 ENJ por 0,20640294 USDT cada = 528,38203186 USDT + 0,52838203 USDT em taxas (733,8796444 USDT restante)

  3. Compre 1992.51418976 ENJ por 0,20659518 USDT cada = 411,64382769 USDT + 0,41164382 USDT em taxas (321,82417288 USDT restante)

  4. Compre 1555.85587451 ENJ por 0,20663894 USDT cada = 321,50267164 USDT + 0,32150267 USDT em taxas (0 USDT restante)

Observe que havia algo sobrando na carteira de pedidos que não poderíamos comprar na faixa de preço de 0,20663894. A quantia que não compramos permaneceria em troca para outro participante do mercado assumir.

No total, compramos exatamente 7260.08410553 ENJ depois que todas as negociações foram concluídas. Se tivéssemos usado apenas dados de velas OHLCV, nossa estimativa provavelmente estaria tão distante quanto 7319.76112984. Esta é uma diferença de quase 60 ENJ ou quase 1%. Pode não parecer muito, mas esta pequena porcentagem aumenta incrivelmente rápido se estivermos simulando centenas ou milhares de negociações.

Assim que a simulação de negociação for concluída, registre os resultados da ordem para que possamos usar esses fundos para negociar com outro ativo posteriormente no backtest. Usando este registro comercial detalhado, podemos manter registros meticulosos de cada negociação que foi feita durante o backtest. Esses registros podem ser usados ​​para calcular estatísticas adicionais, como o volume de negociação que executamos, quantas negociações realizamos e a frequência de compra ou venda de um determinado ativo.

Resultados de Desempenho

Calcular o desempenho de uma estratégia é simples. Tudo o que precisamos fazer é calcular o valor do nosso portfólio no início do backtest e compará-lo com o valor do nosso portfólio no final do backtest.

O valor de um portfólio é calculado multiplicando o valor de cada ativo que possuímos pelo preço desse ativo e somando os valores de todos os ativos do portfólio.

Fazendo esse cálculo no início do backtest e mais uma vez no final do backtest, podemos obter a mudança de valor para nosso portfólio ao longo do backtest.

O cálculo do desempenho pode ser feito usando a equação:

Desempenho = [(Vf – Vi) / Vi] x 100

Onde,

  • Vf é o valor final do portfólio

  • Vi é o valor inicial do portfólio

  • Multiplique por 100 converter de um decimal para uma porcentagem

Observe que o objetivo de um backtest não é apenas otimizar o desempenho. Essencialmente, só porque uma estratégia específica funciona bem sob as condições de backtest, isso não significa automaticamente que é uma boa estratégia. Devemos também considerar a consistência e robustez da estratégia.

Consistência de backtesting – A capacidade de produzir resultados semelhantes em diferentes períodos históricos e condições de mercado variáveis.

Robustez do Backtest – A capacidade de produzir resultados semelhantes, mesmo quando pequenas alterações são feitas nos parâmetros da estratégia.

Uma estratégia sem robustez pode ver grandes oscilações de desempenho quando até mesmo as menores mudanças são feitas nos parâmetros de uma estratégia. Da mesma forma, uma estratégia que não é consistente provavelmente experimentará resultados muito diferentes ao testar diferentes períodos históricos.

No caso ideal, queremos usar uma estratégia que pode ser testada em qualquer período histórico e produzir resultados semelhantes. Da mesma forma, o desempenho de nossa estratégia não deve sofrer grandes oscilações quando pequenas mudanças são feitas na estratégia.

Estratégias sem consistência ou robustez podem levar a um desempenho futuro amplamente imprevisível. Se o backtesting de uma variedade de períodos de tempo históricos e configurações para nossa estratégia produzir resultados amplamente variáveis, isso pode indicar que nossa estratégia é imprevisível. Nesse caso, selecionar apenas uma única configuração ou período de backtesting para avaliar seria essencialmente ajustar a estratégia a uma situação particular. Os resultados de um backtest overfit não seriam uma representação geral da estratégia.

Um exemplo de estratégia consistente que encontramos é o reequilíbrio. Na grande maioria dos casos, o rebalanceamento superou o desempenho do hodling. Mesmo quando ajustamos o período de rebalanceamento de 1 hora a 1 dia a 1 mês.

Bandeiras vermelhas de backtest

Devido à natureza técnica do backtesting, às vezes é difícil identificar se um backtest é confiável. Os seguintes itens de alerta vermelho irão ajudá-lo a identificar se os resultados de um backtest são razoáveis. Esta não é uma lista extensa, mas alguns dos casos mais comuns.

  1. O desempenho aumenta após cada negociação. Se o desempenho aumentar de forma consistente, especialmente após cada negociação, isso pode indicar que há um erro de cálculo na lógica de negociação.

  2. Crescimento exponencial consistente em fundos. Quando os resultados de desempenho de um backtest crescem exponencialmente ao longo do tempo, isso geralmente pode ser o resultado do uso de castiçais OHLCV para as simulações de negociação ou aponta para um erro de cálculo que é uma porcentagem.

  3. Estratégias de negociação de alta frequência não diminuem de valor. Em geral, uma estratégia que negocia uma quantia significativa perderá valor devido às taxas de negociação. Se uma estratégia de negociação de alta frequência não perde valor, o backtest pode não considerar as taxas de câmbio.

  4. Mercados de baixa liquidez têm o mesmo desempenho dos mercados de alta liquidez. Uma maneira simples de detectar se uma ferramenta de backtesting usa dados de candlestick OHLCV ou dados agregados é executar a estratégia em um mercado de baixa liquidez que normalmente tem um grande spread. Negociação de alta frequência em um mercado de baixa liquidez deve resultar em grandes perdas de portfólio.

  5. Alterar as trocas não afeta os resultados. Cada bolsa tem diferentes taxas de liquidez e negociação. Ao fazer o backtesting de estratégias em diferentes bolsas, você deve obter resultados diferentes. Se você obtiver os mesmos resultados em diferentes bolsas, isso sugere que a ferramenta de backtesting está usando dados agregados e não usa a taxa de negociação correta para cada bolsa individual.

Antes de aceitar os resultados de um backtest pelo valor de face, use essas bandeiras vermelhas para identificar problemas com as negociações simuladas.

Conclusões

Houve alguns temas principais ao longo deste artigo. Primeiramente, demonstramos como pode ser difícil construir uma ferramenta de backtesting robusta. No entanto, ao mesmo tempo, pudemos ilustrar a importância de fazer um backtesting de uma estratégia antes de implantá-la ao vivo.

O primeiro passo para construir uma estratégia de backtesting sempre foi ter dados de alta qualidade. Sem dados de livros de pedidos de alta qualidade, os resultados serão altamente imprecisos. Em última análise, tomar decisões com base em ferramentas de backtesting defeituosas pode ser caro. Isso pode nos fazer ter expectativas irrealistas para uma estratégia que corrói nosso portfólio.

Ao construir uma ferramenta de backtesting, não se esqueça de simular taxas de negociação, slippage e spread bid-ask. Cada um desses aspectos de um backtest pode fazer uma grande diferença. Remover até mesmo um desses componentes do backtest pode ser a diferença entre uma estratégia lucrativa e uma não lucrativa.

Finalmente, antes de implantar uma estratégia baseada em backtests, continue testando. Quando você achar que terminou o teste, teste novamente. Em vez de 100 testes, execute 100.000 testes. O backtesting é a melhor maneira de entendermos o comportamento de uma estratégia. Tente formar novas hipóteses para estratégias e testar essas hipóteses para identificar novas estratégias. Continue o ciclo de experimentação até encontrar estratégias que funcionem para você.

COPIE OS MELHORES COMERCIANTES DO MUNDO

Atualmente, existem milhares de traders ativos gerenciando seu portfólio no Binance. Esses traders são alguns dos traders mais avançados do setor.

Boas leituras adicionais

Como fazer um crypto trading bot usando Python

Guia para Crypto Loans – Principais Credores Comparados

Script para Bitcoin Price Live Ticker (usando Websockets)

Rebalanceamento de limite para gerenciamento de portfólio de criptografia

O que é DeFi? Guia para finanças descentralizadas

Nossa plataforma de negociação social

Shrimpy é uma plataforma de negociação social para criptomoeda. Ele foi projetado para que traders profissionais e novatos venham e aprendam sobre a crescente indústria de criptografia. No Shrimpy, os usuários podem copiar as carteiras e estratégias de negociação de outros traders.

Siga-nos no Twitter e o Facebook para atualizações e faça perguntas às nossas incríveis comunidades ativas no Telegrama & Discórdia.

Obrigada por apareceres!

A equipe Shrimpy

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me