Usar Python acelera o processo de negociação e, portanto, também é chamado de negociação automatizada / negociação quantitativa. O uso de Python é creditado a suas bibliotecas altamente funcionais como TA-Lib, Zipline, Scipy, Pyplot, Matplotlib, NumPy, Pandas etc. Explorar os dados disponíveis é chamado de análise de dados. Começando com Python. Aprenderemos primeiro a extrair dados usando a API Quandl.  

Why-Python-Is-Used-For-Developing-Automated-Trading-Strategy1

Usar dados anteriores será nossa chave para a estratégia de backtesting. Como uma estratégia funciona em uma determinada circunstância só pode ser entendido usando dados históricos. Usamos dados históricos porque as tendências do mercado de ações tendem a se repetir ao longo do tempo.

Configurando o ambiente de trabalho

A maneira mais fácil de começar é instalando o Anaconda. Anaconda é uma distribuição de Python e oferece diferentes IDEs como Spyder, Jupyter, __, ___ etc.

Instalando Quandl

Quandl nos ajudará a recuperar os dados históricos do estoque. Para instalar o quandl, digite o comando abaixo no terminal - 



pip instalar quandl

Nota: O módulo Quandl Python é gratuito, mas você deve ter uma chave API Quandl para baixar os dados. Para obter sua própria chave de API, você precisará criar uma conta Quandl gratuita e definir sua chave de API.

Importando pacotes

Depois de instalar o Quandl, a próxima etapa é importar os pacotes. Estaremos usando o Pandas rigorosamente neste tutorial, pois o backtesting requer muita manipulação de dados.

importar pandas como pd
importar quandl como qd

Depois que os pacotes forem importados, extrairemos os dados do Quandl, usando a chave API.

qd.ApiConfig.api_key = "<chave API>”

Extração de dados usando Quandl

import pandas as pd 
import quandl as qd 
  
qd.ApiConfig.api_key = "API KEY"
  
msft_data = qd.get("EOD/MSFT", 
                   start_date="2010-01-01", 
                   end_date="2020-01-01") 
msft_data.head()

Resultado:

O código acima irá extrair os dados das ações da MSFT de 1º de janeiro de 2010 a 1º de janeiro de 2020. data.head() exibirá as primeiras 5 linhas dos dados.

Terminologia importante: deve-se entender o que os dados representam e representam.



  • Abrir / Fechar - O preço de abertura e fechamento da ação.
  • Alta / Baixa - O preço mais alto e o mais baixo que a ação atingiu durante um determinado dia.
  • Adj_High / Adj_Close - O impacto da distribuição atual de dividendos, desdobramentos de ações ou outra ação corporativa sobre os dados históricos.

Calculando Retornos

O retorno é simplesmente o lucro obtido ou as perdas incorridas pela ação depois que o negociante / investidor usou posições longas ou curtas. Simplesmente usamos a função pct_change()

import numpy as np 
  
  
close_price = msft_data[['Adj_Close']] 
daily_return = close_price.pct_change() 
daily_return.fillna(0, inplace=True) 
  
print(daily_return)

Resultado:

            Adj_Close
Encontro
03/09/2013 0,000000
04/09/2013 -0.021487
05/09/2013 0,001282
06/09/2013 -0.002657
09/09/2013 0,016147
... ...
21-12-2017 -0.000234
22-12-2017 0,000117
26-12-2017 -0,001286
27-12-2017 0,003630
28-12-2017 0,000117
[1090 linhas x 1 colunas]

Fórmula usada no retorno diário = (Preço em 't' - Preço em 1) / Preço em 1 (Preço em qualquer momento 't' - preço de abertura) / preço de abertura

Médias Móveis

O conceito de médias móveis estabelecerá a base de nossa estratégia comercial baseada no momentum. Para finanças, os analistas também precisam testar constantemente as medidas estatísticas ao longo de um período variável, denominado cálculos de período móvel. Vamos ver como a média móvel pode ser calculada em uma janela de 50 dias e deslizar a janela em 1 dia.

adj_price = msft_data['Adj_Close'] 
mav = adj_price.rolling(window=50).mean() 
print(mav[-10:])
Encontro
14-12-2017 78.769754
15-12-2017 78,987478
18/12/2017 79.195540
19-12-2017 79.387391
20-12-2017 79.573250
21-12-2017 79.756221
22-12-2017 79.925922
26-12-2017 80.086379
27-12-2017 80.249752
28-12-2017 80.414472
Nome: Adj_Close, dtype: float64

As médias móveis ajudam a eliminar quaisquer anomalias ou picos de dados e fornecem uma curva mais uniforme para os resultados da empresa.

Plote e veja a diferença:

import matplotlib.pyplot as plt 
  
adj_price.plot()

Resultado:



Observe a diferença:

mav.plot()

Resultado:

Traçando-os juntos:

import matplotlib.pyplot as plt 
  
adj_price.plot() 
mav.plot()

Resultado: