Escrita Forex Peritos Conselheiros
MetaTrader 5 - Trading Systems Guia passo a passo para escrever um Expert Advisor em MQL5 para Iniciantes Introdução Este artigo é destinado a iniciantes que desejam aprender a escrever Expert Advisors simples na nova linguagem MQL5. Começaremos pela definição do que queremos que o EA (Expert Advisor) faça e, em seguida, passemos para a forma como queremos que o EA o faça. 1. Estratégia de Negociação O que nossa EA fará: Monitorará um determinado indicador e, quando uma determinada condição for cumprida (ou certas condições forem atendidas), colocará uma negociação (ShortSell ou LongBuy), dependendo da condição presente Que foi cumprido. O acima é chamado de uma estratégia comercial. Antes de escrever uma EA, primeiro você deve desenvolver a estratégia que deseja automatizar na EA. Então, neste caso, vamos modificar a declaração acima para que ela reflita a estratégia que queremos desenvolver em uma EA. Vamos usar um indicador chamado Moving Average com um período de 8 (Você pode escolher qualquer período, mas para o propósito de nossa estratégia, vamos usar 8) Queremos nossa EA para colocar um Long (Buy) comércio quando a média móvel - 8 (para o bem da nossa discussão, vou me referir a ela como MA-8) está aumentando para cima eo preço está perto acima e ele vai colocar um Short (Sell) quando MA-8 está diminuindo para baixo eo preço está perto Abaixo dela. Nós também vamos usar outro indicador chamado Movimento Direcional Médio (ADX) com o período 8 também para nos ajudar a determinar se o mercado está tendendo ou não. Estamos fazendo isso porque só queremos entrar no comércio quando o mercado está tendendo e relaxar quando o mercado está variando (ou seja, não tendências). Para conseguir isso, só colocaremos o nosso comércio (Comprar ou Vender) quando as condições acima forem atendidas eo valor do ADX for maior que 22. Se o ADX for maior que 22, mas diminuindo, ou ADX for menor que 22, não trocaremos, Mesmo que a condição B tenha sido cumprida. Queremos também proteger-nos, definindo uma Stop Loss de 30 pips, e para o nosso objetivo de lucro vamos atingir um lucro de 100 pips. Também queremos que a EA busque oportunidades de BuySell somente quando uma nova barra for formada e também teremos certeza de que abriremos uma posição de compra se as condições de compra forem atendidas e ainda não tivermos uma aberta e abrir uma posição de venda quando As condições de venda são atendidas e ainda não temos uma aberta. Agora desenvolvemos nossa estratégia, agora é hora de começar a escrever nosso código. 2. Escrevendo um Expert Advisor Comece iniciando o MetaQuotes Language Editor 5. Em seguida, pressione CtrlN ou clique no botão New na barra de menus Figura 1. Iniciando um novo documento MQL5 Na janela MQL5 Wizard, selecione Expert Advisor e clique em Next as Mostrado na Fig. 2: Figura 2. Selecionando o tipo de programa Na próxima janela, digite o nome que deseja dar ao EA na caixa Nome. Neste caso, eu escrevi MyFirstEA. Você pode então digitar seu nome na caixa Autor e também o endereço do seu site ou endereço de e-mail na caixa Link (se você tiver um). Figura 3. Propriedades gerais do Expert Advisor Uma vez que queremos ser capazes de alterar alguns dos parâmetros de nossa EA para ver qual dos valores pode nos dar o melhor resultado, vamos adicioná-los clicando no botão Adicionar. Figura 4. Configuração de parâmetros de entrada EA Em nossa EA, queremos ser capazes de experimentar com nossas configurações Stop Loss, Take Profit, Período ADX e Período Médio Movente, por isso vamos defini-las neste momento. Clique duas vezes na seção Nome e digite o nome do parâmetro, clique duas vezes em Tipo para Selecionar o tipo de dados para o parâmetro e clique duas vezes na seção Valor inicial e digite o valor inicial para o parâmetro. Uma vez que você é feito, deve olhar algo como isto: Figura 5. Tipos de dados de parâmetros de entrada de EA Como você pode ver acima, eu selecionei integer (int) tipo de dados para todos os parâmetros. Vamos falar um pouco sobre os tipos de dados. Char: O tipo de char leva 1 byte de memória (8 bits) e permite expressar nos valores de notação binária 28256. O tipo char pode conter valores positivos e negativos. O intervalo de valores é de -128 a 127. uchar: O tipo de inteiro uchar também ocupa 1 byte de memória, bem como o tipo char, mas ao contrário dele uchar destina-se apenas para valores positivos. O valor mínimo é zero, o valor máximo é 255. A primeira letra u no nome do tipo uchar é a abreviatura de unsigned. Curto: O tamanho do tipo curto é de 2 bytes (16 bits) e, consequentemente, permite expressar a faixa de valores igual a 2 à potência 16: 216 65 536. Como o tipo curto é um sinal um e contém ambos Valores positivos e negativos, o intervalo de valores está entre -32 768 e 32.767. Ushort: O tipo curto não assinado é o tipo ushort. Que também tem um tamanho de 2 bytes. O valor mínimo é 0, o valor máximo é 65 535. int: O tamanho do tipo int é 4 bytes (32 bits). O valor mínimo é -2 147 483 648, o máximo é 2 147 483 647. uint: O tipo inteiro não assinado é uint. Demora 4 bytes de memória e permite expressar números inteiros de 0 a 4 294 967 295. long: O tamanho do tipo longo é de 8 bytes (64 bits). O valor mínimo é -9 223 372 036 854 775 808, o valor máximo é 9 223 372 036 854 775 807. ulong: O tipo ulong também ocupa 8 bytes e pode armazenar valores de 0 a 18 446 744 073 709 551 615. A partir de A descrição acima dos vários tipos de dados, os tipos inteiros não assinados não são projetados para armazenar valores negativos, qualquer tentativa de definir um valor negativo pode levar a conseqüências inesperadas. Por exemplo, se você deseja armazenar valores negativos, não é possível armazená-los dentro dos tipos não assinados (por exemplo, uchar, uint, ushort, ulong). De volta ao nosso EA. Olhando para os tipos de dados, você vai concordar comigo que estamos supor para usar char ou uchar tipos de dados, uma vez que os dados que pretendemos armazenar nestes parâmetros são menos de 127 ou 255, respectivamente. Para uma boa gestão da memória, esta é a melhor coisa a fazer. No entanto, para o bem da nossa discussão, ainda vamos manter o tipo int. Quando terminar de configurar todos os parâmetros necessários, clique no botão Concluído eo Editor do MetaQuotes criará o esqueleto do código para você, conforme mostrado na figura a seguir. Permite quebrar o código em várias seções para melhor compreensão. A parte superior (cabeçalho) do código é onde a propriedade da EA é definida. Você pode ver que aqui estão os valores preenchidos no MQL5 Wizard na figura 3. Nesta seção do código, você pode definir parâmetros adicionais como descrição (breve descrição de texto do EA), declarar constantes, incluir arquivos adicionais ou importar funções . Quando uma instrução começa com um símbolo, ele é chamado de uma diretiva de pré-processador e não termina com um ponto-e-vírgula outro exemplo de diretivas de pré-processador inclui: A diretiva define é usada para uma declaração de constantes. É escrito na forma define identifier tokenstring O que isto faz é substituir cada ocorrência de identificador em seu código com o valor tokenstring. Definir ABC 100 definir COMPANYNAME MetaQuotes Software Corp. Ele irá substituir todas as ocorrências de COMPANYNAME com a seqüência MetaQuotes Software Corp. ou ele irá substituir todas as ocorrências de ABC com o char (ou integer) 100 no seu código. Você pode ler mais sobre as diretrizes de pré-processador no Manual MQL5. Vamos agora prosseguir com a nossa discussão. A segunda parte do cabeçalho do nosso código é a seção de parâmetros de entrada: Nós especificamos todos os parâmetros, que serão usados em nossa EA nesta seção. Estas incluem todas as variáveis que serão usadas por todas as funções que estaremos escrevendo em nossa EA. As variáveis declaradas neste nível são denominadas Variáveis Globais porque são acessíveis por todas as funções da EA que podem necessitar delas. Os parâmetros de entrada são parâmetros que só podem ser alterados fora de nossa EA. Podemos também declarar outras variáveis que vamos manipular no curso de nossa EA, mas não estarão disponíveis fora de nossa EA nesta seção. A seguir está a função de inicialização EA. Esta é a primeira função que é chamada quando o EA é iniciado ou anexado a um gráfico e é chamado apenas uma vez. Esta seção é o melhor lugar para fazer algumas verificações importantes, a fim de certificar-se de que o nosso EA funciona muito bem. Podemos decidir saber se o gráfico tem barras suficientes para a nossa EA trabalhar, etc. É também o melhor lugar para obter as alças que estaremos usando para nossos indicadores (ADX e Indicadores de Média Móvel). Para o EA, vamos liberar as alças criadas para nossos Indicadores durante a inicialização nesta seção. Esta função processa o evento NewTick. Que é gerado quando uma nova cotação é recebida para um símbolo. Observe que o Expert Advisor não pode realizar operações comerciais se o uso de Expert Advisors no terminal do cliente não for permitido (Button Auto Trading). Figura 6. Autotrading está ativado A maioria de nossos códigos que implementarão nossa estratégia de negociação, desenvolvida anteriormente, serão escritos nesta seção. Agora que examinamos as várias seções do código para a EA, vamos começar a adicionar carne ao esqueleto. 2.2 PARÂMETROS DE ENTRADA Como você pode ver, adicionamos mais parâmetros. Antes de continuar a discutir os novos parâmetros, vamos discutir algo que você pode ver agora. As duas barras para a frente nos permitem colocar comentários em nossos códigos. Com comentários, somos capazes de saber quais são nossas variáveis, ou o que estamos fazendo nesse momento no nosso código. Ele também dá uma melhor compreensão do nosso código. Existem duas formas básicas de escrever comentários: Este é um comentário de linha única Este é um comentário de várias linhas Este é um comentário de várias linhas. Os comentários de várias linhas começam com o par de símbolos e terminam com um. O compilador ignora todos os comentários ao compilar seu código. O uso de comentários de linha única para os parâmetros de entrada é uma boa maneira de fazer com que nossos usuários EA entendam o que significam esses parâmetros. Nas propriedades EA Input, nossos usuários não verão o parâmetro em si, mas em vez disso, verão os comentários como mostrado abaixo: Figura 7. Parâmetros de entrada do Expert Advisor Agora, de volta ao nosso código Nós decidimos adicionar parâmetros adicionais para o nosso EA. O EAMagic é o número mágico para todas as encomendas da EA. O valor ADX mínimo (AdxMin) é declarado como um tipo de dados duplos. Um duplo é usado para armazenar constantes de ponto flutuante, que contêm uma parte inteira, um ponto decimal e uma parte de fração. Double mysum 123.5678 double b7 0.09876 O Lote para o comércio (Lote) representa o volume do instrumento financeiro que queremos negociar. Em seguida, declaramos outros parâmetros que vamos usar: O adxHandle deve ser usado para armazenar o identificador indicador ADX, enquanto o maHandle armazenará o identificador para o indicador de média móvel. O plsDI, minDI, adxVal são arrays dinâmicos que manterão os valores de DI, - DI e ADX principal (do Indicador ADX) para cada barra no gráfico. O maVal é um array dinâmico que manterá os valores do indicador de média móvel para cada barra no gráfico. By the way, o que são arrays dinâmicos Um array dinâmico é um array declarado sem uma dimensão. Em outras palavras, nenhum valor é especificado no par de colchetes. Uma matriz estática, por outro lado tem suas dimensões definidas no ponto de declaração. Double allbars 20 isso vai levar 20 elementos pclose é uma variável que vamos usar para armazenar o preço Close para a barra que vamos monitorar para a verificação de nossos negócios BuySell. STP e TKP serão usados para armazenar os valores Stop Loss e Take Profit em nossa EA. 2.3. SEÇÃO DE INTIALIZAÇÃO DE EA Aqui obtemos as alças de nosso indicador usando as respectivas funções de indicador. A alça do indicador ADX é obtida usando a função iADX. O gráfico periodtimeframe (0 também significa o cronograma atual no gráfico atual), o período de média ADX para calcular o índice (que nós definimos anteriormente em parâmetros de entrada Seção) como parâmetros ou argumentos. Int iADX (símbolo de cadeia, nome do símbolo ENUMTIMEFRAMES período, período int adxperiod período de média) O indicador de Moving identificador é obtido usando a função iMA. Ele tem os seguintes argumentos: o símbolo do gráfico (que pode ser obtido usando o símbolo symbol () ou NULL para o símbolo atual no gráfico atual), o gráfico periodtimeframe (que pode ser obtido usando period period () O deslocamento do indicador em relação ao gráfico de preços (mudança aqui é 0), o tipo de suavização de média móvel (pode ser Qualquer um dos seguintes métodos de média: Averaging Simples-MODESMA, Exponencial Averaging-MODEEMA, Almovido Averaging-MODESMMA ou Linear-Weighted Averaging-MODELWMA), eo preço utilizado para a média (aqui usamos o preço de fechamento). Int iMA (símbolo da cadeia de caracteres nome do símbolo ENUMTIMEFRAMES período período de tempo int maperiod período de média int mashift mudança horizontal ENUMMAMETHOD tipo de suavização ENUMAPPLIEDPRICE tipo de preço ou alça) Leia o manual MQL5 para obter mais detalhes sobre estas funções de indicador. Ele lhe dará uma melhor compreensão de como usar cada indicador. Tentamos novamente verificar se há algum erro no caso de a função não retornar o identificador com êxito, obteremos um erro INVALIDHANDLE. Usamos a função de alerta para exibir o erro usando a função GetlastError. Decidimos armazenar os valores Stop Loss e Take Profit nas variáveis STP e TKP declaradas anteriormente. Por que estamos fazendo isso É porque os valores armazenados nos parâmetros INPUT são somente leitura, eles não podem ser modificados. Então aqui queremos ter certeza de que nossa EA funciona muito bem com todos os corretores. Dígitos ou Dígitos () r retorna o número de dígitos decimais que determinam a precisão do preço do símbolo do gráfico atual. Para um gráfico de preços de 5 dígitos ou 3 dígitos, multiplicamos tanto o Stop Loss eo Take Profit por 10. 2.4. SEÇÃO DE DEINTIALIZAÇÃO DE EA Uma vez que esta função é chamada sempre que o EA é desativado ou removido de um gráfico, vamos liberar todos os identificadores de indicadores que foram criados durante o processo de inicialização aqui. Criamos duas alças, uma para o indicador ADX e outra alça para o indicador de média móvel. Usaremos a função IndicatorRelease () para realizar isso. A função remove um identificador de indicador e libera o bloco de cálculo do indicador, se não for utilizado. 2.5 A SEÇÃO DE ONTICK A primeira coisa que temos a fazer aqui é verificar se temos barras suficientes no gráfico atual. Podemos obter as barras totais na história de qualquer gráfico usando a função Barras. O símbolo (que pode ser obtido usando o símbolo ou o símbolo (), leva dois parâmetros, o símbolo atual para o gráfico atual no qual o EA está anexado) e o período ou período do gráfico atual (pode ser obtido usando o período Ou Period ().Esses dois retornarão o cronograma do gráfico atual no qual o EA está anexado). Se o total de barras disponíveis for inferior a 60, queremos que o nosso EA relaxe até termos barras suficientes disponíveis no gráfico. A função Alerta exibe uma mensagem em uma janela separada. Ele toma quaisquer valores separados por vírgulas como parâmetrosargumentos. Neste caso, temos apenas um valor de cadeia. O retorno sai da inicialização de nossa EA. O Expert Advisor irá realizar operações comerciais no início de uma nova barra, por isso é necessário para resolver o problema com a nova identificação de barras. Em palavras de ordem, queremos ter certeza de que o EA não verifica as configurações de LongShort em cada tick, só queremos que o EA verifique posições LongShort quando houver uma nova barra. Começamos por declarar uma variável de data e hora estática OldTime. Que irá armazenar o Bar tempo. Declaramos que ele é estático porque queremos que o valor seja mantido na memória até a próxima chamada da função OnTick. Então nós poderemos comparar seu valor com a variável de NewTime (também do tipo de dados de datetime), que é uma disposição de um elemento para prender o tempo novo da barra (atual). Também declaramos uma variável de tipo de dados bool IsNewBar e define seu valor como false. Isso é porque queremos que seu valor seja VERDADEIRO somente quando tivermos uma nova barra. Usamos a função CopyTime para obter a hora da barra atual. Ele copia o tempo de barra para a matriz NewTime com um elemento se for bem-sucedido, comparamos o tempo de uma nova barra com o tempo de barra anterior. Se os tempos não forem iguais, isso significa que temos uma nova barra, e nós definimos a variável IsNewBar como TRUE e salva o valor do tempo atual da barra para a variável OldTime. A variável IsNewBar indica que temos uma nova barra. Se for FALSE, terminaremos a execução da função OnTick. Dê uma olhada no código que ele verifica para a execução do modo de depuração, ele irá imprimir a mensagem sobre os tempos barra quando o modo de depuração, vamos considerá-lo ainda mais. A próxima coisa que queremos fazer aqui é verificar se temos barras suficientes para trabalhar. Por que repetir Nós apenas queremos ter certeza de que o nosso EA funciona corretamente. Note-se que enquanto a função OnInit é chamada apenas uma vez quando o EA é anexado a um gráfico, a função OnTick é chamada sempre que existe uma nova marca (cotação). Você observa que nós o fizemos outra vez diferentemente aqui. Decidimos armazenar as barras totais na história que obtivemos a partir da expressão em uma nova variável, Mybars. Declarado na função OnTick. Esse tipo de variável é uma variável local, ao contrário da variável que declaramos na seção INPUT PARAMETERS do nosso código. Enquanto as variáveis, declaradas na seção Parâmetros de Entrada de nosso código, estão disponíveis para todas as funções, dentro do nosso código que pode precisar delas, as variáveis declaradas dentro de uma única função são limitadas e disponíveis somente para essa função. Não pode ser usado fora dessa função. Em seguida, declaramos algumas variáveis de tipos de estrutura MQL5 que serão usadas nesta seção de nossa EA. MQL5 tem um bom número de construído em estruturas que torna as coisas muito fácil para desenvolvedores EA. Vamos tomar as estruturas uma após a outra. Esta é uma estrutura usada para armazenar os últimos preços dos símbolos. Struct MqlTick datetime time Tempo da última atualização de preços double bid Preço de lance atual double ask Preço atual do último preço último Último volume ulong volume Volume do último preço Qualquer variável declarada para ser do tipo MqlTick pode facilmente ser Usado para obter os valores atuais de Ask, Bid, Last e Volume depois de chamar a função SymbolInfoTick (). Então declaramos latestprice como um tipo MqlTick para que possamos usá-lo para obter os preços Ask e Bid Essa estrutura é usada para executar todos os pedidos de comércio para uma operação comercial. Ele contém, em sua estrutura, todos os campos necessários para a realização de um acordo comercial. Struct MqlTradeRequest ENUMTRADEREQUESTACTIONS ação Tipo de operação de comércio ulong magic ID do Assessor de Especialista (número mágico) ordem ulong Símbolo de bilhete de bilhete símbolo Símbolo de comércio volume duplo Volume pedido para um negócio em lotes preço duplo Preço duplo stoplimit StopLimit nível da ordem sl duplo Stop Loss level of the Order double tp Take Nível de lucro da ordem ulong desvio Máximo desvio possível do preço pedido ENUMORDERTYPE tipo Tipo de ordem ENUMORDERTYPEFILLING typefilling Tipo de execução da ordem ENUMORDERTYPETIME typetime Tempo de execução da ordem datetime expiration Tempo de expiração da ordem (para as ordens do tipo ORDERTIMESPECIFIED) Variável declarada para ser do tipo MqlTradeRequest pode ser usada para enviar ordens para nossas operações comerciais. Aqui nós declaramos mrequest como um tipo MqlTradeRequest. O resultado de qualquer operação comercial é retornado como uma estrutura predefinida especial do tipo MqlTradeResult. Qualquer variável declarada para ser de tipo MqlTradeResult será capaz de acessar os resultados de solicitação de comércio. Struct MqlTradeResult uint retcode Operação código de retorno ulong negócio Bilhete de negócio, se for executado ulong ordem Bilhete de ordem, se for colocado volume dobro Volume de negócio, confirmado pelo preço dobro do corretor Preço do negócio, confirmado pelo corretor lance dobro O preço (Open, Close, High, Low), o tempo, os volumes de cada barra eo spread para um símbolo é armazenado nesta estrutura. Qualquer matriz declarada para ser do tipo MqlRates pode ser usada para armazenar o preço, volumes e histórico de propagação de um símbolo. Struct MqlRates datetime time Período start time double abrir Preço aberto double high O preço mais alto do período double low O preço mais baixo do período double fechar Close price longo tickvolume Tick volume int spread Espalhar long realvolume Volume de comércio Aqui nós declaramos um array mrate que Será usado para armazenar essas informações. Em seguida, decidimos definir todas as matrizes que estaremos usando para armazenar detalhes Bares como série. Isso é para garantir que os valores que serão copiados para os arrays serão indexados como o timeseries, ou seja, 0, 1, 2, 3, (para corresponder com o índice de barras. Portanto, usamos a função ArraySetAsSeries (). ArraySetAsSeries (array void array por referência bool set true denota ordem inversa de indexação) Deve-se notar que isso também pode ser feito uma vez na seção de inicialização do nosso código. No entanto, eu decidi mostrar isso neste momento por causa Da nossa explicação. Nós agora usamos a função SymbolInfoTick para obter a última cotação de preços. Essa função leva dois argumentos gráfico símbolo e a variável de estrutura MqlTick (latestprice). Novamente, se houver erro, nós relatamos. Próximo copiamos as informações sobre As últimas três barras em nossa matriz de tipo Mqlrates usando a função CopyRates. A função CopyRates é usada para obter dados de histórico da estrutura MqlRates de um especificado Símbolo-Período em quantidade especificada em uma matriz de tipo MqlRates int CopyRates (string symb Olname. Nome do símbolo ENUMTIMEFRAMES cronograma. Período int startpos. Posição de início int count. Contagem de dados para copiar MqlRates ratearray matriz de destino para copiar) O nome do símbolo é obtido usando o símbolo. O período de tempo atual é obtido usando o período. Para a posição inicial, vamos começar a partir da barra atual, Barra 0 e vamos contar apenas três barras, barras 0, 1 e 2. O resultado será armazenado em nosso array, mrate. A matriz de matrizes agora contém todos os preços, tempo, volumes e informações de propagação para as barras 0. 1 e 2. Portanto, para obter os detalhes de qualquer barra, vamos usar o seguinte: por exemplo, podemos ter as seguintes informações sobre cada barra : Mrate1.time Barra 1 Hora de início mrate1.open Barra 1 Preço aberto mrate0.high Barra 0 (barra atual) preço alto, etc. Em seguida, copiamos todos os valores dos indicadores nos arrays dinâmicos que declaramos usando a função CopyBuffer. Int CopyBuffer (identificador de indicador de int, identificador de indicador int buffernum, número de buffer de indicador int startpos, posição de início int count, quantidade para copiar matriz de destino de buffer duplo para copiar) O identificador de indicador é o identificador que criamos na seção OnInit. Relativamente aos números de memória intermédia, o indicador ADX tem três (3) buffers: O indicador de média móvel tem apenas um (1) buffer: copiamos a barra actual (0) para as duas últimas barras. Portanto, a quantidade de registros a copiar é 3 (barras 0, 1 e 2). O buffer é as matrizes dinâmicas de destino que anteriormente declaramos adxVal, plsDI, minDI e maVal. Como você pode ver aqui novamente, tentamos capturar qualquer erro que possa ocorrer no processo de cópia. Se houver erro, não há necessidade de ir mais longe. É importante observar que o CopyBuffer () e a função CopyRates () retorna o número total de registros copiados em sucesso enquanto retorna -1 em caso de erro. É por isso que estamos verificando um valor menor que 0 (zero) nas funções de verificação de erros aqui. Neste ponto, queremos verificar se já temos uma posição de compra ou venda aberta, em palavras de ordem, queremos ter certeza de que temos apenas um vender ou comprar comércio aberto em um momento. Não queremos abrir uma nova compra se já tivermos uma, e não queremos abrir uma nova venda se já tivermos uma aberta. Para conseguirmos, em primeiro lugar, declararemos duas variáveis de tipo de dados bool (Buyopened e Sellopened) que manterão um valor TRUE se já tivermos uma posição aberta para Buy ou Sell. Usamos a função de comércio PositionSelect para saber se temos uma posição aberta. Esta função retorna TRUE se tivermos uma posição aberta e FALSE se não tivermos nenhuma. É preciso, como parâmetro principal do argumento, o símbolo (par de moedas) que queremos verificar. Aqui, usamos o símbolo porque estamos verificando o símbolo atual (par de moedas). Se esta expressão retorna TRUE, então queremos verificar se a posição aberta é uma Compra ou uma Venda. Usamos a função PositionGetInteger para isso. Ele nos dá o tipo de posição aberta quando usá-lo com o modificador POSITIONTYPE. Retorna o identificador de tipo de posição que pode ser POSITIONTYPEBUY ou POSITIONTYPESELL No nosso caso, usamos para determinar qual da posição que já abrimos. Se for uma Venda, armazenamos um valor VERDADEIRO em Sellopened e se é uma Compra, armazenamos um valor VERDADEIRO em Buyopened. Nós poderemos usar essas duas variáveis mais tarde quando estivermos checando as condições de Venda ou Compra mais tarde em nosso código. Agora é hora de armazenar o preço próximo para o bar que estaremos usando para a nossa instalação BuySell. Lembre-se de que declaramos uma variável para aquela anterior. Tendo feito isso, vamos agora prosigamos para a próxima etapa. Agora é hora de começar a verificar uma oportunidade de Compra. Vamos analisar a expressão acima, pois ela representa a estratégia que desenhamos anteriormente. Estamos declarando uma variável de tipo bool para cada uma de nossas condições que devem ser atendidas antes que uma ordem possa ser colocada. Uma variável de tipo bool só pode conter TRUE ou FALSE. Assim, nossa estratégia de compra foi dividida em quatro condições. Se alguma das condições for cumprida ou satisfeita, então um valor de TRUE é armazenado em nossa variável de tipo bool, caso contrário, um valor de FALSE será armazenado. Vamos olhar para eles um por um. Aqui nós estamos olhando os valores MA-8 nas barras 0, 1 e 2. Se o valor de MA-8 na barra atual for maior que seu valor na Barra 1 anterior e também o valor MA-8 na Barra 1 for maior que seu valor na Barra 2. Isso significa que MA-8 está aumentando para cima. Isso satisfaz uma de nossas condições para uma configuração de compra. Esta expressão está verificando se o preço de Bar 1 Close é maior que o valor de MA-8 no mesmo período (período Bar 1). Se o preço for maior, então nossa segunda condição também estará satisfeita, então podemos verificar se há outras condições. No entanto, se as duas condições que acabamos de considerar não foram cumpridas, então não haverá necessidade de verificar outras condições. É por isso que decidimos incluir as expressões seguintes dentro destas duas condições iniciais (expressões). Agora queremos verificar se o valor atual do ADX (valor ADX na Barra 0) é maior que o valor mínimo ADX declarado nos parâmetros de entrada. Se essa expressão for verdadeira, ou seja, o valor atual do ADX é maior que o valor mínimo exigido, também queremos ter certeza de que o valor plusDI é maior que o valor minusDI. Isto é o que conseguimos na próxima expressão Se todas essas condições forem atendidas, ou seja, se elas retornarem true, então nós queremos ter certeza de que não abriremos uma nova posição Buy se já tivermos uma. Agora é hora de verificar o valor da variável Buyopened que declaramos anteriormente em nosso código. Se Buyopened for verdade, não queremos abrir outra posição de compra, portanto, exibimos um alerta para nos informar e depois retornar para que nosso EA agora aguarde o próximo Tick. No entanto, se Buyopened for FALSE, então prepararemos nossos registros usando a variável de tipo MqlTradeRequest (mrequest) que declaramos anteriormente para enviar nossa ordem. A ação aqui, que é o tipo de operação comercial, é TRADEACTIONDEAL porque estamos colocando uma ordem comercial para uma execução imediata. Se estamos modificando uma ordem, então usaremos TRADEACTIONMODIFY. Para excluir uma ordem, usaremos TRADEACTIONREMOVE. Utilizamos o nosso último tipo de preço MqlTick para obter o preço mais recente Ask. O preço de perda de Stop de ordem é obtido subtraindo nosso StopLoss em pontos do preço de Ask enquanto o preço de lucro de compra de ordem é obtido adicionando nosso TakeProfit em pontos ao preço de Ask. Você também observará que usamos a função NormalizeDouble para os preços Ask, StopLoss e TakeProfit, é uma boa prática sempre normalizar esses preços para o número de dígitos do par de moedas antes de enviá-lo para o servidor comercial. O símbolo é o símbolo atual (Símbolo ou Símbolo ()). O tipo de ordem é o tipo de ordem que estamos colocando, aqui estamos colocando uma ordem de compra ORDERTYPEBUY. Para uma ordem de venda, será ORDERTYPESELL. A ordem de preenchimento tipo é o tipo de execução de ordem ORDERFILLINGFOK significa que o negócio pode ser executado exclusivamente com um volume especificado ao preço igual ou melhor do que o preço especificado ordem. Se não houver volume suficiente de ofertas no símbolo da ordem, a ordem não será executada. A função OrderSend () leva dois argumentos, a variável de tipo MqlTradeRequest e a variável de tipo MqlTradeResult. Como você pode ver, nós usamos nossa variável de tipo MqlTradeRequest e a variável de tipo MqlTradeResult na colocação de nossa ordem usando OrderSend. Tendo enviado a nossa encomenda, vamos agora utilizar a variável de tipo MqlTradeResult para verificar o resultado da nossa encomenda. Se nossa ordem for executada com sucesso, nós queremos ser informados, e se não, nós queremos saber demasiado. Com o MqlTradeResult tipo variável mresult podemos acessar o código de retorno Operação e também o número do bilhete de ordem se a ordem é colocada. O código de retorno 10009 mostra que a solicitação OrderSend foi concluída com êxito, enquanto 10008 mostra que nossa ordem foi colocada. É por isso que verificamos qualquer um desses dois códigos de retorno. Se tivermos qualquer um deles, temos a certeza de que a nossa encomenda foi concluída ou foi colocada. Para verificar uma Oportunidade de Venda, verificamos o oposto do que fizemos para a Oportunidade de Compra, exceto para o nosso ADX que deve ser maior que o valor mínimo especificado. Assim como fizemos na seção de compra, estamos declarando uma variável de tipo bool para cada uma de nossas condições que devem ser atendidas antes que uma ordem possa ser colocada. Uma variável de tipo bool só pode conter TRUE ou FALSE. Assim, nossa estratégia de venda foi dividida em quatro condições. Se alguma das condições for cumprida ou satisfeita, então um valor de TRUE é armazenado em nossa variável de tipo bool, caso contrário, um valor de FALSE será armazenado. Vamos olhar para eles um por um, como fizemos para a seção Comprar Aqui estamos olhando para os valores MA-8 nas barras 0, 1 e 2. Se o valor de MA-8 na barra atual for menor que seu valor na Barra 1 anterior e também o valor MA-8 na Barra 1 for menor que seu valor na Barra 2. Isso significa que MA-8 está diminuindo para baixo. Isso satisfaz uma de nossas condições para uma configuração de venda. This expression is checking to see if Bar 1 Close price is lower than the value of MA-8 at the same period (Bar 1 period). If the price is lower, then our second condition has also been satisfied, then we can check for other conditions. However, if the two conditions we have just considered were not met, then there will be no need to check other conditions. That is why we decide to include the next expressions within these two initial conditions (expressions). Now we want to check if the current value of ADX (ADX value on Bar 0) is greater than the Minimum ADX value declared in the input parameters. If this expression is true, that is, the current value of ADX is greater than the Minimum required value we also want to be sure that the MinusDI value is greater than the plusDI value. This is what we achieved in the next expression If these conditions are met, that is, if they return true, then we want to be sure that we do not open a new Buy position if we already have one. It is now time to check the value of the Buyopened variable we declared earlier in our code. If Sellopened is true, we do not want to open another Sell position, so, we display an alert to inform us and then return so that our EA will now wait for the next Tick. However, if Sellopened is FALSE, then we setup our Sell trade request as we did for Buying order. The major difference here is the way we calculated our stop loss price and take profit price. Also since we are selling, we sell at the Bid price that is why we used our MqlTick type variable latestprice to get the latest bid price. The other type here, as explained earlier, is ORDERTYPESELL. Also here, we used the NormalizeDouble function for the Bid price, the StopLoss and TakeProfit values, it is good practice to always normalize these prices to the number of digits of currency pair before sending it to the trade server. Just as we did for our Buy order, we must also check if our Sell order is successful or not. So we used the same expression as in our Buy order. 3. Debugging and Testing our Expert Advisor At this point, we need to test our EA to know it our strategy works or not. Also, it is possible that there are one or two errors in our EA code. This will be discovered in the next step. Debugging our code helps us to see how our code performs line by line (if we set breakpoints) and there and then we can notice any error or bug in our code and quickly make the necessary corrections before using our code in real trade. Here, we are going to go through the step by step process of debugging our Expert Advisor, first of all, by setting breakpoints and secondly, without breakpoints. To do this, Make sure you have not closed the Editor. First of all, let us select the chart we want to use to test our EA. On the Editor Menu bar, click on Tools and click on Options as shown below: Figure 8. Setting Debugging options Once the Options window appears, select the currency pair, and the periodtimeframe to use and click the OK button: Before we start the debugger, let us set breakpoints. Breakpoints allow us to monitor the behaviorperformance of our code at certain selected locations or lines. Rather than running through all the code at once, the debugger will stop whenever it see a breakpoint, waiting for your net action. By this we will be able to analyze our code and monitor its behavior as it reaches every set break-points. We will also be able to evaluate the values of some of our variables to see if things are actually the way we envisaged. To insert a breakpoint, go to the line in your code where you want to set the breakpoint. By the left hand side, on the gray field near the border of the code line, double-click and you will see a small round blue button with a white square inside it. Or on the alternative, place the cursor of your mouse anywhere on the code line where you want the breakpoint to appear and press F9 . To remove the breakpoint, press F9 again or double-click on it. Figure 10. Setting a breakpoint For our code, we are going to set breakpoint on five different lines. I will also label them form 1 to 5 for the sake of explanation. To continue, set breakpoint at the seven code lines as shown in the figure below. Breakpoint 1 is the one we have created above. Figure 11. Setting additional breakpoints Once we have finished setting our breakpoints, we are now set to start debugging our code. To start the debugger, press F5 or click the green button on the Toolbar of the MetaEditor: Figure 12. Starting the Debugger The first thing the editor does is to compile the code, if there is any error at the point, it will display it and if no error, it will let you know that the code compiled successfully. Figure 13. Compilation Report Please note that the fact that the code compiled successfully does not mean there may not be errors in your code. Depending on how your code is written, there may be runtime errors. For example, if any of our expressions does not evaluate correctly due to any little oversight, the code will compile correctly but may not run correctly. Too much of the talk, lets see it in action Once the debugger has finished compiling the code, it takes you to the trading terminal, and attach the EA to the chart you have specified on the MetaEditor Options settings. At the same time, it shows you the Input parameters section of the EA. Since we are not adjusting anything yet, just click the OK button. Figure 14. Expert Advisor Input Parameters for Debugging You will now see the EA clearly on the top-right hand corner of the chart. Once it starts the OnTick() . it will stop as soon as it gets to our breakpoint 1. Figure 15. Debugger stops at the first breakpoint You will notice a green arrow at that code line. That tells you that previous code line had been executed we are now ready to execute the present line. Let me make some explanations before we proceed. If you look at the Editors Tool Bar, you will observe that the three buttons with curved arrows which were earlier grayed out are now activated. This is because we are now running the debugger. These buttonscommands are used to step through our code (Step into, Step over or Step out) Figure 16. Step into command The Step Into is used to go from one step of the program execution into the next step, entering into any called functions within that code line. Click on the button or press F11 to invoke the command. (We will use this command in our Step-by-Step debugging of our code.) Figure 17. Step over command The Step over . on the other hand does not enter into any called function within that code line. Click on the button or press F10 to invoke the command Figure 18. Step out command To execute a program step that is one level higher, you click this button or press ShiftF11 . Also, at the lower part of the Editor, you will see the Toolbox window . The Debug tab in this window has the following headings: File : This displays the name of the file been called Function : This displays the present function from the file been called Line : This displays the number of the code line in the file from which the function is called. Expression : This is where you can type the name of any expressionvariable you are interested in monitoring from our code. Value : This will display the value of the expressionvariable we typed at the Expression area. Type : This will display the data type of the expressionvariable been monitored. Back to our debugging process The next thing we want to do is now to type in the variablesexpressions from our code that we are interested in monitoring. Make sure you only monitor the variablesexpressions that really matters in your code. For our example, we will monitor the following: OldTime (old bar time) NewTime0 (current bar time) IsNewBar (flag that indicates the new bar) Mybars (Total bars in History) Our EA depends on it You can add other ones like the ADX values, the MA-8 values, etc. To add the expressionvariable, double-click under the Expressions area or right-click under the Expressions area and select Add as shown in the figure above. Type the expressionvariable to monitor or watch. Figure 19. The expressions watching window Type all the necessary variablesexpressions Figure 20. Adding expressions or variables to watch If the variable hasnt been declared yet, its type is Unknown identifier (except the static variables). Now, lets move on Figure 21. Step into command in action Click the Step into button or press F11 and observe what happens. Keep on pressing this button or F11 until you get to breakpoint no 2 . continue until you get to breakpoint no 4 as shown below and observe the expressions watching window. Figure 22. Watching the expressions or variables Figure 23. Watching the expressions or variables Figure 24. Watching the expressions or variables Once there is a new tick, it will return to the fist code line of the OnTick() function. And all the values of our variablesexpression will now be reset because this is a new tick except if any of them is declared as a static variable. In our case we have one static variable OldTime. Figure 25. Values of variables on NewTick event To go over the process again, continue pressing the F11 key and keep monitoring the variables at the expressions watching window. You can stop the debugger and then remove all the breakpoints. As we see, in Debug mode it prints the message We have new bar here. . Figure 26. Expert Advisor prints the message in Debug mode Start the debugging process again but this time without breakpoints. Keep watching at every tick and if any of our BuySell condition is met, it will place a trade and since we have written our code to tell us if an order is placed successful or otherwise, we will see an alert. Figure 27. Expert Advisor places trade during debugging I think you can leave the EA to work for a few more minutes while you take a coffee. Once you are back and you have made some money ( just kidding ), then click the STOP (Red) button on the MetaEditor to stop debugging. Figure 28. Stopping the debugger What we have actually done here is to see that our EA only checks for a trade at the opening of a new Bar and that our EA actually works. There is still a lot of room for adjustments to our EA code. Let me make it clear, at this point that, the Trading terminal must be connected to the internet, otherwise, debugging will not work because the terminal will not be able to trade. 3.2 TESTING OUR EA STRATEGY At this point we now want to test our EA using the Strategy Tester built into the Trading Terminal. To start the Strategy Tester, press CONTROLR or click the View menu on the Terminal Menu Bar and click on Strategy Tester as shown below Figure 26. Starting the Strategy Testing The Tester (Strategy Tester) is shown at the lower part of the terminal. For you to see all the Testers settings, you need to expandresize it. To do this, move your mouse pointer to the point shown by the red arrow (as shown below) Figure 27. The Strategy Tester window The mouse pointer changes to a double-end arrow, hold down the mouse and drag the line upwards. Stop when you discover that you can see everything on the settings tab. Figure 28. The Strategy Tester Settings Tab Select the EA you want to test Select the Currency pair to use for the test Select the PeriodTimeframe to use for the test Select Custom Period and set the dates in 5 Set the dates for the custom period to be used for the test Execution is Normal Select the deposit amount in USD to be used for the test Set Optimization to Disable (We are not optimizing now, we just want to test) Click this button when you are ready to start test. Before we click the Start button, lets look at the other tabs on the Tester The processor used by the Tester for the Test. Depending on your Computers processor type. Mine is only one (1) core processor. Figure 29. The Strategy Tester Agents tab Once the agent, you will see something similar to the figure below Figure 30. The Strategy Tester Agents tab during a test This is where all the events going on during the test period is displayed Figure 31. The Strategy Tester Journal tab showing trade activities This is where you can specify the input parameters for the EA. Figure 32. The Strategy Tester Inputs tab If we are optimizing our EA, then we will need to set the values in the circled area. The Start is the values you want the Tester to begin with. The Step is the increment rate for the value you selected, and The Stop is the value at which the Tester will stop incrementing the value for that parameter. However, in our case we are not optimizing our EA, so we will not need to touch that for now. Once everything is set, we now go back to the Settings tab and click the Start button. Then the tester begins its work. All you need to do now is to go and take another cup of coffee if you like, or, if you are like me, you may want to monitor every event, then turn to the Journal tab. Once you begin to see messages about orders been sent on the Journal Tab, you may then wish to turn to a NEW tab named Graph which has just been created. Once you switch to the Graph tab, you will see the graph keep on increasing or decreasing as the case may be depending on the outcome of your trades. Figure 33. The graph result for the Expert Advisor Test Once the test is completed, you will see another tab called Results . Switch to the Results tab and you will see the summary of the test we have just carried out. Figure 34. The Strategy Tester Results tab showing test results summary You can see the total Gross Profit, Net Profit, total trades total loss trades and many more. Its really interesting to see that we have about USD 1,450.0 within the period we selected for our test. At least we have some profit. Let me make something very clear to you here. You will discover that the settings for the EA parameters that you see in the Strategy tester is different from the initial settings in the Input parameters of the EA. I have just demonstrated to you that you can change any of those input parameters to get the best out of your EA. Instead of using a period of 8 each for the Moving Average and ADX, I changed it to 10 for Moving Average and 14 for ADX. I also change the Stop Loss from 30 to 35. Last but not the least, I decided to use 2 Hour timeframe. Remember, this is the Strategy Tester. If you want to view a complete report of the test, then right-click on anywhere in the Results tab, you will see a menu. From this menu, Select Save as Report . Figure 35. Saving the result of the test The save dialog window will appear, type a name for your report (if you want, otherwise leave the default name) and click the save button. The whole report will be saved in HTML format for you. To view the chart for the test that was carried out, click Open Chart and you will see the chart displayed Figure 36. The chart showing the test Thats it, we have successfully written and tested our EA and we now have a result to work with. You can now go back to the strategy tester Settings tab and make the test for other TimeframesPeriod. I want you to carry out the test using different currency pairs, different timeframes, different Stop Loss, different Take profit and see how the EA performs. You can even try new Moving Average and ADX values. As I said earlier, that is the essence of the Strategy tester. I will also like you to share your results with me. Conclusion In this step by step guide, we have been able to look at the basic steps required in writing a simple Expert Advisor based on a developed trading strategy. We have also looked at how we check our EA for errors using the debugger. We also discussed how to test the performance of our EA using the Strategy Tester. With this, we have been able to see the power and robustness of the new MQL5 language. Our EA is not yet perfect or complete as many more adjustments must still be made in order to used it for real trading. There is still more to learn and I want you to read the article over again together with the MQL5 manual, and try everything you have learn in this article, I can assure you that you will be a great EA developer in no distant future. Forex Expert Advisor Inexperienced beginners are always interested in finding a trade robot that does all the work, so that the trader does not have to lift a finger. Esta idéia foi perseguida por todos os comerciantes da era da computação. O ônus da responsabilidade pela tomada de decisão, que desgasta os nervos de um comerciante, agora cai diretamente sobre os consultores de negociação forex especialista. O que é um Consultor Especialista Forex O consultor perito forex é um programa capaz de realizar no terminal qualquer ação seguindo as instruções de um comerciante, sem seu envolvimento direto. Todas as tarefas são realizadas automaticamente ou mecanicamente, razão pela qual os consultores são chamados de especialistas ou sistemas de negociação mecânica (MTS). Simplificando, este é um programa de envio de aplicações para um corretor sem qualquer intervenção por parte do comerciante. Você instala um consultor de especialistas de lucro forex para a plataforma de negociação on-line forex existente, que está conectado ao corretor do servidor, ajustar todas as configurações eo consultor começará a negociação de acordo com uma estratégia predefinida. Benefícios de Forex Expert Advisors Do ponto de vista psicológico, o consultor especialista forex é insubstituível. Um comerciante diminui a responsabilidade pela tomada de decisão, e os comércios tornam-se menos estressante. O trader não precisa ter um profundo conhecimento de análise técnica e fundamental, já que todos os cálculos já estão incluídos no programa. Além disso, o conselheiro é capaz de lidar com os sinais comerciais, mesmo quando o comerciante está ausente do local de trabalho. Escrevendo um Forex Expert Advisor Forex Expert Advisors para MetaTrader4 são escritos na linguagem de programação MQL4. Este idioma foi desenvolvido pelo fabricante do terminal de negociação especificamente para escrever conselheiros especialistas. Permite que o comerciante programe o sistema de troca sem nenhuma dificuldade, que negociará no modo em linha dia e noite. Programadores familiarizados com este idioma não terá qualquer dificuldade em fazer o trabalho. Para usuários comuns esta será uma tarefa mais difícil. Forex Expert Advisors Indicadores Você pode criar seus próprios indicadores técnicos para um trabalho mais eficaz pelos conselheiros. Eles serão uma grande adição aos indicadores existentes no terminal MetaTrader4. O objetivo de usar indicadores de consultores é implementar funções analíticas e gerar sinais de negociação. Built-in e Own Forex Expert Advisors O terminal de negociação MetaTrader4 tem vários consultores especializados. Eles têm a função de um sistema de comércio independente e dub os sinais comerciais. Eles são muito populares entre os iniciantes e foram criados especificamente para demonstrar as habilidades de programação do MetaTrader 4 Client Terminal. As possibilidades em criar seu próprio conselheiro são simplesmente deslumbrantes. Você pode definir várias ordens por preço e tempo, abrir automaticamente as ordens de balcão, etc Estes programas são capazes de substituir o comerciante em seu local de trabalho. Testing Forex Expert Advisors O terminal de negociação não só pode escrever conselheiros, mas também verificar-los em dados históricos antes de usar, que é outra característica única de usar os conselheiros. O teste é muito útil, uma vez que ajuda a medir a capacidade ea eficácia de um sistema de negociação mecânica em dados históricos, estimando as chances de lucros e erros futuros. Se você testou o consultor e sabe como ele vai se comportar em diferentes condições de mercado, você pode começar a operar sem precisar intervir. Para isso, o terminal possui uma janela especial onde também é possível otimizar os parâmetros de entrada dos consultores. Parting palavras para iniciantes Iniciantes podem pensar que a negociação com conselheiros é muito complicado. Não é tão. Após cerca de um mês qualquer comerciante pode começar a programar seu próprio sistema de negociação automática. Mesmo se você está hesitante sobre a confiança de seu dinheiro para um programa de computador, você pode configurar o conselheiro para cinco alertas de som, o que facilitará muito o seu trabalho para que você gaste menos tempo na análise gráfica esperando um sinal para abrir e fechar posições. Você pode encontrar muitos conselheiros na Internet, mas obter um rentável é muito difícil, e usando cada um é exaustivo e pode resultar em esgotar o seu depósito. É por isso que você é aconselhado contra a compra do primeiro conselheiro que você encontrar. Muitos conselheiros demonstram excelentes resultados quando testados em um par de moedas, mas apresentam um desempenho ruim em outros. É melhor usar o conselheiro para os instrumentos que você testou. QuotVIP clientquot program Obtenha privilégios excepcionais juntando-se ao nosso programa VIP. Crie seu próprio robô comercial em 5 minutos, mesmo se você donrsquot ter habilidades de programação stock. roboforex Acesso direto de 100 USD para o mercado de ações real. QuotRebates (Cashback) quot program Comércio e receber descontos mensais para a sua conta Até 10 no saldo da conta Receba lucros adicionais para o volume de negociação que você faz. Aviso de Risco Existe um alto nível de risco envolvido ao negociar produtos alavancados como ForexCFDs. Você não deve arriscar mais do que você pode dar ao luxo de perder, é possível que você pode perder todo o montante do saldo da sua conta. Você não deve negociar ou investir a menos que você compreenda plenamente a verdadeira extensão de sua exposição ao risco de perda. Ao negociar ou investir, você deve sempre levar em consideração o nível de sua experiência. Os serviços de comércio de cópias implicam riscos adicionais para o seu investimento devido à natureza desses produtos. If the risks involved seem unclear to you, please apply to an outside specialist for an independent advice. Advanced Guide To MetaTrader 4 - Expert Advisors Expert Advisor Creation Expert Advisors are programs that allow automation of the analytical and trading processes in the MT4 platform. To create an Expert Advisor (or Expert), the expert editing program - MetaEditor - has to be opened from within the MT4 platform. To open the editor (see Figure 1):13 In the Navigator window, right-click on Expert Advisors and select Create or In the Main Menu gt Tools gt MetaQuotes Language Editor or Click on the MetaEditor icon in the Standard Toolbar: or Press F4 on the computer keyboard. 13 13 Figure 1 - There are several ways to open the MetaEditor. 13Any of these actions will open the Expert Creation Wizard. The Wizard can be used to create Expert Advisors, Custom Indicators, Scripts and DLLs. To create an Expert Advisor, select Expert Advisor and click Next to continue, as shown in Figure 2. 13 Figure 2 - MT4s Expert Advisor Wizard is used to create Expert Advisors, Custom Indicators, Scripts and Libraries (DLLs). 13The General Properties of the Expert Advisor window appears. Here, traders must specify the: Name - A user-created name for the Expert. Developer - The developers name. Link - To the developers website, if applicable. Inputs - the list of Expert inputs 13 13To add a new parameter to the Inputs field, press the Add button. For each Parameter, the trader must specify the Name, Type and Initial Value, as shown in Figure 3. To delete a parameter, highlight the parameter and press Delete. These become the Input Variables within the Expert. Once all the inputs have been listed, click Finish to continue.13 Figure 3 - Create the input variables by identifying Name, Type and Initial Value. 13A new window appears in the programming environment. The Experts name appears at the top of the window, and the previously entered input parameters are listed near the top of the code, as shown in Figure 4. 13 Figure 4 - The Expert name and inputs appear in the code window. 13From here, the Expert code can be entered into the window using the MQL4 programming language and syntax (see Figure 5). Nota . Specifics regarding programming are outside the scope of this tutorial understanding programming logic and learning a specific language require significant effort. Traders can learn more about programming in the MQL4 environment by reading the MT4 Help Guides and participating in the active MQL4 community forums. MQL4, like other proprietary languages, has a list of Reserved Words and Standard Constants that are used during programming. Examples of constants for trade operations, along with their descriptions, include:13 OPBUY - Buying position OPSELL - Selling position OPBUYLIMIT - Buy limit pending position OPSELLLIMIT - Sell limit pending position OPBUYSTOP - Buy stop pending position OPSELLSTOP - Sell stop pending position 13 13 Figure 5 - part of the code for an Expert Advisor. Certain words have predefined uses here, OPSELL instructs the computer to sell if other criteria are met ( if statements). Traders can find a MQL4 Reference in the Help tab of the Toolbox in the MetaEditor window. This Reference includes information that is helpful to beginner and experienced programmers including: Expert Advisor Compiling After the Expert development has been completed, it must be compiled in order to ensure that the code has been written in the proper format needed to run the Expert. To compile the Expert: Select File gt Compile (see Figure 6) or Click the Compile button on the toolbar or Press F5 on the computer keyboard. 13 13Once compiling has been initiated, an update appears in the Toolbox beneath the code in the MetaEditor window, as shown in Figure 6. An errors or warnings will be listed.13 Figure 6 - Successful compiling with zero errors and zero warnings. 13After successful compilation, the new Expert will appear in the Navigator - Expert Advisors window, as shown in Figure 7. If the Expert did not compile successfully, it will still appear but its icon will be gray and the Expert cannot be used. 13 Figure 7 - The new Expert now appears in the Navigator-Expert Advisors window. Expert Advisor Setup Before the Expert can be used, its parameters must be defined in the Terminal Settings window. Para abrir a janela: 13 No Menu Principal gt Ferramentas gt Opções ou Pressionando CTRL O no teclado do computador. Either action will open the Options window. Select the Expert Advisors tab, as shown in Figure 8. 13 Figure 8 - Select the Expert Advisors tab in the Options window to define an Experts parameters. 13 13The following settings are available in the Expert Advisors tab: Enable Expert Advisors - this option allows the user to enable (check) or disable (uncheck) the use of all Experts. Disable experts when the account has been changed - this option disables the Expert if the account has been changes, such as from a demo to a live account. Disable experts when the profile has been changed - this option prevents Experts from launching if the profile has changed. Allow live trading - to enable Experts in real-time mode (rather than testing an Expert on historical data). Pedir confirmação manual - para enviar confirmação comercial antes de enviar a encomenda. Permitir as importações DLL - para usar DLLs para aprimorar a funcionalidade Expert. Confirmar chamadas de função DLL - para permitir o controle sobre a execução de cada função chamada. Permitir a importação de especialistas externos - para permitir que o Especialista acesse funções de outros especialistas ou bibliotecas MQL4. 13 13Once the selections have been made, click OK to close the window. Expert Advisor Launch 13 After the Expert has been created and setup, it is ready to be launched. To launch an Expert: 13 Right-click on the Expert in the Navigator - Expert Advisors window and select Attach to a chart or13 Double-click on the Expert in the Navigator - Expert Advisors window or13 Drag-and-drop the Expert to the desired chart.13 13A window appears with Common and Inputs tabs, as shown in Figure 9. Review the settings in each tab and make any necessary changes, and then click OK to attach the Expert to the active price chart.13 Figure 9 - Make any changes to the Common and Inputs tabs before attaching the Expert to the active price chart. 13The Expert will now be attached to the price chart. Its name will appear in the upper right-hand corner of the chart. The Experts name will be followed by a smiley face, as shown in Figure 10, if live trading is enabled. Otherwise, the Experts name will appear with a frowny face, a dagger after the name indicates that all experts are disabled. 13 Figure 10 - An Expert with a smiley face indicates that live trading has been enabled. 13The Expert is now ready to begin analytical and trading functions. Expert Advisor Shutdown To shut down an Expert, it has to be removed from the chart. To remove an Expert, right-click on the active price chart, select Expert Advisors and then Remove, as shown in Figure 11. 13 Figure 11 - To remove an Expert, right-click the active price chart, select Expert Advisors from the drop-down menu, and then select Remove. Notes About Expert Advisors All Experts are shutdown if the Terminal is closed. If a chart is closed, the Expert attached to the chart will shut down as well. Adding another Expert to a chart will remove the previous one (a confirmation appears). Deleting the Expert from the Navigator window does not shut down an Expert of the same name on an active price chart. 13 13SEE: Trading Systems CodingWriting a Forex Expert Advisor Forex Expert Advisors for MetaTrader4 are written in the MQL4 software design language. This linguistic was industrialized by the constructor of the trading fatal definitely for writing forex ea . It permits the trader to plug-in the trading structure without any struggle, which will trade in online style day and night. Computer operator familiar with this linguistic will not have any trouble in doing the job. For normal users this will be an extra trying job. Forex Expert Generator is an instrument with which you can produce your own forex expert advisor for your strategy. You need to have at least MQL4 software design knowledge to use this tool. MQL4 is the software designing language that is rummage-sale to write forex expert advisors . If you are a single designer and would comparable to view the MQL4 code also for the forex ea you made, you must to purchase expert edition single certificate which is 139. If you purchase the normal edition you cannot interpretation the program. I accepted the expert version single certificate and after emerging my forex expert advisor I usually copy the code and paste it in the MQL 4 publishing superior and save it with some name, collect it and back trial it. This is a very easy tool as you dont actually essential to write the code but use the lumps on the left hand side and make your forex expert advisor . Once you collect it if there any mistakes you can see those mistakes below the Compilation tab at the lowest. If there are no mistakes you can vision the code below the tab Source Code . MT4 Expert Advisor Programming Se você é um comerciante de Forex e estão na necessidade de um programador experiente para converter sua estratégia de negociação em um Expert Advisor (EA), então você veio ao lugar certo. Ficamos felizes em considerar sua idéia e ter a experiência eo conhecimento para que isso aconteça. Feel free to contact us any time.
Comments
Post a Comment