воскресенье, 27 мая 2018 г.

Tutorial de consultor especialista em forex


Guia Avançado Para MetaTrader 4 - Expert Advisors.


Expert Expert Advisors Expert Advisors Creation Expert Advisors são programas que permitem a automação dos processos analíticos e comerciais na plataforma MT4. Para criar um Expert Advisor (ou "Expert"), o programa de edição de especialistas - MetaEditor - deve ser aberto a partir da plataforma MT4. Para abrir o editor (veja a Figura 1):


Na janela Navegador, clique com o botão direito do mouse em Expert Advisors e selecione "Criar"; ou No menu principal & gt; Ferramentas & gt; Editor de Idiomas MetaQuotes; ou Clique no ícone do MetaEditor na barra de ferramentas padrão: ou pressione F4 no teclado do computador.


Qualquer uma dessas ações abrirá o Assistente de criação de especialistas. O Assistente pode ser usado para criar Expert Advisors, Custom Indicators, Scripts e DLLs. Para criar um Expert Advisor, selecione "Expert Advisor" e clique em "Next" para continuar, como mostra a Figura 2.


A janela "Propriedades gerais do consultor especialista" é exibida. Aqui, os comerciantes devem especificar o:


Nome - um nome criado pelo usuário para o especialista. Desenvolvedor - o nome do desenvolvedor. Link - para o site do desenvolvedor, se aplicável. Entradas - a lista de entradas de especialistas.


Para adicionar um novo parâmetro ao campo Entradas, pressione o botão "Adicionar". Para cada parâmetro, o comerciante deve especificar o nome, tipo e valor inicial, como mostrado na Figura 3. Para excluir um parâmetro, realce o parâmetro e pressione "Excluir". Estas se tornam as variáveis ​​de entrada dentro do especialista. Depois que todas as entradas tiverem sido listadas, clique em "Concluir" para continuar.


Uma nova janela aparece no ambiente de programação. O nome do Especialista aparece na parte superior da janela e os parâmetros de entrada inseridos anteriormente são listados próximos da parte superior do código, conforme mostrado na Figura 4.


A partir daqui, o código Expert pode ser inserido na janela usando a linguagem de programação e a sintaxe MQL4 (veja a Figura 5).


Nota: Especificidades sobre programação estão fora do escopo deste tutorial; Entender a lógica de programação e aprender uma linguagem específica requer um esforço significativo. Os traders podem aprender mais sobre programação no ambiente MQL4 lendo os Guias de Ajuda do MT4 e participando dos fóruns ativos da comunidade MQL4.


O MQL4, como outras linguagens proprietárias, possui uma lista de palavras reservadas e constantes padrão que são usadas durante a programação. Exemplos de constantes para operações de comércio, juntamente com suas descrições, incluem:


OP_BUY - Posição de compra OP_SELL - Posição de venda OP_BUYLIMIT - Posição de limite pendente de compra OP_SELLLIMIT - Posição de limite pendente de venda OP_BUYSTOP - Posição de parada pendente de compra OP_SELLSTOP - Posição de parada pendente de venda.


Os traders podem encontrar uma Referência MQL4 na guia Ajuda da Caixa de Ferramentas na janela do MetaEditor. Esta referência inclui informações que são úteis para programadores iniciantes e experientes, incluindo:


Básico Constantes Padrão Variáveis ​​Predefinidas Informações de Conta de Execução do Programa Funções de Matriz Funções Comuns Funções de Conversão Indicadores Personalizados Data & amp; Funções de tempo Funções de arquivo Funções de objeto Funções de negociação.


Compilação do Expert Advisor.


Depois que o desenvolvimento do Especialista for concluído, ele deve ser compilado para garantir que o código tenha sido gravado no formato adequado necessário para executar o Especialista. Para compilar o especialista:


Selecione Arquivo & gt; Compile (veja a figura 6); ou Clique no botão Compilar na barra de ferramentas; ou Pressione F5 no teclado do computador.


Uma vez iniciada a compilação, uma atualização aparece na Caixa de ferramentas abaixo do código na janela do MetaEditor, conforme mostrado na Figura 6. Um erro ou aviso será listado.


Após a compilação bem-sucedida, o novo Expert aparecerá na janela Navigator - Expert Advisors, conforme mostrado na Figura 7. Se o Expert não tiver compilado com sucesso, ele continuará aparecendo, mas seu ícone ficará cinza e o Expert não poderá ser usado.


Antes que o Especialista possa ser usado, seus parâmetros devem ser definidos na janela Configurações do Terminal. Para abrir a janela:


No menu principal & gt; Ferramentas & gt; Opções; ou Pressionando CTRL + O no teclado do computador. Qualquer ação irá abrir a janela "Opções". Selecione a guia "Expert Advisors", conforme mostrado na Figura 8.


As configurações a seguir estão disponíveis na guia "Expert Advisors":


Ativar Expert Advisors - essa opção permite que o usuário habilite (marque) ou desative (desmarque) o uso de todos os especialistas. Desativar especialistas quando a conta foi alterada - essa opção desativa o Especialista se a conta tiver sido alterada, como de uma demonstração para uma conta ativa. Desativar especialistas quando o perfil foi alterado - essa opção impede que os Especialistas sejam iniciados se o perfil tiver sido alterado. Permitir negociação ao vivo - para ativar os especialistas no modo em tempo real (em vez de testar um especialista em dados históricos). Peça confirmação manual - para enviar uma confirmação comercial antes de enviar o pedido. Permitir importações de DLL - para usar DLLs para aprimorar a funcionalidade do Expert. Confirme chamadas de função DLL - para permitir o controle sobre a execução de cada função chamada. Permitir importações de especialistas externos - para permitir que o especialista acesse funções de outros especialistas ou bibliotecas MQL4.


Uma vez que as seleções foram feitas, clique em "OK" para fechar a janela.


Depois que o especialista foi criado e configurado, ele está pronto para ser lançado. Para lançar um especialista:


Uma janela é exibida com as guias Common e Inputs, conforme mostrado na Figura 9. Revise as configurações em cada guia e faça as alterações necessárias e, em seguida, clique em "OK" para anexar o Expert ao gráfico de preço ativo.


O especialista agora será anexado ao gráfico de preços. Seu nome aparecerá no canto superior direito do gráfico. O nome do Especialista será seguido por uma carinha sorridente, como mostra a Figura 10, se a negociação ao vivo estiver ativada. Caso contrário, o nome do Especialista aparecerá com uma cara carrancuda, um punhal depois que o nome indicar que todos os especialistas estão desabilitados.


O especialista está pronto para começar funções analíticas e comerciais.


Para desligar um especialista, ele deve ser removido do gráfico. Para remover um especialista, clique com o botão direito do mouse no gráfico de preço ativo, selecione "Expert Advisors" e, em seguida, "Remove", como mostra a Figura 11.


Notas sobre os Expert Advisors.


Todos os especialistas estão desligados se o terminal estiver fechado. Se um gráfico for fechado, o Especialista anexado ao gráfico também será encerrado. Adicionar outro especialista a um gráfico removerá o anterior (aparece uma confirmação). Excluir o Especialista da janela Navegador não encerra um Especialista do mesmo nome em um gráfico de preço ativo.


Instalação de Expert Advisors no MT4 & # 8211; Tutorial do Trader.


Você já se perguntou por que os mercados forex às vezes se movem de forma tão agressiva, literalmente em um piscar de olhos quando uma notícia econômica é lançada? Como isso é possível? A resposta é trocar robôs que são instruídos a comprar ou vender com base na interpretação de uma informação econômica. Esses algoritmos de negociação são basicamente computadores programados para comprar ou vender, e há toda uma indústria que lida com programação e gerenciamento desses computadores. Embora esses movimentos sejam em grande parte atribuídos a grandes empresas do setor, como os algoritmos de negociação de alta frequência (HFT), o comerciante de varejo também tem a oportunidade de criar um robô e aplicá-lo a uma conta de negociação. Antes de entrar em mais detalhes, aqui vou usar a plataforma de negociação MetaTrader 4 para explicar como configurar um robô desse tipo; mas vale ressaltar que um robô comercial pode ser programado para comprar ou vender também em outras plataformas de negociação. Na verdade, se você negociar com uma plataforma de negociação que não ofereça a possibilidade de anexar um robô a um gráfico, essa plataforma de negociação estará incompleta.


* $ 50 para comerciantes da UE & amp; ** Não válido para comerciantes da UE, T & amp; C aplicam-se.


O que é um Expert Advisor e como você o constrói?


Um Expert Advisor (EA) é um robô de negociação que pode ser construído usando a plataforma de negociação MetaTrader e anexado a um par de moedas para negociá-lo. Esses robôs são instruídos a comprar ou vender quando condições específicas de mercado são satisfeitas, como algumas médias móveis cruzando, ou um oscilador sendo sobrecomprado ou sobrevendido, etc.


Se você sabe programar um robô desse tipo - ou seja, se você estiver familiarizado com o MetaEditor (pessoas com experiência em programação de TI geralmente acham a programação no MetaEditor uma tarefa fácil) - então a primeira coisa a fazer é abrir a plataforma MetaTrader e no menu acima, basta clicar em Ferramentas, depois escolher o Editor de Idiomas MetaQuotes, e um novo programa será aberto em uma janela separada.


Importando um EA para o MetaTrader 4.


Após o EA ter sido construído no modo livre de erros, o próximo passo lógico é importá-lo para a plataforma de negociação, o MetaTrader. Para fazer isso, a plataforma de negociação precisa ser aberta e, na guia Arquivo no canto superior esquerdo da tela, a Pasta de Dados Abertos precisa ser selecionada. Esse é o local onde o MetaTrader está instalado no computador, e o próximo passo é escolher o MQL4, depois o Experts, e simplesmente colar o arquivo do Expert Advisor lá. O consultor especialista deve ter a extensão. mql ou. exe.


Testes Históricos.


Neste momento, tudo que você sabe é que você colocou uma idéia / configuração de negociação em um algoritmo de negociação e espera que ela funcione corretamente. Isso pode ser bom, mas que tal ver como teria sido no passado para ter uma idéia de sua lucratividade?


Isso pode ser feito facilmente usando a plataforma de negociação MetaTrader 4 também. Basta escolher a guia Strategy Tester e uma nova janela aparecerá na parte inferior da tela. Essa nova janela permite testes históricos e, para isso, é possível selecionar o EA, o par de moedas, o período de tempo e o período de volta no tempo a ser testado.


Anexando o EA a um gráfico e executando-o.


Essa é uma tarefa bastante fácil, pois tudo o que você precisa fazer é selecionar o Expert Advisor na guia Navigator, conforme explicado anteriormente, e apenas clicar e arrastá-lo para o gráfico desejado. A próxima coisa que você verá no canto superior direito do gráfico é um emoticon que mostra um rosto que está chateado, como na imagem abaixo. Isso ocorre porque a guia AutoTrading não está ativada e, ao fazer isso, o emoticon se transformará em um rosto sorridente.


Tutorial MQL4: Meu primeiro Expert Advisor.


Índice.


Antes de começarmos com este tutorial do mql4, certifique-se de entender os seguintes tipos de dados. Cada variável que usamos deve ser definida com um tipo de dados. Aqui estão os mais usados:


int = integer - este é um "número" normal. Exemplo: 1, 15, 521 double = um número com pontos decimais. Exemplo: 1,154, 0,0144, 255,145. string = uma palavra / frase. exemplo: "BuyOrder", "OrderSend colocado com sucesso". bool = falso ou verdadeiro.


Você verá em breve como usá-los.


Capítulo 1: Meu primeiro EA.


3 soldados brancos EA.


Antes de começar, observe que, após o capítulo 1, talvez você não consiga executar o EA. Nem todos os corretores funcionam da mesma maneira. Se isso não funcionar em seu corretor, continue lendo até o final do capítulo 2, onde tornaremos o EA compatível com todos os corretores.


BA escreva seu próprio Expert Advisor primeiro você tem que mudar para o MetaEditor. Você faz isso clicando neste ícone. No MetaEditor, clique em Novo e escolha "Expert Advisor".


Na próxima janela, escrevemos o nome do Expert Advisors e o nome do autor com o link do site. Nós também queremos adicionar nossas primeiras variáveis. Adicionamos as variáveis ​​padrão que um Expert Advisor precisa. Adicionamos um TakeProfit, StopLoss, LotSize, Slippage e MagicNumber. Todos os tipos são int (integer), exceto o LotSize. O LotSize deve ter um ponto decimal, então você deve defini-lo como um double. Você pode perceber que eu defini o TakeProfit, StopLoss e Slippage um pouco alto. Isso é porque eu estou usando um corretor de 5 dígitos. Como o EA não reconhecerá automaticamente um corretor de 4 ou 5 dígitos, precisamos adicionar uma função que faça isso para ele. Mas você aprenderá isso mais tarde (no próximo tutorial MQL4). Por enquanto, deixe assim. (Se você tiver um 4 Digits Broker, divida esses 3 valores por 10)


Então você clica em próximo e termina e vemos que o MetaEditor gerou um arquivo com suas variáveis ​​pré-definidas. Você pode ver três áreas. A área OnInit (), OnDeinit () e OnTick (). Rapidamente explicado. Todo o código que você escreve vai para uma dessas áreas. Colocaremos todo o código que desejamos chamar se anexarmos o Expert Advisor ao gráfico na área OnInit (). O OnDeinit () é executado se destacarmos o EA. E, finalmente, a área em que mais trabalhamos, a área OnTick (). A função OnTick () é chamada toda vez se recebermos um novo preço (tick) do broker pelo símbolo (par de moedas) ao qual o EA está anexado.


Se você compilar o EA com F7 e retornar ao seu Metatrader, você já poderá encontrar o EA no Navigator (Crtl + N). Se você tentar anexá-lo a um gráfico e acessar a guia Entradas, poderá ver nossas variáveis ​​definidas.


O que fazemos neste tutorial mql4: Queremos aprender como programar um Expert Advisor que negocie os 3 soldados brancos. É uma estratégia simples em que o EA abre uma negociação de compra quando as últimas três velas estavam em alta.


Nós escrevemos isso nele:


Para esta estratégia, chamamos uma variável predefinida. The Close [], que é um duplo (lembre-se de cima). O Close [] nos dá um preço próximo (exemplo 1.24577) para cada barra do gráfico atual. Fechar [0] significa o preço atual de fechamento; Feche [1] o anterior e assim por diante. Mesmo com o Open [], Low [] e High [].


Então, quando você olha o código, essa lógica deve estar clara agora.


O & # 8220; // Open Buy Order & # 8221; é uma ajuda para mim. Vou colocar aqui a função para abrir uma ordem de compra. O 2 // significa que esta linha está comentada. O EA irá ignorar isso. É apenas uma ajuda para nós.


Dica: Se você colocar o cursor em uma função / variável predefinida e pressionar F1, a Referência MQL4 será aberta e você poderá ler o que esta função / variável faz!


Se você escreveu pressione F7 para compilar o EA e verificar se você tem alguns erros!


Agora usamos a função OrderSend para enviar nosso pedido ao corretor. Nós escrevemos:


(A função OrderSend como essa não funcionará em ECN Brokers. Você aprenderá a torná-la compatível com ECN Brokers no próximo tutorial)


Rapidamente explicou a função OrderSend:


_Symbol = Primeiro, temos a entrada em qual par o Expert Advisor deve abrir a negociação. _Symbol retorna o par ao qual o EA está anexado. OP_BUY = Queremos abrir uma ordem de compra. LotSize = Qual LotSize o pedido deve ter. Esta é realmente a variável que definimos no início no Assistente MQL. Ask = o atual preço Ask. (use o Bid para uma ordem de venda) Slippage = auto-explicativo (O valor que definimos acima) StopLoss = Este é o preço do StopLoss. É simplesmente o preço Ask menos o preço StopLoss. Agora, lembre-se que o StopLoss é um inteiro (500 pips), o Ask é um preço (ex. 1.20521). Agora, para subtrair o StopLoss do preço Ask, você precisa multiplicá-lo por 0.00001 ou 0.001 (par de 5 ou 3 dígitos). Fazemos isso com a variável predefinida & # 8220; _Point & # 8221 ;, que é o valor atual do ponto de símbolo. TakeProfit = Quase o mesmo como o StopLoss. Comentário = o comentário que deve aparecer no Jornal se abrirmos uma compra. MagicNumer = E finalmente entramos no MagicNumber. (Definido acima)


Pressione F7 para compilar e verificar o resultado no StrategyTester. Agora você vai realmente conseguir algo assim.


O EA coloca uma ordem de compra em cada tick se as 3 últimas barras forem de alta. Não é o que queremos, mas pelo menos há algo acontecendo 🙂


Temos que programar uma nova função personalizada que permite que o EA tenha apenas uma negociação aberta de uma só vez. Você precisa saber: o MQL4 já possui funções predefinidas como a função OrderSend (). Mas também podemos escrever nossa própria função, na qual podemos chamar outras funções personalizadas ou predefinidas. Nós os escrevemos no final do nosso arquivo.


Então, vamos ao fundo do nosso arquivo e programar uma nova função chamada TotalOpenOrders. Essa função é um inteiro (int). Retorna o valor de negociação aberta para este par e este MagicNumber. Nós usamos nosso MagicNumber que definimos acima. A função é assim:


Não esqueça de chamar a função na área OnTick.


Explicado: chamamos nossa função personalizada. A função retorna o total de negociações abertas para este símbolo e este MagicNumber. Se o total de negociações for igual a 0, o EA continuará com o código dentro dos parênteses.


E se você fizer um backtest, você deve ter algo assim:


Rapidamente explicou a função TotalOpenOrders:


Nesta função, temos um contador (total_orders), que no final da função retorna o total de pedidos abertos. Nós temos um & # 8220; para loop & # 8221; que analisa todo o pedido aberto na sua conta. Se o EA encontra um pedido que corresponde ao seu símbolo e seu MagicNumer, o contador aumentará o meu 1 (que é o ++).


Mas agora ainda temos um problema. Se a vela for longa, o EA abre um segundo negócio de compra, logo após a primeira negociação de compra ser fechada pelo StopLoss ou pelo TakeProfit. Temos que adicionar uma segunda função. A & # 8220; IsNewBar & # 8221; função. Esta função é booleana (booleana). Esta função retornará um verdadeiro se uma nova vela é gerada no Metatrader senão retorna um falso. Esta função é autoexplicativa, então não explicarei como ela funciona neste tutorial mql4.


Vamos colocar essa função logo acima da função TotalOpenOrder e chamá-la na função OnTick junto com o & # 8220; TotalOpenOrders () == 0 & # 8221 ;. Agora ficará assim e funcionará muito bem.


Nós terminamos a primeira parte deste tutorial MQL4 e você acabou de aprender como programar um Expert Advisor simples. Tente agora adicionar a estratégia oposta chamada 3 corvos negros (Vender depois de 3 velas de baixa).


No próximo tutorial do mql4, você aprenderá a corrigir o problema com o 4/5 Digits Broker e como fazê-lo funcionar com um ECN Broker.


Este tutorial MQL4 foi criado em 14 de julho de 2015.


Tem dúvidas sobre este tutorial mql4? Escreva um comentário ou abra um tópico no fórum (se já não houver uma resposta para ele)


Consultor Especialista Simples.


Esta seção aborda os princípios da criação de um Expert Advisor de negociação simples.


Argumentos preliminares.


Antes de começar a programar um Expert Advisor de negociação, é necessário definir os princípios gerais de um programa futuro. Não há regras rígidas de criação de programa. No entanto, depois de ter criado um programa, um programador geralmente continua a melhorá-lo. Para ser capaz de compreender facilmente o programa no futuro, ele deve ser criado de acordo com um esquema bem pensado e fácil de entender (é especialmente importante que um programa seja melhorado por outro programador). O programa mais conveniente é aquele que consiste em blocos funcionais, cada um dos quais é responsável por sua parte de cálculos. Para criar um algoritmo de um Expert Advisor de negociação, vamos analisar o que um programa operacional deve fazer.


Um dos dados mais importantes na formação de ordens de negociação é a informação sobre ordens que já existem em um terminal de cliente. Algumas das estratégias de negociação permitem apenas uma ordem unidirecional. Geralmente, se uma estratégia de negociação permitir, várias ordens podem ser abertas em um terminal ao mesmo tempo, embora seu número deva ser razoavelmente limitado. Ao usar qualquer estratégia, as decisões comerciais devem ser tomadas levando em conta a situação atual. Antes que uma decisão comercial seja feita em um programa, é necessário saber quais ordens de negociação já foram abertas ou colocadas. Primeiro de tudo, um programa deve conter um bloco de contabilidade de ordens que está entre os primeiros a serem executados.


Durante uma execução de EA, as decisões de negociação devem ser tomadas, cuja implementação leva à execução de operações de negociação. Parte de código responsável pela formação de ordens de negociação é melhor escrita em um bloco separado. Um Expert Advisor pode formar uma solicitação de negociação para abrir uma nova ordem pendente ou de mercado, fechar ou modificar qualquer um dos pedidos existentes ou não executar nenhuma ação. Um EA também deve calcular os preços do pedido, dependendo do desejo do usuário.


As decisões comerciais devem ser tomadas em um programa com base em critérios comerciais. O sucesso de todo o programa depende da exatidão de se detectar critérios comerciais no programa. Ao calcular critérios comerciais, um programa pode (e deve) levar em conta todas as informações que podem ser úteis. Por exemplo, um Expert Advisor pode analisar a combinação de valores de indicadores técnicos, tempo de notícias importantes, hora atual, valores de alguns níveis de preços, etc. Por conveniência, a parte do programa responsável pelo cálculo dos critérios de negociação deve ser escrita em separado. quadra.


Um Expert Advisor de negociação deve necessariamente conter um bloco de processamento de erros. A análise de erros que podem ocorrer na execução da operação de negociação permite, por um lado, repetir uma solicitação de negociação e, por outro lado, informar um usuário sobre uma possível situação de conflito.


Estrutura de um Expert Advisor Simples.


Abaixo está um esquema estrutural de um Expert Advisor simples, construído com base em vários blocos funcionais, em cada bloco, uma certa parte separada dos cálculos.


Fig. 109. Esquema estrutural de um simples Expert Advisor.


No estágio de desenvolvimento do EA a seguir, ainda não há código de programa. Ao mesmo tempo, o algoritmo de um programa é em grande parte formado. Como o EA construído sobre as bases do esquema oferecido irá operar pode ser facilmente entendido simplesmente olhando o esquema e orientando sobre os nomes de blocos e matrizes de relações (controle de passagem) entre eles.


Depois que o controle de início do programa é passado para o bloco de processamento preliminar. Neste bloco, alguns parâmetros gerais podem ser analisados. Por exemplo, se não houver barras suficientes em uma janela (barras necessárias para calcular parâmetros de indicadores técnicos), um EA não poderá operar adequadamente. Nesse caso, um EA deve encerrar a operação preliminarmente informando um usuário sobre ele e relatando o motivo da rescisão. Se não houver contra-indicações de caráter geral, o controle é passado para ordenar o bloqueio contábil.


No bloco de ordens contábeis, o número e a qualidade dos pedidos existentes em um terminal do cliente para uma segurança (para a janela da qual o EA está anexado) são detectados. Neste bloco, as ordens de outros títulos devem ser eliminadas. Se uma estratégia de negociação programada exigir o uso apenas de ordens de mercado (e não usar ordens pendentes), o fato da presença de ordens pendentes deve ser detectado. Se uma estratégia admite apenas uma ordem de mercado e na verdade existem várias ordens, esse fato também deve ser conhecido. A tarefa do bloco de contabilidade de pedidos (neste esquema) é definir se a situação atual de negociação corresponde a uma situação esperada, ou seja, aquela em que o EA pode operar adequadamente. Se a situação corresponder, o controle deve ser passado para o próximo bloco para continuar a operação do EA; se não, a operação do EA deve ser encerrada e esse fato deve ser relatado a um usuário.


Se não houver pedidos no terminal ou o número e a qualidade dos pedidos existentes corresponder ao esperado, o controle será passado para o bloco de definição dos critérios de negociação. Neste bloco são calculados todos os critérios necessários para a tomada de decisões comerciais, ou seja, critérios para abertura, fechamento e modificação de ordens. Mais controle é passado para o bloco de ordens de fechamento.


É fácil entender por que, no esquema oferecido, o bloco de ordens de fechamento é executado antes do bloco de ordens de abertura. É sempre mais razoável processar os primeiros pedidos existentes (fechar ou modificar) e somente depois disso abrir novos pedidos. Geralmente, é correto ser guiado pelo desejo de ter o mínimo de ordens possível. Durante a execução deste bloco todas as ordens, para as quais o critério de fechamento foi ativado, devem ser fechadas.


Depois que todos os pedidos necessários foram fechados, o controle é passado para um bloco de cálculo de tamanho de novos pedidos. Existem muitos algoritmos para calcular um volume de pedidos. O mais simples deles é usar um tamanho de lote fixo e constante. É conveniente usar esse algoritmo em um programa para testar estratégias. O método mais popular de definir um tamanho de pedido é definir o número de lotes, dependendo da quantidade de margem livre, por exemplo, 30-40% dele. Se a margem livre não for suficiente, o programa encerra sua operação informando o usuário sobre o motivo.


Após o número de lotes para abertura de novos pedidos ser definido, o controle é passado para o bloco de abertura de pedidos. Se algum dos critérios calculados anteriormente apontar para a necessidade de abrir uma ordem de um certo tipo, um pedido de negociação para abrir um pedido é formado neste bloco.


Há também um bloco de análise de erros em um Expert Advisor. Se alguma operação de negociação falhou, o controle (apenas neste caso) é passado para o bloco de processamento de erros. Se um erro retornado por um servidor ou terminal do cliente não for crucial, mais uma tentativa será feita para executar uma operação de negociação. Se um erro crucial for retornado (por exemplo, uma conta é bloqueada), um EA deve encerrar sua operação. Lembre-se, no MQL4 não há possibilidade de o programa terminar uma operação do EA em uma janela de segurança (diferentemente dos scripts, veja Funções Especiais). O que pode ser feito de uma maneira de programa é o término de start (). Em um novo início da função start () em um novo tick, o valor de um determinado flag de proibição de flag variável (neste caso habilitado como resultado de um erro crítico) pode ser analisado e o controle pode ser passado para o término do operação de função especial; assim, a formação de novo pedido de comércio não é permitida. No esquema oferecido, o valor da bandeira é analisado no bloco de processamento preliminar.


Estratégia de Negociação.


Os preços de mercado estão em constante movimento. O estado de mercado a qualquer momento pode ser condicionalmente caracterizado como uma tendência - forte mudança de preço unidirecional (aumento ou queda), ou como um movimento de preço flat-lateral com desvios fracos de uma certa média. Essas características de mercado são condicionais, porque não há critérios claros, de acordo com qual tendência ou flat podem ser identificados. Por exemplo, movimentos laterais longos com fortes desvios que não podem ser traçados nem em um plano nem em uma tendência. Geralmente assume-se que o mercado é principalmente no estado de movimento lateral e as tendências geralmente ocorrem 15-20% do tempo.


Fig. 110. Plano e tendência no mercado.


Todas as estratégias de negociação também podem ser convencionalmente divididas em dois grupos principais. O primeiro grupo contém estratégias orientadas para planos. A idéia principal de tais estratégias é que, após um desvio evidente, o preço deve retornar à posição anterior, é por isso que as ordens são abertas na direção contrária ao último movimento de preço. As estratégias do segundo grupo são estratégias de tendência, quando as ordens são abertas na mesma direção do movimento do preço de sal. Existem estratégias mais complicadas (combinadas). Tais estratégias levam em conta muitos fatores diferentes que caracterizam o mercado; Como resultado, a negociação pode ser executada tanto no plano quanto na tendência. Não é difícil implementar a negociação de acordo com essa ou aquela estratégia tecnicamente - o MQL4 contém todos os meios necessários para isso. O principal trabalho na criação de uma vez própria estratégia consiste na busca de critérios de negociação.


Critérios de Negociação.


Neste exemplo, tentaremos construir um Expert Advisor de tendência, ou seja, aquele que abrirá pedidos na direção do movimento de preço. Então, precisamos encontrar entre vários indicadores técnicos aqueles que detectam o início de uma tendência. Um dos métodos mais simples de pesquisar critérios de negociação é baseado na análise da combinação de MAs com diferentes períodos médios. A figura 111 e a figura 112 mostram a posição de dois MA diferentes (com períodos de média 11 e 31) em diferentes partes do mercado. Médias com pequeno período médio (linhas vermelhas) estão mais próximas de um gráfico de preços, sinuoso e móvel. Médias móveis com maior período de média (linha azul) são mais inertes, têm maior defasagem e estão mais distantes dos preços de mercado. Vamos prestar atenção aos lugares onde os MAs com diferentes períodos médios se cruzam e tentam decidir, se o fato do cruzamento MA pode ser usado como um critério de leitura.


Fig. 111. Cruzamento de MA (11) e MA (31) quando a direção do movimento de preços muda.


Na Fig. 111, vemos uma parte do mercado em que as ordens de abertura na direção do movimento de preços na passagem de MA são justificadas. No ponto A, a linha vermelha cruza a linha azul de baixo para cima, depois disso o preço de mercado continua crescendo por algum tempo. Além disso, o cruzamento de MA reverso indica a mudança de direção do movimento de preço. Se abrirmos uma ordem de compra no ponto A e fechá-la em B, obteremos lucro proporcional à diferença entre os preços A e B.


Fig. 112. Cruzamento de MA (11) e MA (31) quando a direção do movimento de preços muda.


Ao mesmo tempo, há outros momentos no mercado quando o MA se cruza, mas isso não leva a uma subida ou descida considerável dos preços (Fig. 112). Pedidos abertos no cruzamento do MA nesses momentos levarão a perdas. Se a venda for aberta em A e fechada em B, tal negociação trará perdas. O mesmo pode ser dito sobre uma ordem de compra aberta em B e fechada em C.


O sucesso de toda a estratégia implementada com base no cruzamento de AM depende do número de partes que podem ser caracterizadas como tendência e plana. No plano, muitas vezes o cruzamento MA é um evento regular que interfere com qualquer estratégia de tendência. Inúmeros sinais falsos geralmente levam a perdas. É por isso que este cruzamento de MAs com diferentes períodos de média pode ser usado para construir estratégias de negociação apenas em combinação com outros sinais que provem uma tendência. Neste exemplo (para construir um Expert Advisor simples), teremos que recusar o uso deste sinal.


Nós usaremos outro sinal. Analisando visualmente o caráter das mudanças de preço no mercado, podemos ver que uma alta ou baixa de preço de uma direção ocorre frequentemente como resultado de um movimento curto e forte. Em outras palavras, se em um curto período ocorreu um movimento forte, podemos esperar sua continuação em um período de médio prazo.


Fig. 113. Um forte movimento de preços pode levar a um desenvolvimento de tendência.


A figura 113 mostra o período de mercado em que um movimento forte resultou na continuação da mudança de preço na mesma direção. Como o & quot; um movimento forte & quot; Podemos usar a diferença de MAs com diferentes períodos médios. Quanto mais forte o movimento, maior a defasagem do MA com maior período médio de MA com um pequeno período de média. Além disso, mesmo os movimentos de preços descontínuos fortes com retorno adicional não resultam numa grande diferença entre os MAs, isto é, numerosos sinais falsos não aparecem. Por exemplo, o salto de preço em 50 pontos com retorno adicional (no centro da Fig. 113) acarretou aumento de diferença entre os MAs apenas em 20 pontos. Ao mesmo tempo, um movimento realmente forte (que geralmente não é acompanhado por uma correção considerável) no ponto A resultou na diferença aumentar até 25 - 30 pontos.


Se a ordem de compra for aberta quando um determinado valor de diferença entre os MAs for atingido, por exemplo, em A, o mais provável será que a ordem seja lucrativa quando um preço atingir um valor de ordem de parada predefinido. Vamos usar este valor como critério de negociação no nosso Expert Advisor.


Número de encomendas.


Neste exemplo, analisamos um Expert Advisor que admite a presença de apenas uma ordem de mercado, ordens pendentes não são fornecidas. Tal abordagem é justificada não apenas neste exemplo, mas pode ser usada como base para qualquer estratégia.


Geralmente, as ordens pendentes são usadas quando um desenvolvedor tem um critério bastante confiável para prever a mudança futura de preço com alta probabilidade. Se não houver tal critério, não há necessidade de usar pedidos pendentes.


A situação em que várias ordens opostas para um título estão abertas também não pode ser considerada razoável. Foi escrito anteriormente que, do ponto de vista econômico, as ordens opostas são consideradas sem sentido, especialmente se os preços dos pedidos forem iguais (consulte Encerrando e Excluindo Pedidos). Nesse caso, devemos fechar um pedido por outro e esperar que um sinal abra uma ordem de mercado em uma determinada direção.


Relação dos Critérios de Negociação.


From this position it becomes clear what relations are possible between trading criteria. Fig. 114 shows three variants of correlation of trading criteria, when each criterion is important (valid). Actions (opening and closing market orders) take place clockwise on the following pictures.


Fig. 114. Order opening and closing criteria correlation (a and b - correct, c - incorrect).


The most popular variant of a correctly formed trading criteria is the variant a . After being opened a market order Buy is held upon till the moment when criterion requiring its closing triggers. After that a pause occurs when no orders are opened. Further a market order Sell can be opened. Conditions for closing a Sell order (in accordance with correctly formed criteria) occur earlier, than conditions for opening a Buy order. However, a Buy order can be opened once again, if a trading criterion requires this. But according to this variant a market order cannot be opened if there is an open market order in the contrary direction.


Similar criteria correlation is in the variant b . The difference is that a criterion for opening any market order is at the same time a criterion for closing the opposite order. This variant like the variant a does not allow several orders opened in the terminal at the same time on one security.


The variant of criteria correlation is incorrect. According to this variant opening of a market order is allowed when contrary orders are not closed yet, which is senseless. There can be rare cases when this variant is partially justified. Opening of an opposite order is sometimes acceptable for compensating losses occurring at small corrections after strong price movements. In such cases an opposite order can be opened of the same or smaller value than the already existing one and then closed when the correction is over. Such a tactic allows not to interfere with the "main" order opened in the trend direction.


In general case several one-direction orders are also possible. This may be justified when an earlier opened order is protected by a Stop order and the criterion pointing at the price development in the same direction triggered once again. However, when creating such a strategy, a developer must be fully aware that in case of a sharp price movement change the placed stop orders may be unexecuted by some brokers at the first price touch. And the loss will be proportionate to the total value of one-directional market orders.


In our example we use variant b of trading criteria correlation. All opened market orders are closed either by a stop order or after a criterion of opening an order in opposite direction triggers (here criterion of closing Buy coincides with that of opening Sell and vice versa).


Size of Opened Orders.


In any trading strategy order sizes should be reasonably limited. In a simple case a fixed order size is used in an Expert Advisor. Before EA operation start, a user can set any size of future orders and leave it unchanged for some time. Further if balance changes, a user can set up a new value of lot numbers of opened orders.


A too small order size provides more confidence in operation at the unpredictable market change, but the profit in case of success will be not so large. If the order size is too large, large profit can be acquired, but such an EA will be too risky. Usually the size of opened orders is set up so, that margin requirements do not exceed 2-35% percent of the balance or free margin (if a strategy allows only one opened order, balance and free margin at the moment before the order opening will be equal).


In this example both variants are implemented. A user may choose either to indicate directly values of orders or set the value in percentage from the free margin.


Programming Details.


A simple trend Expert Advisor tradingexpert. mq4 constructed on the basis of previous arguments can look like this:


Describing Variables.


One more criterion in program estimation is its readability. A program is considered to be correctly written, if it can be easily read by other programmers, that's why all main program parts and main moments characterizing the strategy must be commented. This is also why it is recommended to declare and comment all variables at the beginning of the program.


In the block 1-2 external and global variables are described.


According to rules, external and global variables must be opened before their first usage (see Types of Variables), that's why they are declared in the program head part. All local variables of the function start() are gathered and described in the upper function part (block 2-3) immediately after the function header. Rules of declaring local variables do not require it, but also do not prohibit. If a programmer faces difficulties in understanding the meaning of a variable when reading the program, he can refer to the upper program part and find out the meaning and type of any variable. It is very convenient in programming practice.


Block of preliminary processing.


In this example the preprocessing consists of two parts (block 3-4). The program terminates operation if there are not enough bars in a security window; in such a case it is impossible to detect correctly (in block 5-6) values of moving averages necessary for calculating criteria. Besides here the value of the variable Work is analyzed. In the normal EA operation the variable value is always 'true' (it is set once during initialization). If a critical error occurs in the program operation, 'false' is assigned to this variable and start() finishes its operation. This value will not change in future, that is why the following code is not executed. In such a case the program operation must be stopped and the reason for the critical error must be detected (if needed, a dealing center must be contacted). After the situation is solved, the program can be started once again, i. e. the EA can be attached to a security window.


Accounting orders.


The described Expert Advisor allows working only with one market order. The task of the orders accounting block (block 4-5) is to define characteristics of an opened order, if there is one. In the loop going through orders 'for' all existing market and pending orders are checked, namely from the first (int i=1) to the last one (i<=OrdersTotal()). In each cycle iteration the next order is selected by the function OrderSelect(). The selection is made from a source of opened and pending orders (SELECT_BY_POS).


If the selection is executed successfully (i. e. there is one more order in the terminal), further this order and the situation must be analyzed: whether the order is opened for the security, at which the EA operates, whether the order is market or pending; it also must be taken into account when counting orders. In the line:


all orders opened for another security are eliminated. Operator 'continue' stops the iteration and characteristics of such an order are not processed. But if the order is opened for the security, to the window of which the EA is attached, it is further analyzed.


If OrderType() returns value more than 1 (see Types of Trades), the selected order is a pending one. But in this Expert Advisor managing pending orders is not provided. It means the execution of start() must be terminated, because a conflict situation occurred. In such a case after a message about the operation termination start() execution is stopped by the operator 'return'.


If the last check showed that the analyzed order is a market order, the total number of orders for a security is calculated and analyzed. For the first of such orders all necessary characteristics are defined. If in the next iteration the order counter (variable Total) finds the second market order, the situation is also considered to be conflict, because the EA cannot manage more than one market order. In such a case start() execution is stopped after showing a corresponding message.


As a result of the order accounting block execution (if all checks were successful) the variable Total preserves its zero value if there are no market orders, or gets the value 1 if there is a market order for our security. In the latter case some variables set in correspondence with the order characteristics (number, type, opening price, stop levels and order value) also get their values.


Calculating Trading Criteria.


In the analyzed example definition of trading criteria (block 5-6) is calculated on the bases of difference between Moving Averages with different periods of averaging. According to accepted criteria a chart is bull-directed if the current value of the MA with smaller period is larger than the value of MA with larger period, and the difference between the values is larger than a certain value. In a bear movement MA with smaller period is lower than MA with larger period and the difference is also larger than a certain critical value.


At the block beginning values of MAs with averaging periods Period_MA_1 and Period_MA_2 are calculated. The fact of significance of any trading criterion is expressed via the value of a corresponding variable. Variables Opn_B and Opn_S denote the criterion triggering for opening Buy and Sell orders, variables Cls_В and Cls_S - for closing. For example, if a criterion for opening Buy has not triggered, the value of Opn_B remains 'false' (set at the variable initialization); if it has triggered, Opn_B gets the value 'true'. In this case the criterion for closing Sell coincides with that for opening Buy, criterion for opening Sell coincides with that for closing Buy.


Closing Orders.


It was written earlier that this Expert Advisor is intended for operation only with one market order opened for a security, to which window the EA is attached. To the moment when control in the program is passed to the order closing block it is known for sure that at the current moment there are either no orders for the security, or there is only one market order. That's why the code in orders closing block is written so that only one order can be closed successfully.


This block is based on the infinite loop 'while', the body of which consists of two analogous parts: one for closing a Buy order, another for closing a Sell order. 'While' is used here for the purpose that in case of a trade operation failure it could be repeated once again.


In the header of the first operator 'if' condition for closing a Buy order is calculated (Sell orders are closed in the analogous way). If the type of an earlier opened order corresponds to Buy (see Types of Trades) and the sign for closing Buy is relevant, control is passed to the body of 'if' operator where a request to close is formed. As an order closing price in the function OrderClose() the value of a two-sided quote corresponding to the order type is indicated (see Requirements and Limitations in Making Trades). If a trade operation is executed successfully, after a message about the order closing is shown the current 'while' iteration is stopped and the execution of the order closing block is over. But if the operation fails, the user-defined function for processing errors Fun_Error() is called (block 10-11).


Processing Errors.


As a passed parameter in Fun_Error() the last error code calculated by GetLastError() is used. Depending on the error code Fun_Error() returns 1 if the error is not critical and the operation can be repeated, and 0 if the error is critical. Critical errors are divided into two types - those, after which a program execution can be continued (for example, a common error) and those, after which execution of any trade operations must be stopped (for example, blocked account).


if after an unsuccessful trade operation the user-defined function returns 1, the current 'while' iteration is terminated and during the next iteration another attempt is made to execute the operation - to close the order. If the function returns 0, the current start() execution is stopped. On the next tick start() will be started by the client terminal again and if еору conditions for order closing are preserved, another attempt to close the order will be made.


If during error processing it is found out that further program execution is senseless (for example the program operates on an old client terminal version) during the next start the execution of the special function start() will be terminated in the block of preliminary processing when analyzing the value of the variable Work.


Calculating Amount of Lots for New Orders.


Amount of lots can be calculated in accordance with a user's settings following one of the two variants. The first variant is a certain constant value set up by a user. According to the second variant the amount of lots is calculated on the basis of a sum equal to a certain percentage (set by a user) of a free margin.


At the beginning of the block of defining the amount of lots for new orders (block 7-8) necessary values of some variables are calculated - minimal allowed amount of lots and step of lot change set up by a broker, free margin and price of one lot for the security.


In this example the following is provided. If a user has set up a certain non-zero value of the external variable Lts, for example 0.5, it is accepted as the amount of lots Lts when a trade request to open an order is formed. If 0 is assigned to Lts, the number of lots Lts is defined on the basis of the variable Prots (percentage), free margin and conditions set up by a broker.


After Lts is calculated, a check is conducted. If this value is lower than the minimal allowed value, the minimal allowed value is accepted. but if free margin is not enough, after a corresponding message the start() execution is terminated.


Opening Orders.


The block of opening orders (block 8-9) like the bloke of opening orders is an infinite loop 'while'. In the header of the first operator 'if' conditions for opening a Buy order are calculated: if there are no orders for the security (variable Total is equal to 0) and the sign for opening a Buy order is relevant (Opn_B is true ), control is passed to 'if' operator body for opening an order. In such a case after rates are refreshed prices for stop levels are calculated.


Values of stop levels are initially set by a user in external variables StopLoss and TakeProfit. In a general case a user can set values for this parameters smaller that a broker allows. Besides a broker may change the minimal allowed distance at any moment (it is an often case at strong market movements, for example, before important news release). That's why before each order opening stop levels must be calculate taking into account values set bu a user and the minimal allowed value set up by a broker.


For calculating stop levels the user-defined function New_Stop() is used; as a passed parameter the stop level value set by a user is used. In New_Stop() first the current minimal allowed distance is calculated. If the value set by a user corresponds to a broker's requirements, this value is returned. If it is smaller than the allowed value, the value allowed by a broker is used. Prices of stop requests are calculated from the corresponding two-sided quote (see Requirements and Limitations in Making Trades).


A trade request to open an order is formed using the function OrderSend(). For the calculation of order opening price and prices of stop requests the two-sided quote values corresponding to the order type are used. If a trade operation was successful (i. e. a server returned the number of an opened order) after a message about a successful order opening is shown. start() execution is finished. If an order was not opened and the client terminal returned an error, the error is processed according to the algorithm described earlier.


Some Code Peculiarities.


The analyzed Expert Advisor code is oriented to the implementation of a certain strategy. Note, some program lines contain variables and calculations that would be changed, if the strategy were changed.


For example, according to the accepted strategy the Expert Advisor is developed to work only with one order. This allowed to use the variable Ticket both for the identification of a closing order number (in block of closing 6-7) and for the identification of a success of a trade operation execution when opening an order (in the block of opening 8-9). In this case such a solution is acceptable. However, if we take the analyzed code as the basis for the implementation of another strategy (for example allow opposite orders) we will have to introduce one or several variables to be able to recognize numbers of opened orders and identify the success of trade operations.


In further strategy modifications we will have to change come program lines containing part of logics contained in the source strategy. Namely in the order accounting block we will not have to terminate the program operation if there are several open orders for a security. Besides, conditions for opening and closing orders will alslo change. This will entail the code changing in blocks of opening and closing orders.


Codificando seu primeiro consultor especialista & # 8211; Escrevendo o código.


Depois de ter sua estratégia de negociação no papel e você está ciente dos princípios que entram em codificar seu primeiro consultor especialista, é hora de começar a escrever o código. Uma vez que o MetaTrader4 esteja instalado e aberto, abra o MetaEditor (F4) e crie um novo EA a partir do zero.


O MQL4, que é a linguagem usada para criar consultores especializados no MetaTrader, tem sua própria estrutura exclusiva, como segue:


A seção Cabeçalho é onde suas configurações globais estão e é o lugar óbvio para começar quando você cria seu EA. É aqui que você identifica os indicadores e parâmetros com os quais trabalhará e os sinais que seu EA estará usando. É também onde você define suas regras de gerenciamento de dinheiro, onde nomeia o EA e onde você pode definir outras variáveis ​​globais, como paradas.


Exemplo de cabeçalho para EA médio móvel:


double StopLoss externo = 200; // SL para um pedido aberto em pips.


Duplo TakeProfit externo = 39; // ТР para um pedido aberto em pips.


extern int Period_MA_1 = 50; // Período do primeiro MA.


extern int Period_MA_2 = 200; // Período do segundo MA.


duplo externo Rastvor = 25,0; // Distância entre os MAs.


Lotes duplos externos = 0,1; // Definir quantidade de tamanho da posição dos lotes.


prots duplos externos = 0,08; // Porcentagem da margem livre.


bool Work = true; // EA irá funcionar.


string Symb; // Nome da segurança.


Inicialização de função especial & amp; começar.


Na próxima seção do código, você recupera o valor dos indicadores escolhidos, inicializa a lógica de negociação e os critérios do sistema especificados no cabeçalho, percorre as ordens e sinais atuais e, em seguida, verifica os sinais.


O processo da função especial obtém o valor do indicador e passa pelos outros processos. Em seguida, o código verifica pedidos abertos em OrdersAccounting. Em seguida, ele encontra o valor do indicador em GetIndicatorValue.


Exibir EAinfo (); // Retorna o número total de posições já abertas.


MACDnow = iMACD (símbolo (), 0, fast_EMA, slow_EMA, signal_period, MACDprice, 0,1);


Isso retorna o valor do indicador de um MACD que pode ser usado para decisões de compra e venda.


Se não tivermos posições abertas e o MACD ultrapassar a linha 0, podemos introduzir uma ordem de compra no mercado:


Se não temos posições abertas e o MACD acabou de cruzar abaixo da linha 0, podemos introduzir uma ordem de venda no mercado:


Saindo do comércio.


Sair do comércio é muito semelhante a entrar no comércio, mas em sentido inverso. Aqui, se tivermos uma posição longa e o MACD cruzar 2, fechamos a negociação:


Aqui, se tivermos uma posição curta e o MACD cruzar 1, fechamos a negociação:


Agora que você conhece os fundamentos de um EA simples, a melhor coisa a fazer é ir até a comunidade MQL4, onde você pode mergulhar e começar a aprender com milhares de outros traders.


Sobre o autor.


5 comentários.


Principais corretores.


Sobre o ForexCrunch.


rex Crunch é um site sobre o mercado de câmbio, que consiste em notícias, opiniões, análise cambial diária e semanal, análise técnica, tutoriais, noções básicas do mercado forex, publicações de software forex, insights sobre a indústria forex e tudo o que está relacionado Forex


Links Úteis.


Atualizações recentes.


Aviso Legal.


As negociações de câmbio (Forex) carregam um alto nível de risco e podem não ser adequadas para todos os investidores. O risco aumenta à medida que a alavancagem é maior. Os objetivos de investimento, o apetite pelo risco e o nível de experiência do negociador devem ser cuidadosamente ponderados antes de entrar no mercado Forex. Existe sempre a possibilidade de perder algum ou todo o seu investimento / depósito inicial, pelo que não deve investir dinheiro que não possa perder. O alto risco envolvido na troca de moeda deve ser conhecido por você. Por favor, peça conselhos de um consultor financeiro independente antes de entrar neste mercado. Quaisquer comentários feitos no Forex Crunch ou em outros sites que receberam permissão para republicar o conteúdo originado no Forex Crunch refletem as opiniões dos autores individuais e não representam necessariamente as opiniões de qualquer autor autorizado do Forex Crunch. A Forex Crunch não verificou a exatidão ou a base de fato de qualquer reivindicação ou declaração feita por qualquer autor independente: Omissões e erros podem ocorrer. Qualquer notícia, análise, opinião, cotação de preços ou qualquer outra informação contida no Forex Crunch e conteúdo reeditado permitido deve ser tomada como comentário geral do mercado. Isto não é de forma alguma conselho de investimento. A Forex Crunch não aceitará responsabilidade por qualquer dano, perda, incluindo, sem limitação, qualquer lucro ou perda, que possa surgir direta ou indiretamente do uso de tais informações.

Комментариев нет:

Отправить комментарий