Ganhando Dinheiro com Bitcoin e Python (II) — Backtrader

Montar um sistema para guiar seus investimentos e testar estratégias pode ser uma excelente abordagem antes de sair comprando cripto no mercado

Arthur Oliveira
3 min readOct 15, 2021

Artigo também publicado aqui.

Esse é o segundo post de uma série que pretende desenvolver um sistema de trading para Bitcoin usando Python. O artigo 1 (análise de dados) pode ser acessado aqui.

Assim, o objetivo do presente artigo é apresentar a ferramenta que será responsável por nossos testes de simulação de investimento de Bitcoin no mercado cripto, o Backtrader.

Existem muitas justificativas para usar uma ferramenta pronta para tal. Poderíamos desenvolver nossas próprias funções de negociação para simular o mercado. Mas as grande vantagens de utilizar o Backtrader são: (1) não precisar ficar reinventando a roda; (2) velocidade de desenvolvimento; (3) existência de documentação e uma comunidade ativa testando a ferramenta; e, a mais importante, (4) não precisar se preocupar com detalhes da negociação de mercado que poderiam trazer alguma diferença ao resultado final da nossa simulação.

Portanto, vamos lá!

Backtrader

A biblioteca Backtrader, conforme abordado, nos permite desenvolver a negociação no mercado financeiro com todos os detalhes de infraestrutura já implementados, nos dando a liberdade de focar apenas na estratégia de investimento, nos indicadores e analisadores de mercado.

Nesse post, não irei fazer um passo-a-passo da biblioteca, algo que é possível encontrar em detalhes aqui. Aqui, irei apenas comentar um código que implementei para fazer a estratégia de Buy & Hold (isto é, comprar e manter posse da moeda) do Bitcoin e analisar quanto ganharíamos no período considerado. Em posts subsequentes iremos aprofundar em mais detalhes do código naturalmente.

Primeiramente, devemos instalar a biblioteca com o pip.

pip install backtrader

Agora, vamos ao código.

import backtrader as btclass BuyAndHold(bt.Strategy):params = (('printlog', False))def start(self):
self.val_start = self.broker.get_cash() # keep the starting cash
def nextstart(self):
# Buy all the available cash
size = int(self.broker.get_cash() / self.data
self.buy(size=size)
def stop(self):
print('Ending Value',self.broker.get_value())
self.roi = (self.broker.get_value() / self.val_start) - 1.0
print('ROI: {:.2f}%'.format(100.0 * self.roi))
cerebro = bt.Cerebro()
cerebro.addstrategy(BuyAndHold)
data = bt.feeds.PandasData(dataname=data)
cerebro.adddata(data)
cerebro.broker.setcash(1000.0)
cerebro.broker.setcommission(commission=0.00) # Set the commission
strategies = cerebro.run() # Run over everything

No código anterior, note que inicialmente há a definição da estratégia de investimento em uma classe separada (Buy & Hold). Primeiramente, capturamos todo o dinheiro oferecido para a classe e fazemos a compra de todos os BTCs que cabem dentro desse valor (métodos start e nextstart) e o armazenamos durante todo o período considerado. Ao final do período (método stop), o valor final é exibido juntamente com a porcentagem de retorno de investimento (ROI).

Fora da classe, fazemos o usual: iniciamos o broker (chamado de cerebro), passamos a ele a estratégia e os dados sobre os quais a estratégia irá executar. Além disso, também passamos $1000, que será o valor a ser simulado no processo e ainda podemos definir a comissão, que no caso determinamos como zero. Por fim, rodamos o broker com o método run e vemos a saída a seguir.

Ending Value 118689.74 
ROI: 11768.97%

Nossos dados abrangem o período de 24–04–2016 a 15–10–2021. Portanto, se no primeiro dia tivéssemos feito a compra do valor de $1000 em BTC, teríamos ao final desse processo um valor de $118689.74, uma valorização de incríveis 11768.97%!

Para que todo esse código funcione, naturalmente é necessário carregar os dados de um arquivo .CSV para o formato DataFrame (no código, é realizado pela variável data). Todo esse processo, você viu em nosso artigo anterior e, portanto, não será repetido aqui.

Concluindo

Neste artigo, apresentamos como funciona a biblioteca mais importante dessa série, o Backtrader, que nos permitirá desenvolver nossas estratégias de investimento e apenas utilizá-la para simulação e testes.

Nos próximos artigos iremos nos aprofundar em estratégias de investimentos e indicadores técnicos.

Um abraço!

--

--

Arthur Oliveira

Professor da área de computação. Doutor pela UNICAMP. Graduado em Ciências da Computação e mestre pela USP.