Negociação automatizada usando Python
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.
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
)
(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()
(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:
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva