Cara membuat expert advisor forex
VPSFOREX INDONÉSIA.
Bagi anda yang ingin belajar cara membuat EA / Expert Advisor sendiri, silahkan download panduan lengkap & amp; tutorial cara pembuatan EA:
Silahkan baixar Ebook Panduan & amp; Tutorial Lengkap Cara Pembuatan EA Expert Advisor / Robot Forex gratis: Download.
Disclaimer: В segala bentuk keuntungan / kerugian yang terjadi saat menggunakan EA Gratis tersebut diluar tanggung jawab kami, dan sepenuhnya menjadi tanggung jawab anda masing-masing. Lakukan Backtest / Forwardtest terlebih dahulu sebelum anda menggunakannya dalam akun real.
VPS Forex Indonesia, layanan VPS khusus Forex bagi Trader untuk menjalankan Robot Forex / Expert Advisor. Servidor Tersedia Indonésia e EUA, Kualitas Terbaik !.
Fibonacci EA.
Esta EA baseia-se na estratégia modificada de Fibonacci. Ele funciona em todos os prazos. A EA usa dados de dois dias atrás para abrir a posição (por exemplo: se você anexar Fibonacci EA no gráfico H1, a EA usa 48 velas para tomar uma decisão). Além disso, devo dizer que a EA não depende de um período de tempo. Esta EA usa apenas ferramentas Fibonacci Retracement. Este é um ótimo consultor especialista em capitais grandes e pequenos. Você tem lucros inteligentes e perdas de parada inteligente (Auto TP e SL). Você pode ver níveis de SL e TP em seu gráfico.
A opção anti-perda colocada no EA tem duas variantes: Anti-loss 1 e Anti-loss 2 Por exemplo, o Anti-loss 2 é bom para o EURUSD. Se a sua posição estiver fechada na perda, o Anti-Loss 2 será iniciado (sem hedging).
Parâmetros de entrada.
Use a Estratégia 1: Falso / Verdadeiro --- & gt; Esta é uma estratégia principal Auto Take Profit: True --- & gt; se configurado como falso, você pode alterar TP ou SL manualmente para otimizar a perda de parada de EA: True Take Profit: 30 --- & gt; manualmente para Auto Take Profit: Falso Stop Loss: 30 --- & gt; manualmente para Auto Stop Loss: Falso Anti-loss 1: Falso --- & gt; se definido como verdadeiro, uma posição é aberta em paralelo com o comércio de perda (níveis de TP e SL em Anti-Loss: ½ stoploss do comércio de perda = new sl e tp in anti-loss); por exemplo: temos algum comércio de perda com 30 pips (-30 pips). Anti-loss será iniciado com 15 pips de SL e TP Anti-loss 2: True --- & gt; uma posição é aberta vice-versa com o comércio de perda (TP e SL em Anti-Loss: ½ stoploss do comércio de perda = novo SL e TP em Anti-Loss); por exemplo: temos algum comércio de perda com 30 pips (-30 pips). Anti-loss será iniciado com 15 pips de SL e TP AL Auto Take Profit: True --- & gt; se definido como falso, você pode alterar TP manualmente para perda de parada automática anti-perda AL: True --- & gt; se configurado como falso, você pode alterar SL manualmente para obter perda de lucro anti-perda: 30 --- & gt; manualmente para Auto Take Profit: False (AL Auto Take Profit: False) AL Stop Loss: 30 --- & gt; manualmente para Auto Parar Los: Falso (AL Auto Stop Loss: False)
Use a Estratégia 2: Falso / Verdadeiro --- & gt; Esta é uma estratégia quebrando. Esta estratégia é muito útil para os seus negócios Comprar Max Order a Day: 1 --- & gt; Ordem de compra máxima para cada dia Venda Ordem máxima por dia: 1 --- & gt; Ordem de venda máxima para cada dia. Tire lucro: 50 Stop Loss: 50.
Use a Estratégia 3: Falso / Verdadeiro --- & gt; Esta é uma estratégia de dupla face quebrando. Esta estratégia é apropriada para dias de tendência fixa. Compre uma ordem máxima por dia: 1 --- & gt; Ordem de compra máxima para cada dia Venda Ordem máxima por dia: 1 --- & gt; Ordem de venda máxima para cada dia Auto Take Profit: False / True --- & gt; se configurado como falso, você pode alterar TP ou SL manualmente Auto Stop Loss: False / True --- & gt; se configurado como falso, você pode alterar TP ou SL manualmente Faça o lucro: 30 Stop Loss: 30 Money Management Setting Fixed Lot --- & gt; Se (Risco% Lote) configurado como falso, você pode alterar o lote manualmente Lote máximo do lote mínimo% Lote: verdadeiro / falso% de risco: 0,05 Tempo de troca Hora GMT: verdadeiro / falso Ajuste GMT: --- Hora de início: 00: 00 Hora de término: 23:59 Negociação em toda a semana: você pode controlar os negócios durante a semana.
Vantagens.
Nenhuma diferença entre backtests, testes de demonstração e testes reais (comércio de longo prazo)
A Fibonacci EA trabalha em EURUSD, GBPUSD, USDCHF, EURJPY, USDCAD, AUDUSD e OURO.
Para qualquer dúvida ou definir arquivos, use a guia Comentários.
O usuário não deixou nenhum comentário na classificação.
O usuário não deixou nenhum comentário na classificação.
O usuário não deixou nenhum comentário na classificação.
O usuário não deixou nenhum comentário na classificação.
O usuário não deixou nenhum comentário na classificação.
O usuário não deixou nenhum comentário na classificação.
O usuário não deixou nenhum comentário na classificação.
Não é bom, por isso, que a sua conta real não seja gratuita, perderá seu dinheiro.
O usuário não deixou nenhum comentário na classificação.
Não é fã de Fibonacci.
O usuário não deixou nenhum comentário na classificação.
Melhor do mercado livre do MQL EA, ótimo trabalho. Obrigado.
Não é bom este EA. :-(
Depois de negociar ao vivo e muitos backtests, alterando parâmetros diferentes, cheguei a uma conclusão. Este robô faz lucro em alguns meses e perde em outros meses. A mais longo prazo, perde todo o dinheiro. Anexei vários backtests na seção de comentários, enviei um e-mail ao autor para obter melhores arquivos definidos e cheguei à conclusão de que nenhum arquivo definido pode melhorar esse robô. A longo prazo, durante alguns meses, os negócios rentáveis são cerca de 50% com o mesmo tamanho que a perda de trades. Em outros meses, os negócios lucrativos são mais de 60%, com os negócios rentáveis sendo iguais ou menores que perder negócios. O autor forneceu seu e-mail e ele não responde e-mails. Se eu conseguir um arquivo conjunto rentável, irei excluir esta revisão.
Obrigado por atualizar software, apoiar este produto é excelência.
Grande EA, segue as regras de negociação e tem valores SL e TP, sem grade, martingale, etc.
Adicionou novos parâmetros ao Filtro de horário comercial:
Filtrar para selecionar dias de negociação (qualquer dia da semana)
Guia passo-a-passo para escrever um consultor especialista em MQL5 para iniciantes.
Introdução.
Este artigo destina-se a iniciantes que desejam aprender a escrever consultores de especialistas simples na nova linguagem MQL5. Começaremos primeiro definindo o que queremos que a EA (consultor especialista) faça, e depois continue em como queremos que a EA faça isso.
1. Estratégia de negociação.
O que nossa EA fará:
Ele irá monitorar um indicador específico e quando uma determinada condição for atendida (ou certas condições forem atendidas), ele irá colocar um comércio (seja curto / Vender ou Longo / Comprar), dependendo da condição atual que foi atendida.
O acima mencionado é chamado de estratégia de negociação. Antes de poder escrever uma EA, você deve primeiro desenvolver a estratégia que deseja automatizar na EA. Então, neste caso, modifiquemos a declaração acima para refletir a estratégia que queremos desenvolver em uma EA.
Usaremos um indicador chamado de Média de Movimento com um período de 8 (Você pode escolher qualquer período, mas para a finalidade de nossa estratégia, usaremos 8)
Nós já desenvolvemos nossa estratégia; agora é hora de começar a escrever o nosso código.
2. Escrevendo um consultor especialista.
Comece iniciando o MetaQuotes Language Editor 5. Em seguida, pressione Ctrl + N ou clique no botão Novo na barra de menus.
Figura 1. Iniciando um novo documento MQL5.
Na janela MQL5 Wizard, selecione Expert Advisor e clique em "Next", como mostrado na Fig. 2:
Figura 2. Selecionando o tipo de programa.
Na próxima janela, digite o Nome que deseja dar ao seu EA na caixa Nome. Nesse caso, digitei My_First_EA. 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 Consultor Especialista.
Como queremos poder alterar alguns dos parâmetros para a EA, para ver quais dos valores podem nos dar o melhor resultado, devemos adicioná-los clicando no botão "Adicionar".
Figura 4. Configuração de parâmetros de entrada de EA.
Em nossa EA, queremos poder experimentar as nossas configurações Stop Loss, Take Profit, ADX Period e Average Average, então nós as definiremos neste momento.
Clique duas vezes na seção Nome e digite o nome do parâmetro, então clique duas vezes no 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.
Depois de terminar, deve parecer algo assim:
Figura 5. Tipos de dados de parâmetros de entrada de EA.
Como você pode ver acima, selecionei tipo de dados inteiro (int) para todos os parâmetros. Deixe-nos falar um pouco sobre os tipos de dados.
char: O tipo char leva 1 byte de memória (8 bits) e permite expressar na notação binária 2 ^ 8 = 256 valores. O tipo de caracteres pode conter valores positivos e negativos. O intervalo de valores é de -128 a 127. uchar: O tipo inteiro uchar também ocupa 1 byte de memória, bem como o tipo char, mas ao contrário do uchar destina-se apenas a valores positivos. O valor mínimo é zero, o valor máximo é 255. A primeira letra u no nome do tipo uchar é a abreviatura para não assinado. curto: o tamanho do tipo curto é de 2 bytes (16 bits) e, portanto, permite expressar o intervalo de valores igual a 2 para a potência 16: 2 ^ 16 = 65 536. Como o tipo curto é um sinal, e contém valores positivos e negativos, o intervalo de valores é entre -32 768 e 32 767. ushort: O tipo curto não assinado é o tipo ushort, que também possui um tamanho de 2 bytes. O valor mínimo é 0, o valor máximo é 65 535. int: O tamanho do tipo int é de 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 da descrição acima dos vários tipos de dados, os tipos inteiros não assinados não foram projetados para armazenar valores negativos, qualquer tentativa de definir um valor negativo pode levar a consequências inesperadas. Por exemplo, se você quiser armazenar valores negativos, não pode armazená-los dentro dos tipos não assinados (ou seja, uchar, uint, ushort, ulong).
De volta à nossa EA. Olhando para os tipos de dados, você concordará comigo que é suposto usar tipos de dados char ou uchar, uma vez que os dados que pretendemos armazenar nesses parâmetros são inferiores a 127 ou 255, respectivamente. Para um bom gerenciamento de memória, esta é a melhor coisa a fazer. No entanto, por causa da nossa discussão, ainda ficaremos com o tipo int.
Depois de terminar de configurar todos os parâmetros necessários, clique no botão Terminado e o Editor de MetaQuotes criará o esqueleto do código para você, como mostrado na próxima figura.
Vamos quebrar o código nas várias seções para uma 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 (descrição de texto breve da EA), declarar constantes, incluir arquivos adicionais ou importar funções.
Quando uma declaração começa com um símbolo #, ele é chamado de uma diretiva de pré-processador e não termina com um ponto-e-vírculo; outro exemplo de diretrizes de pré-processador inclui:
A diretiva #define é usada para uma declaração de constantes. Está escrito no formulário.
O que isso faz é substituir toda ocorrência de identificador em seu código com o valor token_string.
#define COMPANY_NAME "MetaQuotes Software Corp."
Ele substituirá cada ocorrência de COMPANY_NAME pela string "MetaQuotes Software Corp." ou substituirá cada ocorrência de ABC pelo char (ou integer) 100 em seu código.
Você pode ler mais sobre as diretrizes do pré-processador no Manual MQL5. Deixe-nos continuar 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 utilizadas por todas as funções que estaremos escrevendo em nossa EA.
As variáveis declaradas neste nível são chamadas de Variáveis Globais porque elas são acessíveis por todas as funções em nossa EA que talvez as necessitem. Os parâmetros de entrada são parâmetros que só podem ser alterados fora de nossa EA. Também podemos 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, a função de inicialização de EA. Esta é a primeira função que é chamada quando a EA é iniciada ou anexada a um gráfico e é chamada apenas uma vez.
Esta seção é o melhor lugar para fazer algumas verificações importantes para se certificar de que a nossa EA funciona muito bem.
Podemos decidir se o gráfico tem barras suficientes para que nossa EA funcione, etc.
Também é o melhor lugar para obter as alças que usaremos para os nossos indicadores (ADX e Indicadores da Média Mover).
A função OnDeinit é chamada quando a EA é removida do gráfico.
Para a nossa EA, liberaremos as alças criadas para os 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 Consultor Especialista 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á habilitado.
A maioria dos nossos códigos que implementarão nossa estratégia de negociação, desenvolvida anteriormente, será redigida nesta seção.
Agora que analisamos as várias seções do código para a nossa EA, vamos começar a adicionar carne ao esqueleto.
2.2 SEÇÃO DE PARÂMETROS DE ENTRADA.
Como você pode ver, adicionamos mais parâmetros. Antes de continuar discutindo os novos parâmetros, vamos discutir algo que você pode ver agora. As duas barras dianteiras '//' nos permitem colocar comentários em nossos códigos. Com comentários, podemos saber o que nossas variáveis representam, ou o que estamos fazendo nesse momento no nosso código. Ele também proporciona uma melhor compreensão do nosso código. Existem duas maneiras 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. Comentários de várias linhas começam com o / * par de símbolos e terminam com * / one.
O compilador ignora todos os comentários ao compilar seu código.
Usar comentários de linha única para os parâmetros de entrada é uma boa maneira de fazer com que nossos usuários de EA entendam o que esses parâmetros representam. Nas propriedades EA Input, nossos usuários não verão o próprio parâmetro, 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 ...
Decidimos adicionar parâmetros adicionais para a EA. O EA_Magic é o número mágico para todos os pedidos da EA. O valor ADX mínimo (Adx_Min) é declarado como um tipo de dados duplo. 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;
duplo 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 usaremos:
O adxHandle deve ser usado para armazenar o identificador do indicador ADX, enquanto o maHandle irá 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 [] é uma matriz dinâmica que manterá os valores do indicador de média móvel para cada barra no gráfico.
Por sinal, quais são os arrays dinâmicos? Uma matriz dinâmica é uma matriz declarada 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 levará 20 elementos.
p_close é uma variável que usamos para armazenar o preço Fechar para a barra que vamos monitorar para verificar nossos negócios de Compra / Venda.
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 EA.
Aqui obtemos alças do nosso indicador usando as respectivas funções de indicador.
O identificador do indicador ADX é obtido usando a função iADX. Ele toma o símbolo do gráfico (NULL também significa o símbolo atual no gráfico atual), o período do gráfico / período de tempo (0 também significa o cronograma atual no gráfico atual), o período de média ADX para o cálculo do índice (o que definimos anteriormente em seção de parâmetros de entrada) como parâmetros ou argumentos.
símbolo de seqüência, // nome do símbolo.
Período ENUM_TIMEFRAMES, // período.
int adx_period // período de média.
O identificador indicador de média móvel é obtido usando a função iMA. Tem os seguintes argumentos:
o símbolo do gráfico (que pode ser obtido usando _symbol, symbol () ou NULL para o símbolo atual no gráfico atual)
símbolo de seqüência, // nome do símbolo.
Período ENUM_TIMEFRAMES, // período.
int ma_period, // período de média.
int ma_shift, // mudança horizontal.
ENUM_MA_METHOD ma_method, // tipo de suavização.
ENUM_APPLIED_PRICE applied_price // tipo de preço ou identificador.
Leia o manual MQL5 para obter mais detalhes sobre essas funções de indicadores. Isso lhe dará uma melhor compreensão sobre como usar cada indicador.
Mais uma vez, tentamos verificar se há algum erro no caso de a função não ter devolvido com sucesso o identificador, obteremos um erro INVALID_HANDLE. Usamos a função de alerta para exibir o erro usando a função GetlastError.
Nós decidimos armazenar os valores Stop Loss e Take Profit nas variáveis STP e TKP que declaramos anteriormente. Por que estamos fazendo isso?
É porque os valores armazenados nos parâmetros INPUT são somente leitura, não podem ser modificados. Então, aqui queremos garantir que a nossa EA funcione muito bem com todos os corretores. Digits ou Digits () r é o número de dígitos decimais que determina 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 a Stop Loss quanto o Take Profit por 10.
2.4. EA DEINTIALIZATION SECTION.
Uma vez que esta função é chamada sempre que a EA está desativada ou removida de um gráfico, liberaremos todas as alças de indicadores que foram criadas 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. É preciso apenas um argumento (o identificador do indicador)
int indicator_handle, // identificador indicador.
A função remove um identificador indicador e liberte o bloco de cálculo do indicador, se não for usado.
2.5 A SEÇÃO EA ONTICK.
A primeira coisa que temos a fazer aqui é verificar se temos barras suficientes no gráfico atual. Podemos obter as barras totais no histórico de qualquer gráfico usando a função Barras. É preciso dois parâmetros, o símbolo (pode ser obtido usando _Symbol ou Symbol (). Estes dois retornam o símbolo atual para o gráfico atual em que a EA está anexada) eo período ou prazo do gráfico atual (pode ser obtido usando o Período ou Período (). Estes dois retornarão o prazo do gráfico atual em que a EA está anexada).
Se o total de barras disponíveis for inferior a 60, queremos que nossa EA relaxe até ter barras suficientes disponíveis no gráfico. A função Alerta exibe uma mensagem em uma janela separada. Demora alguns valores separados por vírgulas como parâmetros / argumentos. Nesse caso, temos apenas um valor de string. O retorno sai da inicialização de nossa EA.
O Consultor Especial realizará operações comerciais no início de uma nova barra, por isso é necessário resolver o problema com a nova identificação da barra. Em palavras de ordem, queremos ter certeza de que nossa EA não verifica configurações longas / curtas em todos os tiques, só queremos que nossa EA cheque por posições Longas / Curtas quando houver uma nova barra.
Começamos por declarar uma variável de data e data estática Old_Time, que irá armazenar o tempo da barra. Nós o declaramos estático porque queremos que o valor seja mantido na memória até a próxima chamada da função OnTick. Então, poderemos comparar seu valor com a variável New_Time (também do tipo de data e data), que é uma matriz de um elemento para manter o novo tempo de barra (atual). Também declaramos uma variável de tipo de dados Bool IsNewBar e define seu valor como falso. Isso é porque queremos que seu valor seja VERDADEIRO somente quando tivermos uma nova barra.
Usamos a função CopyTime para obter o tempo da barra atual. Copia o tempo da barra para a matriz New_Time com um elemento; Se for bem sucedido, comparamos a hora de uma nova barra com o tempo anterior do bar. Se os tempos não forem iguais, significa que temos uma nova barra, e definimos a variável IsNewBar como TRUE e salvamos o valor do tempo de barra atual para a variável Old_Time.
A variável IsNewBar indica que temos uma nova barra. Se for FALSO, terminamos a execução da função OnTick.
Dê uma olhada no código.
ele verifica a execução do modo de depuração, ele imprimirá a mensagem sobre os tempos da barra quando o modo de depuração, vamos considerá-lo mais longe.
A próxima coisa que queremos fazer aqui é verificar se temos barras suficientes para trabalhar. Por que repetir? Nós simplesmente queremos ter certeza de que nossa EA funciona corretamente. Deve notar-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 há um novo tiquetaque (cotação de preço).
Você observa que o fizemos novamente de forma diferente aqui. Nós decidimos armazenar as barras totais na história que obtivemos com a expressão.
em uma nova variável, Mybars, declarada 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 do nosso código, estão disponíveis para todas as funções, dentro do nosso código que pode precisar deles, as variáveis declaradas dentro de uma única função são limitadas e disponíveis para essa função sozinhas. 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. O MQL5 tem uma série de Estruturas construídas, o que torna as coisas muito fáceis para os desenvolvedores de EA. Vamos pegar as Estruturas um após o outro.
Esta é uma estrutura utilizada para armazenar os preços mais recentes dos símbolos.
hora da data e hora; // Hora da última atualização de preços.
dupla oferta; // Preço do lance atual.
dupla perguntar; // preço do preço atual.
duplo último; // Preço do último negócio (Último)
ulong volume; // Volume para o último preço atual.
Qualquer variável declarada de tipo MqlTick pode ser facilmente usada para obter os valores atuais de Ask, Bid, Last e Volume, uma vez que você chama a função SymbolInfoTick ().
Então, declaramos latest_price 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 comerciais para uma operação comercial. Contém, na sua estrutura, todos os campos necessários para a realização de um acordo comercial.
Ação ENUM_TRADE_REQUEST_ACTIONS; // Tipo de operação comercial.
ulong magia; // ID do Advisor Especialista (número mágico)
ordem ulong; // Bilhete de encomenda.
símbolo de string; // Símbolo comercial.
volume duplo; // Requeriu o volume de um lote em lotes.
preço duplo; // Preço.
duplo stoplimit; // Nível StopLimit da ordem.
duplo sl; // Stop nível de perda da ordem.
duplo tp; // Pegue o nível de lucro da ordem.
desvio ulong; // Desvio máximo possível do preço solicitado.
Tipo ENUM_ORDER_TYPE; // Tipo de pedido.
ENUM_ORDER_TYPE_FILLING type_filling; // Tipo de execução da ordem.
ENUM_ORDER_TYPE_TIME type_time; // Tempo de execução da encomenda.
data de expiração; // Tempo de expiração da ordem (para as ordens do tipo ORDER_TIME_SPECIFIED)
comentário de corda; // Comentário da ordem.
Qualquer variável declarada de tipo MqlTradeRequest pode ser usada para enviar pedidos para nossas operações comerciais. Aqui 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 como de tipo MqlTradeResult pode acessar os resultados das solicitações comerciais.
umpt retcode; // Código de retorno da operação.
ulong deal; // Bilhete do acordo, se for executado.
ordem ulong; // Bilhete de encomenda, se for colocado.
volume duplo; // Volume do negócio, confirmado pelo corretor.
preço duplo; // Preço do acordo, confirmado pelo corretor.
dupla oferta; // Preço do lance atual.
dupla perguntar; // preço do preço atual.
comentário de corda; // Comentário do corretor para a operação (por padrão, é preenchido pela descrição da operação)
O preço (abrir, fechar, alto, baixo), o tempo, os volumes de cada barra e a propagação de um símbolo são armazenados nesta estrutura. Qualquer matriz declarada como do tipo MqlRates pode ser usada para armazenar o preço, os volumes e o histórico de propagação de um símbolo.
hora da data e hora; // Hora de início do período.
duplo aberto; // preço aberto.
duplo alto; // O preço mais alto do período.
duplo baixo; // O preço mais baixo do período.
fechamento duplo; // Fechar preço.
longo tick_volume; // Tick volume.
int spread; // Espalhar.
longo volume real; // Volume comercial.
Aqui, declaramos uma matriz de matriz [] que será usada para armazenar essas informações.
Em seguida, decidimos configurar todas as matrizes que estaremos usando para armazenar detalhes das barras como séries. Isso é para garantir que os valores que serão copiados para os arrays serão indexados como timeseries, ou seja, 0, 1, 2, 3, (para corresponder com o índice de barras. Portanto, usamos a função ArraySetAsSeries ().
vazio array [], // array por referência.
bool set // true denota ordem inversa de indexação.
Note-se 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 ponto por causa da nossa explicação.
Agora usamos a função SymbolInfoTick para obter a última cotação de preços. Esta função leva dois argumentos: o símbolo do gráfico e a variável de estrutura MqlTick (last_price). Mais uma vez, se houver erro, relatamos isso.
Em seguida, copiamos as informações sobre as últimas três barras em nossa matriz de tipos Mqlrates usando a função CopyRates. A função CopyRates é usada para obter dados do histórico da estrutura MqlRates de um período de símbolo específico em quantidade especificada em uma matriz de tipos MqlRates.
string symbol_name, // nome do símbolo.
ENUM_TIMEFRAMES prazo, // período.
int start_pos, // posição inicial.
contagem de int, // contagem de dados para copiar.
MqlRates rates_array [] // matriz de destino para copiar.
O nome do símbolo é obtido usando '_symbol', o período / período de tempo atual é obtido usando '_period'. Para a posição de início, iremos a partir da barra atual, Barra 0 e contaremos apenas três Bares, Barras 0, 1 e 2. O resultado será armazenado em nossa matriz, mrate [].
A matriz mrate [] agora contém todos os preços, horários, volumes e informações de propagação para as barras 0, 1 e 2. Portanto, para obter os detalhes de qualquer barra, usaremos o seguinte:
Por exemplo, podemos ter as seguintes informações sobre cada barra:
mrate [1].time // Bar 1 Hora de início.
mrate [1].open // Bar 1 Abrir preço.
mrate [0].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 indicator_handle, // identificador indicador.
int buffer_num, // número do buffer do indicador.
int start_pos, // posição inicial.
int count, // quantidade para copiar.
duplo buffer [] // matriz de destino para copiar.
O identificador do indicador é o identificador que criamos na seção OnInit. Quanto aos números de buffer, o indicador ADX possui três (3) buffers:
O indicador de média móvel possui apenas um (1) buffer:
Copiamos da barra atual (0) para as duas últimas barras. Portanto, a quantidade de registros a serem copiados é 3 (barras 0, 1 e 2). O buffer [] é o arrays dinâmicos 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 é necessário ir mais longe.
É importante notar que a função CopyBuffer () e CopyRates () retorna o número total de registros copiados com sucesso enquanto retorna -1 em caso de erro. É por isso que estamos a verificar por um valor inferior a 0 (zero) nas funções de verificação de erros aqui.
Neste ponto, queremos verificar se já temos uma posição Comprar ou Vender aberta, em palavras de ordem, queremos garantir que possamos apenas um contrato de Venda ou Compra aberto por vez. 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 alcançar, primeiro declararemos duas variáveis de tipo de dados do bool (Buy_opened e Sell_opened) que manterão um valor TRUE se já tivermos uma posição aberta para comprar ou vender.
Usamos a função comercial PositionSeleccionar para saber se temos uma posição aberta. Esta função retorna TRUE se tivermos uma posição já aberta e FALSE se não tivermos nenhuma.
É, como principal argumento / parâmetro, o símbolo (par de moedas) que queremos verificar. Aqui, usamos o _symbol porque estamos verificando o símbolo atual (par de moeda).
Se essa expressão retornar VERDADEIRO, queremos verificar se a posição aberta é uma Compra ou Venda. Utilizamos a função PositionGetInteger para isso. Isso nos dá o tipo de posição aberta quando usamos o modificador POSITION_TYPE. Ele retorna o identificador de tipo de posição que pode ser POSITION_TYPE_BUY ou POSITION_TYPE_SELL.
No nosso caso, nós usamos isso para determinar qual da posição que já abrimos. Se for um Sell, nós armazenamos um valor TRUE em Sell_opened e, se for um Buy, armazenamos um valor TRUE em Buy_opened. Poderemos usar essas duas variáveis mais tarde, quando verificamos as condições de Venda ou Compra mais tarde em nosso código.
Agora é hora de armazenar o preço de fechamento do bar que usaremos para a nossa instalação de Compra / Venda. Lembre-se de que declaramos uma variável para isso anteriormente.
Tendo feito isso, passaremos para a próxima etapa.
Agora é hora de começar a verificar uma oportunidade de compra.
Deixe-nos analisar a expressão acima, pois representa a estratégia que desenvolvemos anteriormente. Estamos declarando uma variável de tipo bool para cada uma de nossas condições que devem ser atendidas antes de uma ordem ser colocada. Uma variável de tipo bool pode conter apenas TRUE ou FALSE. Assim, nossa estratégia de Compra foi dividida em quatro condições. Se alguma das condições for atendida ou satisfeita, um valor de TRUE será armazenado em nossa variável de tipo bool, caso contrário, um valor de FALSE será armazenado. Vamos olhar para eles um a um.
Aqui, estamos observando os valores do MA-8 nas barras 0, 1 e 2. Se o valor de MA-8 na barra atual for maior do que o valor na barra anterior 1 e também o valor MA-8 na barra 1 é maior do que o valor na barra 2, significa que MA-8 está aumentando para cima. Isso satisfaz uma das nossas condições para uma instalaçã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 de Bar 1). Se o preço for maior, nossa segunda condição também foi satisfeita, então podemos verificar outras condições. No entanto, se as duas condições que acabamos de considerar não foram atendidas, não haverá necessidade de verificar outras condições. É por isso que decidimos incluir as próximas expressões dentro dessas 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 cumpridas, ou seja, se elas retornarem verdadeiras, queremos ter certeza de que não abriremos uma nova posição Comprar se já tivermos uma. Agora é hora de verificar o valor da variável Buy_opened que declaramos anteriormente no nosso código.
Se Buy_opened for true, não queremos abrir outra posição Buy, então, mostramos um alerta para nos informar e depois retornamos para que nossa EA aguarde o próximo Tick. No entanto, se Buy_opened for FALSE, então preparamos nossos registros usando a variável de tipo MqlTradeRequest (mrequest) que declaramos anteriormente para enviar nosso pedido.
A ação aqui, que é o tipo de operação comercial, é TRADE_ACTION_DEAL porque estamos colocando uma ordem comercial para uma execução imediata. Se estivermos modificando um pedido, usaremos TRADE_ACTION_MODIFY. Para excluir um pedido, usaremos TRADE_ACTION_REMOVE. Usamos o nosso MqlTick type latest_price para obter o preço mais recente da Ask. O preço de Stop Stop é obtido subtraindo nosso StopLoss em pontos do preço Ask enquanto o preço de lucro do pedido é obtido adicionando nosso TakeProfit em pontos ao preço Ask. You will also observe that we used the NormalizeDouble function for the Ask 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. The symbol is the current symbol (_Symbol or Symbol()). The order type is the type of order we are placing, here we are placing a buy order ORDER_TYPE_BUY . For a Sell order, it will be ORDER_TYPE_SELL .
The OrderSend() function takes two arguments, the MqlTradeRequest type variable and the MqlTradeResult type variable.
As you can see, we used our MqlTradeRequest type variable and the MqlTradeResult type variable in placing our order using OrderSend.
Having sent our order, we will now use the MqlTradeResult type variable to check the result of our order. If our order is executed successfully, we want to be informed, and if not, we want to know too. With the MqlTradeResult type variable ‘ mresult ’ we can access the Operation return code and also the order ticket number if the order is placed.
The return code 10009 shows that the OrderSend request was completed successfully, while 10008 shows that our order has been placed. That is why we have checked for any of these two return codes. If we have any of them, we are sure that our order has been completed or it has been placed.
To check for a Sell Opportunity, we check for the opposite of what we did for Buy Opportunity except for our ADX that must be greater than the Minimum value specified.
Just as we did in the buy section, we are declaring a bool type variable for each of our conditions that must be met before an order can be placed. A bool type variable can only contain TRUE or FALSE. So, our Sell strategy has been broken down into four conditions. If any of the conditions is met or satisfied, then a value of TRUE is stored in our bool type variable, otherwise, a value of FALSE will be stored. Let us look at them one by one as we did for the Buy section.
Here we are looking at the MA-8 values on Bars 0, 1 and 2 . If value of MA-8 on the current bar is less than its value on the previous Bar 1 and also the MA-8 value on Bar 1 is less than its value on Bar 2 , it means that MA-8 is decreasing downwards . This satisfies one of our conditions for a Sell setup.
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 Buy_opened variable we declared earlier in our code.
If Sell_opened 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 Sell_opened 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 latest_price to get the latest bid price. The other type here, as explained earlier, is ORDER_TYPE_SELL.
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 period/timeframe to use and click the OK button:
Before we start the debugger, let us set breakpoints. Breakpoints allow us to monitor the behavior/performance 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, let’s 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 Editor’s 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 buttons/commands 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 Shift+F11 .
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 expression/variable you are interested in monitoring from our code. Value : This will display the value of the expression/variable we typed at the Expression area. Type : This will display the data type of the expression/variable been monitored.
Back to our debugging process…
The next thing we want to do is now to type in the variables/expressions from our code that we are interested in monitoring. Make sure you only monitor the variables/expressions that really matters in your code. For our example, we will monitor the following:
Old_Time (old bar time) New_Time[0] (current bar time) IsNewBar (flag that indicates the new bar)
You can add other ones like the ADX values, the MA-8 values, etc.
To add the expression/variable, double-click under the Expressions area or right-click under the Expressions area and select Add as shown in the figure above.
Type the expression/variable to monitor or watch.
Figure 19. The expressions watching window.
Type all the necessary variables/expressions…
Figure 20. Adding expressions or variables to watch.
If the variable hasn't 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 variables/expression 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 Old_Time.
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 Buy/Sell 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 CONTROL+R 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 Tester’s settings, you need to expand/resize 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 Period/Timeframe 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 Computer’s 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.
That’s 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 Timeframes/Period.
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.
Conclusão.
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.
Gerador para sistemas de consultoria especializada em negociação forex compatível com.
todos os corretores de Forex que oferecem a plataforma de negociação MetaTrader 4 (MT4).
Bem-vindo ao Expert Advisor Generator.
O mercado forex é um dos mercados mais dinâmicos do planeta. Unfortuately 95% dos comerciantes perdem seu dinheiro. Isto é principalmente porque eles não têm boa estratégia de negociação testada.
Por outro lado, ter uma estratégia, significa que você possui regras claras sobre todas as situações do mercado. E quando as regras são claras, este sistema comercial pode ser automatizado. Existem muitas vantagens para os sistemas automatizados como: 24 horas de negociação, velocidade de reação, monitoramento de um grande número de instrumentos financeiros em diferentes prazos, a capacidade de backtest do sistema e muitos outros.
Automatizar um sistema de negociação é difícil porque exige habilidades de programa que a maioria dos comerciantes não possui. Com esse construtor Expert Advisor, essas habilidades não são mais necessárias.
Em nossa grande experiência na criação de sistemas de negociação automatizados, descobrimos que coisas geralmente simples funcionam. Com cada regra que você adiciona, você otimiza seus resultados no passado, mas isso lhe dará os piores resultados no futuro. Assim, nosso conselho é - manter as coisas simples.
Agora, vamos criar um sistema de negociação simples, por exemplo. Para começar, precisamos de quatro coisas básicas:
Quando abrir uma posição longa? Quando fechar a posição longa? Quando abrir a posição curta? Quando fechar a posição curta?
Digamos que temos essa estratégia básica:
Nós abrimos uma posição longa quando Rsi (Índice de Força Relativa) cruza 30. Nós abrimos a posição curta quando Rsi (Índice de Força Relativa) cruza 70. Não temos regras de saída, temos 50 pontos de StopLoss e 50 pontos da Takeprofit.
Agora precisamos abrir a primeira guia Abrir Compra e nós escolhemos isso:
Isso basicamente significa isso se o valor pré-anterior do RSI for inferior a 30 e a barra anterior estiver fechada com valor para RSI acima de 30, temos nossa condição aberta e longa.
O mesmo que fazemos para vender:
Ignoramos Fechar Comprar e Fechar Vender e vá diretamente para a guia Configurações.
Nós estabelecemos o StopLoss 50 pontos e TakeProfit 50 pontos. Queremos MM avançado, então verificamos essa opção. Agora vamos para a última guia e pressione o botão Gerar. Agora, tudo o que precisamos é copiar o código e colá-lo no MQL Editor, compilá-lo e começar a usá-lo.
ROBÔ DE FOREX GRÁTIS 100%, fácil de usar, sem perda.
Опубликовано: 2 авг 2018 baixar esta descrição.
forex expert advisor generator,
revisores de especialistas em Forex,
forex expert advisor download gratuito,
Consultor especialista em Forex hedging scalper m5-h4.
forex expert advisory forum.
forex expert advisor grátis.
download forex expert for download.
Consultor especialista em Forex 2018.
forex expert advisor construtor grátis.
Comentários do consultor de especialistas estrangeiros.
programador de consultor especialista forex.
Consultor especializado em Forex, Android.
Assessor de consultoria especialista em escalação forex agressor-3.
forex neural expert advisory neural-autotraining.
agressor de consultor especialista em escalação forex.
forex scalping expert adviser aggressor-3_13.
Construtor de consultor especialista forex.
Blog de consultor especialista forex.
forex expert advisor melhor.
Consultor especializado em forex backtest.
Compra de consultor especialista forex.
software de construtor de consultores especializados forex.
Construtor de consultor especialista da fx.
melhor consultor especialista em Forex, 2018.
melhor download gratuito de consultor especializado forex.
Criador de consultor especialista forex.
Codificação de consultor especialista forex.
Cobrança de consultores especializados em forex.
Crie um consultor especializado em fóruns sem programação.
Consultor especializado em caravanas Membuat forex.
Forex Expert Advisor gerador crack.
Consultor especializado em candelabro Forex.
cara menggunakan consultor especialista forex.
criar consultor especialista forex.
Forex Expert Advisor download grátis.
definição do consultor especializado forex.
desenvolvedor de consultor especialista em Forex.
download forex for expert.
Robô forex de consultoria especializada de download gratuito.
forex scalping expert advisor download gratuito.
software de consultor especialista em fóruns de download gratuito.
Baixe o melhor consultor especialista forex.
forex expert advisor ezfx 2018 download gratuito.
Consultor especialista em Forex ezfx 2018.
Consultor especializado em forex e tubarão 7.0.
forex expert adviser ea shark 7.0 download.
Consultor especializado em forex e hgnr turbo v.2.
Conselheiro perito de forex e chefe.
Consultor especialista em Forex ezfx.
consultor experiente forex ea.
traxxon forex expert adviser ea.
cfd forex expert adviser ea.
forex e consultor especialista em negociação.
forex expert advisor forex drain broker.
Consultor especialista em Forex para Android.
Consultor especialista em forex para scalping.
Prova gratuita do consultor especial forex.
melhor consultor especial forex grátis.
melhor fórum de consultor especial forex.
forex expert advisor generator pro v 4.
Forex expert advisor generator free.
Forex expert advisor generator v 2.07 edição profissional.
Forex Expert Advisor generator 5.1.
Forex Expert Advisor generator windows 7.
grade de consultor especializado em forex.
Forex expert advisor generator download.
Forex expert engineer on-line.
Consultor especialista forex hedging scalper.
Revisões do forex ea.
aviso prévio forex.
Forex eagle rock.
Forex ea gerador.
dinheiro forex fácil.
Forex ea builder.
calculadora de obtenção de divisas.
Forex ea que funciona.
Forex e download grátis.
Criador de Forex e.
Forex e gerador profissional.
Forex e Scalper.
forex e assessor.
Forex e sistema de auto-negociação.
Forex ea arbitrage.
Forex arbitrage e download.
arbitragem forex e mt4.
e forex android.
Forex arbitrage ea download gratuito.
forex alligator ea.
arbitragem forex e revisão.
Forex, uma maneira fácil de ganhar.
criar um forex ea.
faça uma forex ea.
O que é um forex ea.
como escrever uma forex ea.
software de compilação forex a.
forex ea builder grátis.
Forex ea builder free download.
forex ea backtest.
Software de backtesting forex ea.
revisão do chefe da forex ea.
forex ea benção.
coleção forex ea.
competição forex ea.
Forex e codificação.
concurso forex ea.
Forex ea copiadora.
comparação comparativa.
download grátis forex e creator.
software para criador de forex a.
desenvolvedor forex ea.
Forex e download.
Forex e download mq4.
Forex ea decompiler.
Forex e download grátis.
Forex e Development India.
definição forex e.
Forex ea desconto.
forex e download site.
editor forex e a.
forex ea most cross.
espionagem forex e.
Forex envy ea download.
forex ea trading ea.
forex e-trailing ea.
Forex ea avaliação gratuita.
Forex ea venda.
Forex ea para Android.
Forex ea fibonacci.
Forex e forward testing.
Forex ea freeware.
forex ea para mt4.
forex ea para scalping.
Forex ea generator 6 serial.
Forex ea crack do gerador.
Forex ea generator 6.
Forex ea generator professional v4.1.
Forex ea generator 5 crack.
Forex ea gerador online.
Forex ea generator 4.
Forex ea generator 5.1 crack.
Forex ea high low.
Forex ea hospedagem.
forex ea heiken ashi.
Forex hedging ea download gratuito.
Forex hackeado ea.
Forex hackeado e download gratuito.
Forex hackeou a avaliação.
forex hunter ea.
forex ea indonésia.
indicador forex ea.
forex ea ichimoku.
senha do investidor e do inversor.
forex incontrol ea.
melhor forex e no mundo.
i migliori ea forex.
forex junkie ea.
ebe jackpot forex.
japonês forex ea.
Forex Joker e download.
Forex e canguru.
forex ea kaskus.
Комментарии & bull; 38.
e as notícias vermelhas com esta?
* Estou muito impressionado com este aplicativo de troca binária criativa (Link Here >> ** t. co / 8468e70YPG **). Apoiado com experiência, este robô funciona esplêndido e, se não muito, traz uma quantidade decente de lucros. Muito obrigado pelo time por criar um robô tão inovador. É como uma benção para os comerciantes ganhar ganhos consistentes. *
* Eu pensei que eu era um especialista em negociação de opções binárias fazendo US $ 770,22 semanalmente, eu estava confortável, até que eu fui apresentado ao Sr. Joseph A Kestner e com sua estratégia final, agora eu faço $ 7500.50 por semana. Ele também me ajudou a colecionar meu bônus de dois meses. Eu não sei o que dizer, estou cheio de alegria, (Check Out ** t. co / hpPVf5ZNro **) se você quer sua estratégia, eu prometo que não ficará desapontado. *
Ainda me impressiona quantas pessoas não têm pistas sobre o sistema Trabeplom, apesar do fato de que muitas pessoas ganham dinheiro no comércio de fx. Graças ao meu amigo que me contou sobre isso. Eu comecei a ganhar grande dinheiro na negociação fx.
Trillionaire EA Expert Advisor + BONUS sistema Forex.
O link não está funcionando, envie-me no moazzam532 @ gmail.
Por favor envie o meu robô willemvheyns @ gmail.
Dears, eu estou usando o MT5, então você pode me enviar um robô de EA para o MT5, por favor.
woow. een money. xyferedrro. trade/9955280149705/.
Negociar opções binárias sem uma estratégia é o jogo e um desperdício de capital de investimento, na verdade, existe um sistema de classe mestre que funciona. Não há nenhum software, calculadora ou robô que possa prever o mercado. Se você está realmente interessado em fazer lucros, entre em contato comigo georgebakerbos @ gmail.
* VIVO AGORA: sistema de negociação automatizado com uma taxa de precisão de 99,8% ** t. co / uBClhFqQfz ** Sua estratégia realmente surpreendente para 2017, obtendo lucro bem-vindo todos os dias. *
Cheers para o Vídeo! Desculpe-me por aceitar, eu agradeceria a sua opinião. Você pesquisou - Tarbbatigan precisão Previsão Dica (pesquisa no google)? É um ótimo produto para o robô de negociação forex menos a dor de cabeça. Eu já escutei algumas coisas muito boas sobre isso e meu velho amigo Taylor depois de muitos anos obteve bons resultados com isso.
como lo descargo gracias.
Se você está procurando um brilhante para eliminar outros softwares competitivos no mercado, você está no lugar certo agora. Este aplicativo comercial inteligente (Link Here >>> twitter / AnnCano2 / status / 839771465973059585) está literalmente matando os corretores e soprando as preocupações. Muitos comerciantes que estavam lutando antes estão muito felizes agora. Negociação feliz!
Aqui é o meu método para fazer $ 500 diariamente. Pesquise no Youtube para * EIT METHUT TUTORIAL *
* Procurando a solução para seus problemas comerciais? À procura de um bom aplicativo para ajudá-lo na negociação de opções binárias? Então você está no lugar errado. Você precisa usar o aplicativo (link aqui >>> ** twitter / fxmusafir / status / 847343720512888832 **), pois é o melhor lá fora, com uma porcentagem de sucesso superior a 90%. *
* Eu não fui tão bem sucedido no comércio binário antes de meu tio, que também aconteceu de ser um comerciante binário me apresentou à plataforma de negociação (Link Here >>> ** plus. google / 100047131994509171277 / posts / T9rSLyQcbBk **). Depois que eu comecei a negociar no aplicativo, eu tenho tido muito sucesso em meus negócios com a taxa de sucesso atingindo mais de 90%, o que é extraordinário. *
* _ Este software (Link Here >>> _ ** _ twitter / AnnCano2 / status / 839771954026422273 _ ** _) é apoiado com a experiência de profissionais desta indústria ao longo de três décadas. Um excelente. Adorei, então eu aposto em obter resultados frutíferos. Basta usá-lo e sente-se assistindo seus lucros rodando ._ *
envie-me hajidalakhtar @ gmail.
Por favor, envie-me, eu quero tentar.
* _It é especialmente importante, ao usar o software de sinais de negociação automática para garantir que você tenha o melhor sistema disponível (Aqui está a informação para o Best One: _ ** _ twitter / L__Adamson / status / 841048274018549760 _ ** _) para maximizar o lucro e minimizar risco. Mas, quando você usa bons provedores de sinal, você pode deixar o software fazer o seu problema e você nem precisa estar na frente do computador. Em outras palavras, você pode andar na praia enquanto o seu software de negociação automática está fazendo dinheiro. Não é mais fácil do que isso! _ *
envie-me uma cópia deste robô marcus87lee @ gmail.
envie-me uma cópia desta EA em praful. forex@gmail.
envie-me uma cópia deste robot / lkonsta1971 @ gmail.
АutоBinаrууSignаls é o nexхt gеnеrаtiоn оf autооomаtеd Binаrу Орtions trаding. АBS é а uniquе waау оf mаking mоnеy оnlinеe através binarу орtiоns. Gо hеrе ==> twitter / c903839ed82be8bc0 / status / 804699524132278272 >> 100 FRЕЕ FОRЕX RОBOT Еasууу para Usе NО PERDA.
envie-me uma cópia desse robô. davilinch32 @ gmail.
Por favor, envie-me uma cópia e as cobranças também.
envie-me uma cópia desse robô.
Gostaria de agradecer se você pudesse enviar mais informações para mim.
Comments
Post a Comment