Crypto Quant: negociação programática de BTC usando Binance e Backtrader — Parte 2 de 3 PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Crypto Quant: negociação programática de BTC usando Binance e Backtrader — Parte 2 de 3


Crypto Quant: negociação programática de BTC usando Binance e Backtrader — Parte 2 de 3 PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Nesta parte wquero instalar Backtrader e teste alguns modelos de negociação em relação aos dados da Binance que coletamos na seção anterior.

Existem vários artigos e vídeos sobre o Backtrader e sua configuração. Esta popular biblioteca Python facilita o trabalho Quant de backtesting de estratégias de negociação com dados históricos, respondendo à pergunta essencial “quão lucrativo teria sido negociar usando determinadas estratégias de COMPRA/VENDA”. A princípio, parece uma alquimia matemática, mas é preciso lembrar que os dados históricos são, bem, históricos! É improvável que uma estratégia de negociação que funcionou ontem funcione hoje... mas voltaremos a isso em breve.

As instruções de instalação do Backtrader ('bt') são SUA PARTICIPAÇÃO FAZ A DIFERENÇA. Nota: existem problemas conhecidos com versões do mapplotlib acima de 3.2.0, portanto, tome cuidado com isso.

O guia de início rápido é uma leitura que vale a pena, encontre-o SUA PARTICIPAÇÃO FAZ A DIFERENÇA.

RSI

O que tentaremos com o Backtrader aqui é fazer backtesting de um RSI (Indicador de Força Relativa) estratégia de negociação em dados históricos de criptografia (para BTC) do início do ano.

O indicador de momentum RSI é explicado SUA PARTICIPAÇÃO FAZ A DIFERENÇA. Ele mede as condições relativas de sobrevenda e sobrecompra para um determinado ativo comercial e um parâmetro de 'período' que é o número de ticks (intervalos de negociação) de trás para frente.

O padrão do parâmetro de período é 14, portanto, se o intervalo for minutos, a fórmula incluirá 14 intervalos de dados. Como exploraremos a seguir, cada indicador técnico possui parâmetros que são a nossa forma de “sintonizar” as condições do mercado; esses parâmetros têm um enorme impacto na lucratividade de qualquer indicador dentro de uma estratégia.

Backtest.py

Nossa configuração de backtest: backtest.py é partilhada SUA PARTICIPAÇÃO FAZ A DIFERENÇA. Isso fornecerá a estrutura de backtest para nossa execução de backtest, a ser definida a seguir. Esta é uma configuração 'bt' bastante padrão. Vamos revisar parte deste código, observe que há muitos exemplos e tutoriais em vídeo online sobre backtest Python para aprender.

Aqui na definição da classe estabelecemos parâmetros para nossa estratégia de RSI.

  • detalhado: se quisermos gerar dados de log durante o backtest
  • período: período de média móvel, o número de ticks a considerar
  • quantidade: o número de ações para comprar/vender
  • superior: o limite superior do indicador de sobrecompra
  • diminuir: o limite inferior do indicador de sobrevenda
  • parar a perda de: a configuração de stop loss para venda

A Próximo() A função em uma classe de estratégia Backtrader é o que acontece após cada intervalo de 'tick' de dados. Aqui está buy() ou sell() de acordo com os dados, neste caso o indicador RSI e nossos limites.

Aqui definimos o runbacktest() função que será chamada pelo nosso código. A função de estratégia RSI mencionada acima é adicionada ao cérebro instância.

Tudo bastante padrão do Backtrader. Vamos ver como comparar isso com nossos dados.

Backtestando nossos dados

Certifique-se de obter os dados (usando as etapas da última seção) de 1º a 2 de janeiro de 2021. Eles estarão em um arquivo chamado: BTCUSDT-20210101–20210102–1m.csv com 1440 linhas CSV, uma para cada minuto do dia.

Aqui é o código e a saída deste dia de negociação minuto a minuto para Bitcoin (BTC):

Olhando mais de perto:

Os parâmetros são simples, queremos analisar um dia de negociação, utilizando o indicador RSI com período de 12 ticks, sem stop-loss e limites padrão de 70,30 para os gatilhos de sobrecompra e sobrevenda.

Resultados bt de 1º de janeiro com estratégia de indicador RSI padrão

A última linha da saída resume os resultados deste backtest:

/BTCUSDT-20210101-20210102-1m.csv, RSI (Pd 12) (SL 0.0%) (U70 L30) Líquido $ 777.78 (0.78%) WL 18/7 SQN 1.76

Período RSI 12, 0 (Sem) stop-loss, (U) limite superior de 70 (L) limite inferior de 30, lucro líquido (em um dia) de $ 777.78 com 18 negociações vencedoras e 7 negociações perdidas.

A última figura é SQN, um 'Número de Qualidade do Sistema' (SQN) que é projetado para ajudar os traders a determinar os pontos fortes, a conveniência e a qualidade de um sistema de negociação. Uma estratégia de boa qualidade é vista como aquela que é ao mesmo tempo negociável e eficiente.*

Os seguintes valores SQN sugerem as seguintes “qualidades”:

  • 1.6–1.9 Abaixo da média
  • 2.0–2.4 Média
  • 2.5–2.9 Bom
  • 3.0–5.0 Excelente
  • 5.1–6.9 Excelente
  • 7.0 – Santo Graal

A fórmula SQN:

SquareRoot(NumberTrades) * Média(TradesProfit) / StdDev(TradesProfit)

Normalmente insistiríamos em pelo menos 30 negociações para que esta métrica fosse estatisticamente significativa, mas vamos ignorar isso por enquanto, pois estamos testando nosso backtest com um curto período de tempo.

Você pode ampliar seções do gráfico, por exemplo:

Aqui vemos um sinal de compra (seta verde para cima) quando o valor do RSI cai abaixo de 30 e, em seguida, um sinal de venda lucrativo e um marcador de lucro (círculo azul) quando o RSI atinge acima de 70. Veja os valores do RSI no canto inferior direito .

O lucro (em um dia) de US$ 777.78 com 18 negociações vencedoras e 7 negociações perdidas é bastante bom, especialmente para um dia de negociação de ação relativamente superficial (+1.42%). Imagine o que poderíamos alcançar em um dia de alta com alto volume!

Parâmetros de modelo

Você executa get_data para dias diferentes e os analisa separadamente. Observe como os diferentes parâmetros do RSI têm impacto na lucratividade de um dia para o outro.

Caso em questão, no mesmo dia de negociação do BTC, mas com um período de RSI de 20 em vez de 12, ganho-perda de 2/3 e um lucro líquido de -$21.51 (incluindo taxas de negociação). Essa é uma grande diferença em relação ao último backtest!

Você também pode experimentar diferentes limites de RSI (além do padrão 70/30) e parâmetros de stop loss. Stop-loss é uma ordem de venda automática quando o preço cai abaixo de algum nível em relação à ordem de compra executada. Como o nome indica, isto pode servir para “parar uma perda” depois de entrar numa posição em volatilidade.

Stop-Loss

A forma como configuramos o stop loss aqui é a seguinte:

  • 0 : sem configuração de stop-loss, aguarde o indicador acionar uma ordem de venda
  • 0.00x : stop-loss em um valor% abaixo do preço de compra, 0.001 é 0.1% abaixo
  • -0.0x: o stop loss seguirá a negociação conforme o preço sobe, 0.01 é um stop loss 1% abaixo do preço de compra

Este stop-loss é um parâmetro importante para cada negociação e pode ter uma importância significativa, não surpreendentemente, no desempenho. Para mais informações sobre estratégias de stop-loss, consulte SUA PARTICIPAÇÃO FAZ A DIFERENÇA.

Aqui em nosso backtest.py é onde configuramos isso usando backtrader:

Aqui está a mesma execução que acabamos de analisar, mas com um stop loss de 0.1%

Lucro líquido de $ 383.67 com 12 vitórias e 12 derrotas, muito melhor do que a perda que tivemos antes. Você pode ver no gráfico que o stop loss protegeu muitas das negociações de cair em perdas, pois o indicador aguardava um sinal de venda (sobrecompra).

Dentro de um único indicador, nesta configuração, temos muitas permutações possíveis diferentes:

  • um intervalo de período entre 10 e 30 intervalos (20 variantes)
  • uma configuração de stop-loss (vamos imaginar 5 variantes práticas diferentes)
  • um limite para sobrecompra/sobrevenda (vamos imaginar 5 variantes por enquanto)

Isso seria 20x5x5, ou 500 variações diferentes para cada dia. Examiná-los manualmente seria ridículo, mas queremos saber quais parâmetros foram mais lucrativos e de maior qualidade comercial e quais não foram.

Alquimia quântica!

Isso nos leva ao próximo passo nesta exploração do Crypto Quant. Podemos determinar com força bruta os parâmetros de estratégia de negociação mais lucrativos e de mais alta qualidade para um determinado período de negociação e, em seguida, ver como eles são levados adiante.

Source: https://medium.com/@gk_/crypto-quant-programmatic-trading-of-btc-using-binance-and-backtrader-part-2-of-3-d8af44c93e2b?source=rss——-8—————–cryptocurrency

Carimbo de hora:

Mais de Médio