Build a Day-Trading Algorithm and Run it in the Cloud Using Only Free Services

P>Primeiro a desligar, vá em frente e obtenha o script do GitHub com este comando:

git clone https://github.com/alpacahq/Momentum-Trading-Example.git

Agora, você pode abri-lo no seu editor de texto favorito e segui-lo. Note que perto do topo do arquivo, há espaços reservados para suas informações de API – seu ID de chave, sua chave secreta e a URL com a qual você quer se conectar. Você pode obter todas essas informações no painel do Alpaca.

>

Sua chave secreta vai embora depois de mostrá-la, então salve-a em algum lugar seguro. Se você perdê-la, porém, você sempre pode regenerar sua chave API para obter um novo segredo.

Substitua as strings de espaço reservado com suas próprias informações, e o script está pronto para rodar. Mas antes de deixá-lo tocar até mesmo o dinheiro da sua conta simulada (inteiramente de faz-de-conta), vamos rever o que ele faz. (Se você está mais interessado em como fazê-lo rodar no GCP do que no que ele está fazendo, pule para a próxima seção.)

Broadly, este é um algoritmo baseado em momentum. Não iremos negociar durante os primeiros quinze minutos após a abertura do mercado, porque estes são sempre bastante agitados. Entre o décimo quinto minuto e a primeira hora, porém, vamos procurar ações que tenham aumentado pelo menos 4% em relação ao fechamento do dia anterior. Se eles fizeram isso e cumprem alguns outros critérios, vamos comprá-los, e vamos mantê-los até que eles subam o suficiente (cumprindo nossa meta de preço) ou caiam muito baixo (cumprindo nosso nível ‘stop’.)

Você vai notar que abaixo da informação de conexão no código, há algumas variáveis adicionais que podem ser configuradas. Estas podem ser ajustadas facilmente para melhor se adequarem às suas necessidades para o algoritmo. Existem milhares de ações disponíveis para negociação, mas nem todas são adequadas para uma estratégia como esta.

Filtramos a lista procurando por algumas coisas – queremos um preço relativamente baixo da ação, mas não um que seja tão baixo que se comporte mais como um centavo de ação. Também queremos ter a certeza de que as acções são suficientemente líquidas para que possamos ter as nossas encomendas preenchidas. Nós certificamo-nos que o volume em dólares da acção era pelo menos min_last_dv no dia de negociação anterior.

The default_stop e risk os parâmetros são importantes para nos certificarmos que o nosso algoritmo se mantém dentro de limites aceitáveis. O risco é o percentual do nosso portfólio que vamos alocar para qualquer posição. Como nós vendemos quando atingimos o stop loss, a quantidade de dinheiro do nosso portfólio em risco numa negociação é default_stop * risk * account_balance .

Não vou rever como obtemos nossos dados de inicialização aqui – se você quiser, você pode dar uma olhada no código e verificar a documentação do Polygon sobre seus dados ‘ticker’. O que é um pouco mais interessante é o fato de que também podemos transmitir dados em tempo real a partir do Polygon. (Isto também é feito num exemplo recentemente publicado “HFT-ish”, outro algoritmo de negociação do dia Alpaca que negocia muito mais frequentemente do que este e tenta lucrar com os pequenos desequilíbrios do livro de ordens.)

The Polygon.io logo.

usando o SDK Python da Alpaca, nós conectamos a três tipos de canais de streaming. O primeiro é trade_updates, que é simplesmente uma conexão com Alpaca, na qual podemos ouvir atualizações em nossas ordens conforme elas acontecem. Vamos usar isto para ter a certeza que não estamos a submeter múltiplas encomendas abertas de uma só vez para um stock e para ver se as nossas encomendas são ou não preenchidas.

Os outros dois canais são A.<symbol> e AM.<symbol> . Para cada acção que vamos ver, subscrevemos esses canais para receber actualizações do Polygon sobre o preço e o volume da acção. O canal é actualizado a cada segundo, enquanto o canal AM é actualizado a cada minuto. Nós agregamos as informações do canal nós mesmos para que possamos fazer cálculos até o segundo, mas consideramos AM como sendo a fonte da verdade, substituindo o que quer que tenhamos agregado com o que vem através desse canal. Embora possamos escapar apenas observando e confiando na nossa própria agregação, confiando em AM dá-nos um pouco mais de resistência aos soluços na conexão e tal.

Após termos adicionado os dados de entrada ao nosso agregado, se ainda não encomendámos acções de uma acção, verificamos se parece uma boa compra. Definimos uma “boa compra” como algo com um MACD positivo e crescente que tem sido negociado com um volume decente e está acima de 4% do fechamento de ontem até hoje. Nós também queremos ter certeza de que ele manteve seu impulso após a abertura, por isso procuramos ver que o preço é maior do que o seu ponto mais alto durante os primeiros quinze minutos após a abertura do mercado. Esperamos que estas acções continuem a subir de valor à medida que o dia continua.

Se tivermos uma posição numa acção, também verificamos com cada barra que entra para essa acção se está na altura de vender. Nós vendemos quando a ação atingiu nosso preço alvo ou nosso stop loss, ou se o MACD sugere que o título está perdendo seu momento e caiu de volta para nossa base de custo. Idealmente, ações suficientes atingem o preço alvo que estabelecemos para que possamos recuperar as perdas daqueles que atingiram o stop loss, com alguns lucros extras no topo.

No final do dia de negociação, liquidamos quaisquer posições remanescentes que abrimos ao preço de mercado. O uso de ordens de mercado geralmente não é o ideal, mas elas são usadas neste caso porque o custo potencial de se manter durante a noite é maior do que o que estávamos dispostos a arriscar na posição. Idealmente, já liquidamos nossas ações com base em nossas stop losses e preços alvo definidos, mas isso nos permite pegar qualquer coisa que se esgueire por aqueles negociando flat.

Se você rolar para baixo passando pelo fundo do método long run(), você verá como verificamos para ver quando o mercado estará abrindo e fechando usando o endpoint do Alpaca Calendar API. Usando isto significa que, se você quiser, você pode configurar um trabalho Cron para executar o script ao mesmo tempo todos os dias sem ter que se preocupar com férias no mercado ou aberturas tardias causando problemas. Muitas pessoas preferem rodar seus scripts manualmente, mas é bom ter a opção de simplesmente deixá-lo rodar sozinho.