Quase todos os negociadores chegam ao mercado para fazer dinheiro, mas alguns também apreciam o processo em si. No entanto, não é apenas a negociação manual que pode lhe proporcionar uma experiência emocionante. O desenvolvimento de sistemas automatizados de negociação também pode ser bastante impressionante. Criar uma negociação automática pode ser tão interessante quanto ler um bom romance de mistério.
Ao desenvolver um algoritmo de negociação, temos que lidar com muitas questões técnicas, incluindo as mais importantes:
Precisamos responder a primeira questão para escolher o símbolo mais adequado. A escolha pode ser afetada por vários fatores, incluindo a capacidade de automatizar nosso sistema de negociação para o mercado. A segunda questão envolve a elaboração das regras de negociação, indicando claramente a direção dos negócios, bem como a entrada e saída de pontos. A terceira questão parece ser relativamente simples: como comprar e vender usando alguma linguagem de programação definida?
Neste artigo, vamos considerar como implementar operações de comércio em negociação algorítmica utilizando a linguagem MQL5.
MQL5 é uma linguagem de programação de estratégias de negociação com muitas funções comerciais para trabalhar com encomendas, posições e solicitações comerciais. Assim, fazer algorítimos de negociação automática em MQL5 é a tarefa que menos consome trabalho para um desenvolvedor.
Os recursos da MQL5 permitem que você faça um pedido de negociação e o envie para um servidor usando as funções OrderSend() ou OrderSendAsync(), receba seu resultado de processamento, visualize o histórico de negociação, examine a especificação do contrato para um símbolo, lide com um evento de negociação bem como receba outros dados necessários.
Além disso, MQL5 pode ser usada para escrever indicadores técnicos personalizados e aplicar os já implementados, desenhando quaisquer marcas e objetos em um gráfico, desenvolvendo a interface de usuário personalizada, etc. Exemplos de implementação podem ser vistos em vários artigos.
Existem vários tipos básicos de operações de negócio que podem ser necessárias para a sua negociação automática:
Todas essas operações são realizadas utilizando a função OrderSend(). Há também uma versão assíncrona chamada OrderSendAsync(). Toda a variedade de operações de negócio é representada pela estrutura MqlTradeRequest contendo a descrição de pedido do negócio. Por tanto, corrigir o preenchimento da estrutura MqlTradeRequest e lidar com resultados da execução de solicitação pode ser um desafio quando se trata de operações de comércio.
De acordo com o seu sistema de negociação, você pode comprar ou vender a preço de mercado (COMPRA ou VENDA), bem como fazer um pedido de compra/venda pendente a uma certa distância em relação ao preço de mercado atual:
BUY STOP, SELL STOP - compra ou venda, no caso de um deslocamento específico de nível (pior do que o preço atual);
BUY LIMIT, SELL LIMIT - compra ou venda, no caso de um nível específico são atingidas (melhor do que o preço atual);
BUY STOP LIMIT, SELL STOP LIMIT - definição de BUY LIMIT ou SEEL LIMIT no caso de um preço específico são atingidos.
Você pode precisar modificar ou excluir um pedido pendente. Isso também pode ser feito usando as funções OrderSend()/OrderSendAsync(). Modificar uma posição aberta também é um processo bastante simples, uma vez que é realizado utilizando as mesmas operações comerciais.
Se você acha que as operações de negócio são complexas e confusas, é questão de tempo até você mudar de ideia. Vamos mostrar não só como codificar compras e vendas em MQL5, de forma rápida e fácil, mas também como trabalhar com uma conta comercial e propriedades de símbolos. As classes de negociação nos ajudarão nessa tarefa.
A primeira coisa que você precisa saber ao lançar sua negociação automática é qual a conta de negociação que será usada para a sua operação. Visto que estamos escrevendo um código de formação, vamos implementar uma verificação para o caso no qual o Expert Advisor foi lançado em uma conta real.
A classe CAccountInfo é usada para trabalhar com uma conta. Nós vamos adicionar a inclusão de arquivos AccountInfo.mqh e declarar a variável da classe - conta: