Operar no mercado com o auxílio de robôs e algoritmos é vantajoso na medida em que traz comodidade, capacidade de execução em escala e, principalmente, minimiza a influência da emoção no processo de trading. A estabilidade emocional é um desafio para os investidores que, naturalmente avessos à risco em maior ou menor grau, encontram-se em uma situação em que exista possibilidade de perda.
Ações, câmbio, juros, crypto. Seja qual for, quando operando via robô, as decisões são prescritas por um algoritmo previamente definido e nada mais. Apesar da análise técnica ser dominante nos sistemas automatizados de trading (inclusive nesse exemplo), a elaboração de modelos semelhantes utilizando estratégias fundamentalistas e sentimentalistas também se faz possível. Tudo depende das premissas definidas e da capacidade operacional do modelo.
Nesse passo-a-passo iremos desenvolver um algoritmo que, em linhas gerais, (1) obtém dados históricos de preço, (2) implementa a estratégia de decisão de compra ou venda pré-definida pelo investidor, e (3) executa ordens na corretora.
Requerimentos
Python 3.8.6 instalado incluindo as bibliotecas pandas, numpy, MetaTrader5 e TA-Lib.
MetaTrader5 instalado e sincronizado com a corretora desejada. No meu caso, a corretora utilizada foi a Rico. A opção “Algo Trading” deve ser habilitada.
Para o passo-a-passo detalhado de como instalar todos os componentes requeridos, visitem minha página no GitHub.
Disclaimer
O passo-a-passo abaixo têm por objetivo auxiliar na criação de um robô simples de trading algorítmico e possui fins educacionais apenas. Não constituem recomendação de investimento e devem ser utilizados por conta e risco do usuário.
Dados históricos
O primeiro passo na construção da estratégia de trading é a observação de dados de preço e volume históricos. Conhecidos como dados OHLCV, consistem em preços de abertura, máxima, mínima, fechamento e volume (open, high, low, close, volume) de um determinado ativo. Em se tratando de análise técnica, essas informações são o insumo para a formulação da tomada de decisão de compra ou venda. O script abaixo demonstra a obtenção desses dados em tempo real a partir do MetaTrader5.
Estratégia de decisão
Uma vez arquivados os dados históricos, o próximo passo é produzir sinais de compra ou venda dinamicamente, a cada minuto.
Para fins desse passo-a-passo, a estratégia adotada para a produção dos sinais de compra ou venda será a combinação dos estudos Bandas de Bollinger e o Índice de Força Relativa. Isso significa que o robô só irá comprar (ou vender) se tal decisão for suportada por ambos os estudos. O script abaixo executa a rolagem desses estudos através da biblioteca TA-Lib e, subsequentemente, informa a tomada de decisão aplicável naquele momento tendo em vista a atual situação de mercado (último preço disponível).
Execução das ordens
Uma vez gerados os sinais de compra ou venda, o próximo passo é tomar a decisão efetivamente. Através da integração do MetaTrader5 com o Python, é possível enviar diretamente as ordens geradas pelo script para a plataforma. Por fim, o script abaixo encaminha a decisão de compra ou venda para a plataforma do MetaTrader5.
Combinando tudo
Os códigos acima foram agrupados de forma a facilitar o entendimento e manter o algoritmo explícito em um único arquivo. Além disso, é nessa combinação de arquivos que é adicionado o while loop que fará com que o robô procure por novos sinais na frequência de minuto em minuto. Assim, uma vez compreendido o funcionamento dos códigos acima, recomenda-se a utililização do arquivo abaixo pra rodar o algoritmo.
Conclusão e próximos passos
Parabéns! Seu robô foi criado com sucesso.
É importante ressaltar, contudo, que essa é uma versão simplificada do que pode se tornar um sistema de trading que atenda minimamente as necessidades de um investidor, portanto é recomendável que seja implementada em ambiente de testes apenas. Os conceitos de compra e venda abordados baseiam-se em movimentos passados de preço exclusivamente e não contemplam outras variáveis e eventos de relevância para os mercados no processo de formação de preços.
Em um próximo passo, sugere-se a implementação de stop loss e take profit no momento de compra de determinado ativo. A inclusão dessas ordens é uma funcionalidade oferecida pelo Metatrader5 e seus objetivos são limitar as perdas e encerrar os ganhos, respectivamente.
Caso o usuário opte por incluir múltiplos ativos no escopo do robô, passa a ser interessante o monitoramento consolidado dos retornos. Métricas adotadas pelo mercado como o Índice de Sharpe e o Máximo Drawdown podem ser bastante úteis para a avaliação da performance da carteira ao longo do tempo.
Te convido agora para me enviar sugestões complementares para que eu possa abordar em um próximo passo-a-passo. Nos vemos na próxima!