Você está na página 1de 6

7/24/2020 Step-by-Step to Build a Stock Trading Bot

Alpaca Top Documentos da API INSCREVA-SE ->

 Digite suas palavras-chave ...

Casa / / Noções básicas de negociação algorítmica / / Passo a passo para criar um bot de negociação de ações    

Passo a passo para criar um bot de negociação de ações


Aqui está um código de exemplo para a estratégia simples de cruzamento de média
móvel a ser usada neste artigo.

snippet de código de negociação comercial

snippet de código de negociação comercial. GitHub Gist:


compartilhe instantaneamente código, notas e trechos.

262588213843476 • Essência

Desenvolvimento da Estratégia Visual


A criação da estratégia visual é uma parte importante do desenvolvimento rápido e eficiente, pois permite
depurar e ajustar idéias facilmente, observando como os sinais se desenvolvem e mudam com as mudanças
no mercado.

Considero o Python uma boa linguagem para esse tipo de ciência de dados, pois a sintaxe é fácil de entender
e há uma grande variedade de ferramentas e bibliotecas para ajudá-lo no seu desenvolvimento. Além disso, a
API do Alpaca Python nos fornece uma maneira fácil de integrar dados de mercado sem a necessidade de
implementar um novo wrapper de API.

alpacahq / alpaca-trade-api-python

Cliente Python para API comercial da Alpaca. Contribua para o


desenvolvimento alpacahq / alpaca-trade-api-python criando…

alpacahq • GitHub

Para processamento e plotagem de dados, recomendo o uso do TA-Lib e Matplotlib . O Ta-Lib fornece uma
boa biblioteca para calcular indicadores comuns de mercado, para que você não precise reimplementá-los;
enquanto o matplotlib é uma ferramenta de plotagem simples, porém poderosa, que o servirá bem para
todos os tipos de visualização de dados.

script visualizador

script visualizador. GitHub Gist: compartilhe instantaneamente


código, notas e trechos.

262588213843476 • Essência

https://alpaca.markets/learn/stock-trading-bot-instruction/ 1/6
7/24/2020 Step-by-Step to Build a Stock Trading Bot

O script adiciona uma estratégia cruzada de média móvel simples contra alguns símbolos de negociação
Alpaca Top Documentos da API INSCREVA-SE ->
diferentes para fornecer uma pequena amostra de como isso pode ser justo nas negociações ao vivo. Isso
permite uma primeira verificação de sanidade para os sinais de uma nova estratégia. Depois que uma
estratégia passa na inspeção visual, você pode executá-la através de uma ferramenta de backtesting .

Você pode até adicionar marcadores visuais a cada negociação simulada e, para uma estratégia avançada de
movimentação, os indicadores dos quais o sinal foi derivado. Isso pode facilitar ainda mais a análise dos
pontos fracos de um conjunto de sinais, para que você possa ajustar seus parâmetros.

https://alpaca.markets/learn/stock-trading-bot-instruction/ 2/6
7/24/2020 Step-by-Step to Build a Stock Trading Bot

import matplotlib.pyplot as plt Alpaca Top Documentos da API INSCREVA-SE ->


from datetime import datetime
import numpy as np
import talib
import alpaca_trade_api as tradeapi

api = tradeapi.REST(key_id=<your key id>,secret_key=<your secret key>)

barTimeframe = "1H" # 1Min, 5Min, 15Min, 1H, 1D


assetsToDownload = ["SPY","MSFT","AAPL","NFLX"]
startDate = "2017-01-01T00:00:00.000Z" # Start date for the market data in ISO8601 format

# Tracks position in list of symbols to download


iteratorPos = 0
assetListLen = len(assetsToDownload)

while iteratorPos < assetListLen:


symbol = assetsToDownload[iteratorPos]

returned_data = api.get_bars(symbol,barTimeframe,start_dt=startDate).bars

timeList = []
openList = []
highList = []
lowList = []
closeList = []
volumeList = []

# Reads, formats and stores the new bars


for bar in returned_data:
timeList.append(datetime.strptime(bar.time,'%Y-%m-%dT%H:%M:%SZ'))
openList.append(bar.open)
highList.append(bar.high)
lowList.append(bar.low)
closeList.append(bar.close)
volumeList.append(bar.volume)

# Processes all data into numpy arrays for use by talib


timeList = np.array(timeList)
openList = np.array(openList,dtype=np.float64)
highList = np.array(highList,dtype=np.float64)
lowList = np.array(lowList,dtype=np.float64)
closeList = np.array(closeList,dtype=np.float64)
volumeList = np.array(volumeList,dtype=np.float64)

# Calculated trading indicators


SMA20 = talib.SMA(closeList,20)
SMA50 = talib.SMA(closeList,50)

# Defines the plot for each trading symbol


f, ax = plt.subplots()
f.suptitle(symbol)

# Plots market data and indicators


ax.plot(timeList,closeList,label=symbol,color="black")
ax.plot(timeList,SMA20,label="SMA20",color="green")
ax.plot(timeList,SMA50,label="SMA50",color="red")

# Fills the green region if SMA20 > SMA50 and red if SMA20 < SMA50
ax.fill_between(timeList, SMA50, SMA20, where=SMA20 >= SMA50, facecolor='green', alpha=0.5, interpolate=
ax.fill_between(timeList, SMA50, SMA20, where=SMA20 <= SMA50, facecolor='red', alpha=0.5, interpolate=Tr

# Adds the legend to the right of the chart


ax.legend(loc='center left', bbox_to_anchor=(1.0,0.5))

iteratorPos += 1

plt.show()

https://alpaca.markets/learn/stock-trading-bot-instruction/ 3/6
7/24/2020 Step-by-Step to Build a Stock Trading Bot

Bot Simples de Negociação Alpaca Top Documentos da API INSCREVA-SE ->

Depois de passar do estágio de backtesting, você precisará de uma estrutura de negociação simples para
integrar suas estratégias para testes ao vivo. Isso pode ser executado em uma conta de negociação em papel
para testar os sinais em um feed de dados ativo.

Este é um passo importante no desenvolvimento, pois testa se a estratégia foi super ajustada ao seu conjunto
de dados. Por exemplo, uma estratégia poderia ser facilmente ajustada para negociar perfeitamente um
símbolo específico durante um período de backtesting. No entanto, é improvável que isso generalize bem
para outros mercados ou períodos diferentes - levando a sinais e perdas ineficazes.

Como tal, você desejará uma maneira simples de testar suas estratégias em um ambiente de preparação,
antes de investir algum dinheiro com uma conta de negociação real. Isso serve para testar a estratégia e a
implementação, pois um pequeno bug no seu código pode ser suficiente para acabar com uma conta, se não
estiver marcada.

Aqui está outro exemplo de snippet de um bot de negociação que implementa a estratégia cruzada de média
móvel (script completo no final desta seção).

(TRECHO DE CÓDIGO DE UM BOT DE NEGOCIAÇÃO QUE IMPLEMENTA A ESTRATÉGIA CRUZADA DE MÉDIA MÓVEL -

SCRIPT COMPLETO NO FINAL DESTA SEÇÃO)

Para transformar isso em um bot de negociação completo, você pode optar por adicionar um loop
temporizado ao próprio código ou fazer com que todo o script seja executado em uma programação
periódica. A última é geralmente uma escolha melhor, pois uma exceção que causa um acidente inesperado
interromperia completamente o bot de negociação se fosse um loop independente. Onde como, uma tarefa
agendada não apresentaria esse problema, pois cada etapa da pesquisa é uma instância separada do script.

Além disso, você provavelmente desejará implementar um sistema de registro, para poder monitorar
facilmente o bot e identificar quaisquer bugs enquanto ele é executado. Isso pode ser conseguido
adicionando uma função para gravar um arquivo de texto com qualquer informação relevante no final de
cada processo.

Depois de ter uma estratégia de trabalho, a API da Alpaca deve facilitar a expansão do seu bot de negociação
em um sistema de produção completo, permitindo que você comece a negociar rapidamente.

https://alpaca.markets/learn/stock-trading-bot-instruction/ 4/6
7/24/2020 Step-by-Step to Build a Stock Trading Bot

from datetime import datetime Alpaca Top Documentos da API INSCREVA-SE ->
import numpy as np
import talib
import alpaca_trade_api as tradeapi

api = tradeapi.REST(key_id=<your key id>,secret_key=<your secret key>)

barTimeframe = "1H" # 1Min, 5Min, 15Min, 1H, 1D


assetsToTrade = ["SPY","MSFT","AAPL","NFLX"]
positionSizing = 0.25

# Tracks position in list of symbols to download


iteratorPos = 0
assetListLen = len(assetsToTrade)

while iteratorPos < assetListLen:


symbol = assetsToTrade[iteratorPos]

returned_data = api.get_bars(symbol,barTimeframe,limit=100).bars

timeList = []
openList = []
highList = []
lowList = []
closeList = []
volumeList = []

# Reads, formats and stores the new bars


for bar in returned_data:
timeList.append(datetime.strptime(bar.time,'%Y-%m-%dT%H:%M:%SZ'))
openList.append(bar.open)
highList.append(bar.high)
lowList.append(bar.low)
closeList.append(bar.close)
volumeList.append(bar.volume)

# Processes all data into numpy arrays for use by talib


timeList = np.array(timeList)
openList = np.array(openList,dtype=np.float64)
highList = np.array(highList,dtype=np.float64)
lowList = np.array(lowList,dtype=np.float64)
closeList = np.array(closeList,dtype=np.float64)
volumeList = np.array(volumeList,dtype=np.float64)

# Calculated trading indicators


SMA20 = talib.SMA(closeList,20)[-1]
SMA50 = talib.SMA(closeList,50)[-1]

# Calculates the trading signals


if SMA20 > SMA50:
openPosition = api.get_position(symbol)

# Opens new position if one does not exist


if openPosition == 0:
cashBalance = api.get_account().cash

targetPositionSize = cashBalance / (price / positionSizing) # Calculates required position size

returned = api.submit_order(symbol,targetPositionSize,"buy","market","gtc") # Market order to op


print(returned)

else:
# Closes position if SMA20 is below SMA50
openPosition = api.get_position(symbol)

returned = api.submit_order(symbol,openPosition,"sell","market","gtc") # Market order to fully close


print(returned)

iteratorPos += 1

https://alpaca.markets/learn/stock-trading-bot-instruction/ 5/6
7/24/2020 Step-by-Step to Build a Stock Trading Bot

Alpaca Top Documentos da API INSCREVA-SE ->


Por Matthew Tweed

Atualizada há 4 meses

Artigos relacionados
Algo de escalpelamento simultâneo usando Python assíncrono

Martingale Day-Trading com a Alpaca Trading API

Negociação algorítmica longa-curta em JavaScript (Node.js) usando a API de ações

Um Script Simples de Negociação de Ações com Reversão Média em C #

Python e AWS para executar um algoritmo de negociação simples

Desenvolvedores Sobre nós Documentos


Documentos da API Companhia termos e Condições
Slack Boletim de Notícias Divulgações importantes
Fórum Blog Plano de continuidade de negocios
Recursos Contato Noti cação de privacidade
GitHub Carreiras Contrato com o Cliente
Status da API

© 2020 Alp aca S ec ur iti es LLC To dos o s d ire i tos res e r vado s.
© 2020 Alp acaDB, Inc. Todos os direitos res e r va dos .

O s ser viços de c orreta gem são fo r necido s pe l a Al p aca S e cu ri ti e s LLC ("Al p aca") , m em bro d a F IN RA / SI PC , s ubsidiá ria i ntegra l da Alpa caDB, I nc. A t ec nol ogia e os ser viço s
sã o oferec i do s p ela Alpaca DB, In c.

E sta nã o é uma o fer ta , solicit açã o de o fer t a, ou conse l h os p ara comp rar o u ve nd e r va lore s mob i l i á ri os ou a bri r uma co nta de corretagem em qua lquer juris di ção em que a
A lpac a não est eja regist rada (a Alp ac a est á reg i st rad a ap e nas nos Es ta dos Uni d os) .

!    Exib ir divulgaç ões impo r tan tes

https://alpaca.markets/learn/stock-trading-bot-instruction/ 6/6

Você também pode gostar