Um robô de investimento (ou Expert Advisor) é uma ferramenta que realiza negociações de ativos financeiros de forma automática, baseado numa estratégia/algoritmo programado, a técnica é chamada de algorithmic trading. Robôs apenas executam aquilo que foram programados para executar.
Tipos de Robôs
LFT (Low Frequency Taders) – Maior Latência
HFT (Hight Frequency Taders ) – Milissegundos
O LFT é o mais comum e acessível para pessoas físicas operarem, visto que o HFT exige uma infra-estrutura maior os tornando mais caros, geralmente usados por grandes empresas que atuam no mercado financeiro.
Linguagem e plataforma
A linguagem de programação utilizada para fazer robôs abordada nesse artigo é o MQL 5, uma linguagem próxima a Java, C# e C++, e a plataforma que executa nossos robôs é o MetaTrader 5.
O MetaTrader é uma plataforma de visualização de preços e negociação de ativos financeiros em bolsas de valores do mundo inteiro, inclusive podemos operar ela de forma manual, executando nossas ordens de compra e venda, mas também ela nos da a possibilidade de criarmos nossos robôs e deixa-los executando de forma automática no mercado.
Desenvolvido pela empresa MetaQuotes, uma empresa Russa, é distribuído de forma gratuita para nós Traders. Em 2005 surge a primeira versão já chamada de MetaTrader 4, e em 2010 a atualização para MetaTrader 5 que é uma versão mais madura da ferramenta utilizada até os dias atuais.
É preciso fazer o roteamento com uma corretora para que possamos ter acesso aos ativos financeiros que estão na bolsa, aqui no Brasil a maioria das corretoras já se integram com o MetaTrader de forma gratuita.
É possível criar contas Demo e testar o MetaTrader com dinheiro fictício, para estudar a própria ferramenta como para estudar o mercado financeiro.
O site do MetaTrader 5 é: https://www.metatrader5.com/pt
Existe uma vasta documentação, também em português, e um fórum de ajuda no site do MetaTrader.
Plataforma de Desenvolvimento
O MetaEditor é a IDE que é instalada em conjunto com o MetaTrader, e é nele que iremos escrever nossos códigos e estratégias para o robô.
Para criar um novo arquivo:
Menu Arquivo > Novo Arquivo (ou CTRL + N)
Escolhemos dentre as opções que aparecem, Expert Advisor (modelo).
Informar um nome para seu Robô.
É criado a estrutura básica do arquivo para iniciarmos o nosso robô, com pelo menos os 3 métodos obrigatórios que temos que ter: OnInit(), OnDeinit() e OnTick().
Nossos arquivos podem ter a extensão .ex5 que é o arquivo compilado, ou seja a caixa preta, e/ou a extensão .mq5 que é o aquivo que criamos e editamos nossas estratégias programadas para o robô executar.
Estrutura básica do Arquivo (Funções)
OnInit():
- É a primeira função chamada no carregamento do robô ao gráfico.
- É onde fazemos o carregamento dos indicadores, validação de conta de acesso com a corretora.
- Configurações primárias, que bastam ser definidas uma única vez.
OnDeinit():
- É executado ao remover o robô, as ações que devem ser executadas ao desligar o robô devem estar nessa função.
OnTick():
- Toda vez que houver uma operação de compra ou venda, essa função é chamada.
- Nessa função que iremos colocar a maior parte da nossa estratégia.
Função Extra
OnTimer():
- É um temporizador, mas ele precisa de uma função auxiliar chamada EventSetTimer() que pode ficarno OnInit() por exemplo, e ser chamada de 10 em 10 segundos por exemplo, esse valor é configurável.
- Então, a cada tantos segundos o EventSetTimer() chama a função OnTimer();
- O EventKillTimer() mata essa execução do temporizador.
Dicas:
Coloque o curso em cima de qualquer método ou função e pressione F1 para ver a documentação do mesmo.
// representa o comentário.
/* */ representa comentário de várias linhas.
CTRL + ; – Gera um separador dessa forma – //—
CRTL + . – Gera um bloco de separação como abaixo:
CTRL + ~ – Comentário de um trecho de código selecionado.
CTRL + ç – Descomenta o passo anterior.
//+——————————————————————+
//| |
//+——————————————————————+
Includes de Bibliotecas de Terceiros:
As bibliotecas de terceiros devem estar na pasta include.
É praticamente um import em outras linguagens.
Colocar no topo do seu código antes da primeira função.
Exemplos:
#include <nome-da-biblioteca>
#include <VirtualKeys.mqh>
#include <Canvas/FlameCanvas.mqh>
Sintaxe da Linguagem
Tipos de Variáveis:
- int, char, short, uchar, ushort, uint (u apenas para valores positivos)
- float, double
- string
- bool (false is default)
- datetime
Declaração das variáveis:
- tipo nome_var = atribuição
- int ano = 2019;
- int var2;
- ushort var3 = 100;
- double preco = 41.55;
- float preco2 = 5.61;
- string alerta = “alerta de alvo”;
- bool resultado = x > y;
- datetime hoje;
- datetime data = D’2019.01.20 10:00:00′;
- datetime data2 = D’2019.01.20 10′;
- datetime data3 = D’2019.01.20′;
Declaração de Constante:
- #define PI 3.14.15
- #define NOME_EMPRESA “Nome da empresa”
- não precisa do ; no final nem do sinal de atribuição =
Vetores/Arrays:
- int array1[3]; (Array de 3 posições de tamanho, de 0 a 2).
- array1[0] = 44; (posição 1)
- array1[1] = 95; (posição 2)
- array1[2] = 78; (posição 3)
- double array2[3] = {5.2, 4.6, 2.8};
Laços de Repetição (For)
- Dica: Escreva for e tecle TAB que ele já monta a estrutura do for.
for(int i=0; i<10; i++) { }
Enum
- Dica: Escreva enum e tecle TAB que ele monta a estrutura.
enum name { };
enum ESTACOES_ANO {
primavera, //0
verao, //1
outono, //2
inverno, //3
}
ESTACOES_ANO estacao;
estacao = verao; (estacao = 1)
Definindo os valores:
enum ESTACOES_ANO {
primavera = 44,
verao = 75,
outono = 66,
inverno = 25,
}
Variáveis do Tipo Input
- Parâmetros que o usuário pode colocar.
- Colocar no topo junto com as variáveis globais.
- As frases nos comentários é como vão aparecer na aba parâmetros, caso queiramos customizar, ao invés de aparecer o nome exato da variável input.
input int numPeriodos = 11; // Nº de Períodos
input string comentario = ” “; // Comentários
Declaração de Funções
- Sem retorno (void).
void minhaFuncao(double a, double b) {
double soma = a + b;
Print(“Soma = “, soma);
}
- Com retorno.
double minhaFuncao2(double n, double m) {
double div = n / m;
return div;
}
Variáveis Locais e Globais
- variáveis dentro de funções tem escopo local.
- variáveis globais devem estar no topo do arquivo/classe, fora de qualquer método/função para estar acessível em qualquer parte do código.
Variáveis pré-definidas pelo MQL5
_Symbol = Nome do ativo financeiro. Ex: PETR4
_Period = Período na escala gráfica. EX: M1, M5, M15.
_Point = Pontos que oscilam no gráfico. Ex: 0.01
_Digits = Numero de dígitos de casas decimais do ativo atual. Ex.: 2
Operações Matemáticas e Relações lógicas
Atalhos interessantes:
CTRL + G: Retira a Grade.
Parabéns pelo post Haylson, está muito interessante, sucesso!
Valeu meu amigo! Que bom que gostou.