Sunday 11 March 2018

Crossing moving average expert advisor


Simple Expert Advisor Problema 29. Criar um Expert Advisor de negociação. Argumentos Preliminares Antes de começar a programar um Consultor Especialista, é necessário definir os princípios gerais de um programa futuro. Não há um programa estrito criando regras. No entanto, depois de ter criado um programa, um programador geralmente continua a melhorá-lo. Para ser capaz de entender facilmente o programa no futuro, ele deve ser criado de acordo com um esquema bem-pensado e fácil de entender (é especialmente importante se um programa será melhorado por outro programador). O programa mais conveniente é aquele que consiste em blocos funcionais, cada um dos quais é responsável pela sua parte dos cálculos. Para criar um algoritmo de um especialista em negociação, vamos analisar o que um programa operacional deve fazer. Um dos dados mais importantes na formação de ordens comerciais é a informação sobre ordens que já existem em um terminal cliente. Algumas das estratégias de negociação permitem apenas uma ordem unidirecional. Geralmente, se uma estratégia de negociação permitir, várias ordens podem ser abertas em um terminal ao mesmo tempo, embora seu número deve ser razoavelmente limitado. Ao usar qualquer estratégia, as decisões comerciais devem ser tomadas levando em conta a situação atual. Antes de uma decisão de comércio é feita em um programa, é necessário saber o que as ordens de negociação já foram abertas ou colocadas. Primeiro de tudo, um programa deve conter um bloco de contabilidade de pedidos que está entre os primeiros a ser executado. Durante a execução de uma EA devem ser tomadas decisões comerciais, cuja implementação leva à execução de operações comerciais. Parte de código responsável pela formação de ordens de negociação é melhor escrito em um bloco separado. Um Consultor Especializado pode formar uma solicitação de negociação para abrir uma nova ordem pendente ou de mercado, fechar ou modificar qualquer uma das ordens existentes ou não executar nenhuma ação. Uma EA também deve calcular os preços da ordem, dependendo do desejo de um usuário. As decisões comerciais devem ser tomadas num programa com base em critérios comerciais. O sucesso de todo o programa depende da correcção da detecção de critérios comerciais no programa. Ao calcular os critérios comerciais, um programa pode (e deve) levar em conta todas as informações que podem ser úteis. Por exemplo, um Consultor Especialista pode analisar a combinação de valores de indicadores técnicos, o tempo de lançamentos de notícias importantes, a hora atual, os valores de alguns níveis de preços, etc. Por conveniência, a parte do programa responsável pelo cálculo de critérios de negociação deve ser escrita em separado. quadra. Um especialista em negociação deve necessariamente conter blocos de processamento de erros. Analisar os erros que podem ocorrer na execução da operação comercial permite, por um lado, repetir uma solicitação comercial e, por outro lado, informar ao usuário sobre uma possível situação de conflito. Estrutura de um Conselheiro Especialista Simples Abaixo está um esquema estrutural de um Consultor Especializado simples construído com base em vários blocos funcionais, em cada bloco uma determinada parte destacada dos cálculos. No estágio de desenvolvimento da EA a seguir, ainda não há código de programa. Ao mesmo tempo, o algoritmo de um programa é, em grande medida, formado. Como a EA construída sobre as bases do esquema oferecido irá operar pode ser facilmente entendido simplesmente olhando no esquema e orientando sobre nomes de blocos e matrizes de relações (controle de passagem) entre eles. Após o início do programa de controle é passado para o bloco de processamento preliminar. Neste bloco alguns parâmetros gerais podem ser analisados. Por exemplo, se não houver barras suficientes em uma janela (barras necessárias para calcular parâmetros de indicadores técnicos), uma EA não será capaz de operar adequadamente. Nesse caso, uma EA deve terminar a operação preliminarmente informando um usuário sobre ela e informando sobre o motivo da rescisão. Se não houver contraindicatons de um caráter geral, o controle é passado ao bloco da contabilidade da ordem. No bloco de ordens contábeis é detectado o número e qualidade de ordens existentes em um terminal cliente para uma segurança (para a janela da qual o EA está conectado). Neste bloco, os pedidos de outros títulos devem ser eliminados. Se uma estratégia de negociação programada requer o uso de apenas ordens de mercado (e não usa ordens pendentes), o fato de presença de ordens pendentes deve ser detectado. Se uma estratégia admite apenas uma ordem de mercado e existem realmente várias ordens, esse fato também deve ser conhecido. A tarefa do bloco de contabilidade de ordens (neste esquema) é definir se a situação de negociação atual corresponde a uma situação esperada, isto é, aquela em que a EA pode operar adequadamente. Se a situação corresponder, o controle deve ser passado para o bloco seguinte para continuar a operação EAs se não, a operação EAs deve ser encerrado e este fato deve ser relatado a um usuário. Se não houver ordens no terminal ou se o número e a qualidade das ordens existentes corresponderem ao esperado, o controle será passado para o bloco de critérios de negociação definidor. Neste bloco são calculados todos os critérios necessários para a tomada de decisões comerciais, nomeadamente os critérios de abertura, encerramento e modificação de ordens. Mais controle é passado para o bloco de ordens de fechamento. É fácil entender por que no esquema oferecido o bloco de ordens de fechamento é executado antes do bloco de ordens de abertura. É sempre mais razoável processar as primeiras encomendas existentes (fechar ou modificar) e só depois disso abrir novas encomendas. Geralmente, é correto ser guiado pelo desejo de ter tão poucas ordens quanto possível. Durante a execução deste bloco, todos os pedidos, para os quais o critério de fechamento foi ativado, devem ser fechados. Depois que todas as ordens necessárias foram fechadas, o controle é passado para um bloco de cálculo de tamanho de novos pedidos. Existem muitos algoritmos para calcular um volume de pedido. O mais simples deles é usar um tamanho de lote constante e fixo. É conveniente usar esse algoritmo em um programa para testar estratégias. Método mais popular de definir um tamanho de ordem é definir o número de lotes dependendo da quantidade de margem livre, por exemplo 30-40 do mesmo. Se a margem livre não for suficiente, o programa encerra sua operação informando um usuário sobre o motivo. Depois que o número de lotes para abrir novos pedidos é definido, o controle é passado para o bloco de abertura da ordem. Se algum dos critérios calculados anteriormente aponta para a necessidade de abrir uma ordem de um determinado tipo, um pedido de comércio para abrir uma ordem é formado neste bloco. Há também um bloco de análise de erros em um Expert Advisor. Se alguma operação comercial falhou, o controle (somente neste caso) é passado para o bloco de processamento de erros. Se um erro retornado por um servidor ou terminal do cliente não for crucial, uma mais tentativa é feita para executar uma operação comercial. Se um erro crucial é retornado (por exemplo, uma conta é bloqueada), um EA deve encerrar sua operação. Lembre-se, em MQL4 não há possibilidade de programa terminando uma operação EAs em uma janela de segurança (como distinto de scripts, consulte Funções Especiais). O que pode ser feito de uma maneira programada é o término de start (). Num novo início da função start () num novo tick o valor de uma determinada bandeira de variável que proíbe a negociação (neste caso habilitado como resultado de um erro crítico) pode ser analisado e o controlo pode ser passado para a terminação da função Operação de função especial, assim, a formação de novo pedido de comércio não é permitido. No esquema oferecido o valor da bandeira é analisado no bloco de processamento preliminar. Estratégia de Negociação Os preços de mercado estão constantemente em movimento. O estado de mercado em qualquer momento do tempo pode ser condicionalmente caracterizado como uma tendência - forte mudança de preço unidirecional (subida ou queda), ou como um movimento de preços flat-lateral com desvios fracos de uma determinada média. Estas características do mercado são condicionais, porque não existem critérios claros, segundo os quais a tendência ou plano pode ser identificado. Por exemplo, longos movimentos laterais com fortes desvios que não podem ser traçados nem para um plano nem para uma tendência. Geralmente é assumido que o mercado está principalmente no estado de movimento lateral e tendências costumam ocorrer 15-20 de tempo. Todas as estratégias de negociação também podem ser convencionalmente divididos em dois grupos principais. O primeiro grupo contém estratégias planas. A idéia principal de tais estratégias é que depois de um evidente desvio preço deve retornar à posição anterior, thats porque as ordens são abertas na direção contrária ao último movimento de preços. As estratégias do segundo grupo são estratégias de tendência, quando as ordens são abertas na mesma direção que o movimento do preço do sal. Existem estratégias mais complicadas (combinadas). Tais estratégias levam em conta muitos fatores diferentes que caracterizam o mercado como resultado negociação pode ser executado tanto em plano e tendência. Não é difícil implementar a negociação de acordo com essa ou aquela estratégia tecnicamente - MQL4 contém todos os meios necessários para isso. O principal trabalho na criação de uma estratégia própria própria consiste na busca de critérios de negociação. Critérios de negociação Neste exemplo, tentaremos construir uma tendência Expert Advisor, ou seja, aquela que abrirá ordens na direção do movimento de preços. Então, precisamos encontrar entre vários indicadores técnicos aqueles que detectam um início de tendência. Um dos métodos mais simples de pesquisa de critérios de negociação baseia-se na análise da combinação de MAs com diferentes períodos de média. FIG. 111 e Fig. 112 mostram a posição de dois diferentes MA (com períodos de média 11 e 31) em diferentes partes do mercado. As médias com pequeno período de média (linhas vermelhas) estão mais perto de um gráfico de preços, twisty e móveis. As médias móveis com maior período de média (linha azul) são mais inertes, têm maior defasagem e estão situadas mais distantes dos preços de mercado. Vamos prestar atenção aos lugares onde MAs com diferentes períodos de média cruz e tentar decidir, se o fato de MA cruzamento pode ser usado como um critério de leitura. FIG. 111. Cruzamento de MA (11) e MA (31) quando a direção de movimento de preço muda. Na fig. 111 vemos uma parte do mercado onde as ordens de abertura no sentido da movimentação do preço na passagem do miliampère são justificadas. No ponto A a linha vermelha cruza o azul de baixo para cima, depois que o preço de mercado continua a crescer por algum tempo. Avançar MA cruzamento indica a mudança de direção movimento de preço. Se abrimos uma ordem de compra no ponto A e fechá-la em B, obteremos lucro proporcional à diferença de preços de A e B. FIG. 112. Cruzamento de MA (11) e MA (31) quando a direção de movimento de preço muda. Ao mesmo tempo, existem outros momentos no mercado quando a MA atravessa, mas isso não leva a uma subida ou queda de preços considerável (Fig. 112). As ordens abertas na passagem MA nesses momentos levarão a perdas. Se Sell for aberto em A e fechado em B, tal negociação trará perdas. O mesmo pode ser dito sobre uma ordem de compra aberta em B e fechado em C. O sucesso de toda a estratégia implementada com base em MA cruzamento depende do número de peças que podem ser caracterizadas como tendência e plana. Em flat muitas vezes MA cruzamento é um evento regular que interfere com qualquer tendência estratégia. Numerosos sinais falsos, como regra, levam a perdas. É por isso que este sign-crossing de MAs com período de média diferente - pode ser usado para construir estratégias de negociação apenas em combinação com outros sinais provando uma tendência. Neste exemplo (para construir um consultor especializado) teremos de recusar usar este sinal. Usaremos outro sinal. Analisando visualmente o caráter das mudanças de preços no mercado, podemos ver que uma subida ou queda de preço de uma direção longa aparece frequentemente como resultado de um movimento forte curto. Em outras palavras, se em um curto período ocorrer um forte movimento, podemos esperar sua continuação em um período de médio prazo. FIG. 113 mostra o período de mercado em que um movimento forte resultou na continuação da mudança de preço na mesma direção. Como o movimento de quota forte, podemos usar a diferença de MAs com diferentes períodos de média. Quanto mais forte o movimento, maior é o atraso de MA com maior período de média de MA com um pequeno período de média. Além disso, mesmo fortes movimentos de preços descontínuos com retorno adicional não resultam em uma grande diferença entre MAs, isto é, muitos falsos sinais não aparecem. Por exemplo, salto de preço por 50 pontos com retorno adicional (no centro na figura 113) implicou aumento da diferença entre MAs apenas por 20 pontos. Ao mesmo tempo, um movimento realmente forte (que geralmente não é acompanhado por uma correção considerável) no ponto A resultou na diferença aumentar até 25-30 pontos. Se a ordem de compra for aberta quando um determinado valor de diferença entre MAs for atingido, por exemplo em A, provavelmente a ordem será rentável quando um preço atingir um valor de ordem de parada predefinido. Vamos usar esse valor como critério de negociação no nosso Expert Advisor. Número de Pedidos Neste exemplo, analisamos um Consultor Especializado que admite a presença de apenas uma ordem de mercado, as ordens pendentes não são fornecidas. Tal abordagem é justificada não apenas neste exemplo, mas pode ser usada como base para qualquer estratégia. Ordens pendentes geralmente são usadas quando um desenvolvedor tem um critério bastante confiável para prever a mudança futura de preços com alta probabilidade. Se não houver tal critério, não há necessidade de usar ordens pendentes. A situação em que várias ordens opostas para uma segurança estão abertas também não pode ser considerada razoável. Foi escrito anteriormente que, do ponto de vista econômico, ordens opostas são consideradas sem sentido, especialmente se os preços da ordem forem iguais (ver Encerramento e exclusão de ordens). Nesse caso, devemos fechar uma ordem por outra e esperar por um sinal para abrir uma ordem de mercado em uma determinada direção. Relação de Critérios de Negociação A partir desta posição torna-se claro que relações são possíveis entre os critérios de negociação. FIG. 114 mostra três variantes de correlação de critérios de negociação, quando cada critério é importante (válido). As ações (abertura e fechamento de ordens de mercado) ocorrem no sentido horário nas seguintes figuras. FIG. 114. Ordem de abertura e fechamento de critérios correlação (a e b - correta, c - incorreta). A variante mais popular de um critério de negociação corretamente formado é a variante a. Depois de ser aberto uma compra de ordem de mercado é realizada até o momento em que critério que exige o seu encerramento aciona. Depois disso ocorre uma pausa quando nenhuma ordem é aberta. Além disso, uma ordem de mercado Sell pode ser aberta. As condições para fechar uma ordem de venda (de acordo com critérios corretamente formados) ocorrem mais cedo do que as condições para abrir uma ordem de compra. No entanto, uma ordem de compra pode ser aberta mais uma vez, se um critério de negociação exige isso. Mas de acordo com esta variante, uma ordem de mercado não pode ser aberta se houver uma ordem de mercado aberto na direção oposta. Correlações de critérios semelhantes estão na variante b. A diferença é que um critério para abrir qualquer ordem de mercado é, ao mesmo tempo, um critério para fechar a ordem oposta. Esta variante como a variante a não permite várias ordens abertas no terminal ao mesmo tempo em uma segurança. A variante de correlação de critérios está incorreta. De acordo com esta variante, a abertura de uma ordem de mercado é permitida quando ordens contrárias ainda não estão fechadas, o que não tem sentido. Pode haver casos raros quando esta variante é parcialmente justificada. A abertura de uma ordem oposta às vezes é aceitável para compensar perdas ocorrendo em pequenas correções após fortes movimentos de preços. Em tais casos, uma ordem oposta pode ser aberta do mesmo valor ou menor do que a já existente e então fechada quando a correção é excedida. Tal tática permite não interferir com o quotmainquot ordem aberta na direção da tendência. Em geral, também são possíveis várias ordens de um sentido. Isso pode ser justificado quando uma ordem aberta anterior é protegida por uma ordem Stop e o critério apontando para a evolução dos preços no mesmo sentido desencadeado novamente. No entanto, ao criar uma tal estratégia, um desenvolvedor deve estar plenamente consciente de que, em caso de uma mudança brusca de movimento de preços, as ordens de parada colocadas podem ser executadas por alguns corretores no primeiro toque de preço. E a perda será proporcional ao valor total das ordens de mercado unidirecionais. Em nosso exemplo, utilizamos a variante b de correlação de critérios de negociação. Todas as ordens de mercado abertas são fechadas por uma ordem de paragem ou após um critério de abertura de uma ordem em giros de sentido oposto (aqui critério de fechamento de Compra coincide com o de abertura de Vender e vice-versa). Tamanho das ordens abertas Em qualquer estratégia de negociação tamanhos de ordem deve ser razoavelmente limitado. Em um caso simples, um tamanho de ordem fixo é usado em um Expert Advisor. Antes do início da operação EA, um usuário pode definir qualquer tamanho de pedidos futuros e deixá-lo inalterado por algum tempo. Além disso, se o equilíbrio for alterado, um usuário pode configurar um novo valor de números de lote de ordens abertas. Um tamanho de ordem muito pequeno fornece mais confiança na operação na mudança de mercado imprevisível, mas o lucro em caso de sucesso não será tão grande. Se o tamanho da ordem é muito grande, grande lucro pode ser adquirido, mas tal EA será muito arriscado. Normalmente, o tamanho das encomendas abertas é configurado de modo que os requisitos de margem não excedam 2-35% do saldo ou margem livre (se uma estratégia permitir apenas uma ordem, saldo e margem livre abertos no momento antes da abertura da ordem será igual). Neste exemplo, ambas as variantes são implementadas. Um usuário pode escolher indicar diretamente valores das ordens ou ajustar o valor na porcentagem da margem livre. Detalhes de programação Uma tendência simples Expert Advisor tradingexpert. mq4 construído com base em argumentos anteriores pode se parecer com o seguinte: Descrevendo Variáveis ​​Um critério mais na estimação do programa é a sua legibilidade. Um programa é considerado corretamente escrito, se ele pode ser facilmente lido por outros programadores, é por isso que todas as principais partes do programa e principais momentos que caracterizam a estratégia deve ser comentado. É também por isso que é recomendável declarar e comentar todas as variáveis ​​no início do programa. No bloco 1-2 são descritas variáveis ​​externas e globais. De acordo com as regras, as variáveis ​​externas e globais devem ser abertas antes da primeira utilização (ver Tipos de Variáveis), é por isso que são declaradas na parte da cabeça do programa. Todas as variáveis ​​locais da função start () são reunidas e descritas na parte da função superior (bloco 2-3) imediatamente após o cabeçalho da função. Regras de declarar variáveis ​​locais não o exigem, mas também não proíbem. Se um programador enfrenta dificuldades em entender o significado de uma variável ao ler o programa, ele pode se referir à parte superior do programa e descobrir o significado eo tipo de qualquer variável. É muito conveniente na prática de programação. Bloco de pré-processamento Neste exemplo, o pré-processamento consiste em duas partes (bloco 3-4). O programa termina a operação se não houver barras suficientes em uma janela de segurança, em tal caso é impossível detectar corretamente (no bloco 5-6) os valores das médias móveis necessárias para o cálculo dos critérios. Além disso, o valor da variável Trabalho é analisado. Na operação EA normal, o valor da variável é sempre verdadeiro (é definido uma vez durante a inicialização). Se ocorrer um erro crítico na operação do programa, false é atribuído a esta variável e start () termina a sua operação. Esse valor não será alterado no futuro, é por isso que o código a seguir não é executado. Nesse caso, a operação do programa deve ser interrompida e o motivo do erro crítico deve ser detectado (se necessário, um centro de negociação deve ser contactado). Após a situação ser resolvida, o programa pode ser iniciado mais uma vez, isto é, o EA pode ser ligado a uma janela de segurança. Ordens contábeis O Expert Advisor descrito permite trabalhar apenas com uma ordem de mercado. A tarefa do bloco de contabilidade de pedidos (bloco 4-5) é definir as características de uma ordem aberta, se houver. No loop que passa por ordens para todos os pedidos de mercado existentes e pendentes são verificados, nomeadamente a partir do primeiro (int i1) para o último (iampltOrdersTotal ()). Em cada ciclo de iteração a próxima ordem é selecionada pela função OrderSelect (). A seleção é feita a partir de uma fonte de pedidos abertos e pendentes (SELECTBYPOS). Se a seleção for executada com êxito (ou seja, há mais uma ordem no terminal), essa ordem e a situação devem ser analisadas: se a ordem é aberta para a segurança, em que a EA opera, se a ordem está no mercado ou pendente Ele também deve ser levado em conta na contagem de ordens. Na linha: todas as ordens abertas para outra segurança são eliminadas. O Operador continua pára a iteração e as características de tal ordem não são processadas. Mas se a ordem é aberta para a segurança, para a janela de que a EA é anexado, é analisado mais adiante. Se OrderType () retorna valor mais de 1 (consulte Tipos de Trades), a ordem selecionada é uma pendente. Mas neste Expert Advisor o gerenciamento de pedidos pendentes não é fornecido. Isso significa que a execução de start () deve ser encerrada, porque ocorreu uma situação de conflito. Em tal caso, depois de uma mensagem sobre a operação start () de terminação, a execução é interrompida pelo retorno do operador. Se o último cheque mostrou que a ordem analisada é uma ordem de mercado, o número total de pedidos para um título é calculado e analisado. Para a primeira dessas ordens são definidas todas as características necessárias. Se na próxima iteração o contador de ordens (variável Total) encontrar a segunda ordem de mercado, a situação também é considerada como conflito, porque a EA não pode gerenciar mais de uma ordem de mercado. Nesse caso, a execução start () é interrompida depois de mostrar uma mensagem correspondente. Como resultado da execução do bloco de conta de ordem (se todas as verificações foram bem sucedidas) a variável Total preserva seu valor zero se não houver ordens de mercado ou obtém o valor 1 se houver uma ordem de mercado para nossa segurança. Neste último caso, algumas variáveis ​​ajustadas em correspondência com as características da ordem (número, tipo, preço de abertura, níveis de parada e valor da ordem) também obtêm seus valores. Cálculo dos Critérios de Negociação No exemplo analisado, a definição dos critérios de negociação (bloco 5-6) é calculada com base na diferença entre as Médias Móveis com diferentes períodos de média. De acordo com os critérios aceitos, um gráfico é dirigido ao touro se o valor atual do MA com período menor for maior do que o valor do MA com período maior ea diferença entre os valores for maior que um determinado valor. Em um movimento de urso MA com menor período é menor do que MA com maior período ea diferença é também maior do que um determinado valor crítico. Aos valores de início de bloco de MAs com períodos de média PeriodMA1 e PeriodMA2 são calculados. O fato de significância de qualquer critério de negociação é expresso através do valor de uma variável correspondente. Variáveis ​​OpnB e OpnS denotam o critério de disparo para abertura de ordens de compra e venda, variáveis ​​Cls e ClsS - para fechamento. Por exemplo, se um critério para abrir o Buy não for acionado, o valor de OpnB permanecerá falso (definido na inicialização da variável) se ele tiver disparado, o OpnB obtém o valor true. Neste caso, o critério de fechamento Sell coincide com o de abertura de compra, o critério de abertura Sell coincide com o de fechamento Buy. Os critérios de negociação aceitos neste exemplo são usados ​​apenas para fins educacionais e não devem ser considerados como uma orientação ao negociar em uma conta real. Encerramento Ordens Foi escrito anteriormente que este Expert Advisor destina-se a ser operado apenas com uma ordem de mercado aberta para uma segurança, para qual janela o EA está anexado. No momento em que o controle no programa é passado para o bloco de fechamento de pedido, é sabido com certeza que no momento atual não há ordens para a segurança, ou há apenas uma ordem de mercado. É por isso que o código no bloco de fechamento de pedidos é escrito para que apenas uma ordem possa ser fechada com sucesso. Este bloco é baseado no loop infinito, enquanto o corpo do qual consiste em duas partes análogas: uma para fechar uma ordem de compra, outra para fechar uma ordem de venda. Embora seja usado aqui para o propósito de que, no caso de uma falha operação comercial poderia ser repetido mais uma vez. No cabeçalho do primeiro operador se for calculada a condição para fechar uma ordem de compra (as ordens de venda são fechadas de forma análoga). Se o tipo de uma ordem aberta anterior corresponder a Compra (consulte Tipos de Operações) e o sinal para fechar Compra for relevante, o controle será passado para o corpo do operador se for formado um pedido de fechamento. Como um preço de fechamento de ordem na função OrderClose () o valor de uma cotação de dois lados correspondente ao tipo de ordem é indicado (consulte Requisitos e Limitações na Criação de Negócios). Se uma operação comercial é executada com sucesso, depois de uma mensagem sobre o encerramento da ordem é mostrada a corrente enquanto a iteração é interrompida e a execução do bloco de fechamento da ordem é mais. Mas se a operação falhar, a função definida pelo usuário para erros de processamento FunError () é chamada (bloco 10-11). Processando Erros Como um parâmetro passado em FunError () o último código de erro calculado por GetLastError () é usado. Dependendo do código de erro, FunError () retorna 1 se o erro não for crítico ea operação pode ser repetida, e 0 se o erro for crítico. Os erros críticos são divididos em dois tipos - aqueles, após os quais uma execução do programa pode ser continuada (por exemplo, um erro comum) e aqueles, após o que a execução de quaisquer operações comerciais deve ser interrompido (por exemplo, a conta bloqueada). Se após uma operação de troca mal sucedida a função definida pelo usuário retorna 1, a corrente enquanto a iteração é terminada e durante a próxima iteração outra tentativa é feita para executar a operação - para fechar a ordem. Se a função retorna 0, a execução atual start () é interrompida. No próximo tick start () será iniciado pelo terminal cliente novamente e se as condições para o encerramento da ordem forem preservadas, outra tentativa de fechar a ordem será feita. Se durante o processamento de erro se verificar que a execução adicional do programa é sem sentido (por exemplo, o programa opera numa versão de terminal antigo) durante o próximo início a execução da função especial start () será terminada no bloco de processamento preliminar quando Analisando o valor da variável Trabalho. Cálculo da quantidade de lotes para novas encomendas A quantidade de lotes pode ser calculada de acordo com as configurações de um usuário seguindo uma das duas variantes. A primeira variante é um determinado valor constante configurado por um usuário. De acordo com a segunda variante, o montante dos lotes é calculado com base numa soma igual a uma certa percentagem (definida por um utilizador) de uma margem livre. No início do bloco de definição da quantidade de lotes para novos pedidos (bloco 7-8) são calculados os valores necessários de algumas variáveis ​​- quantidade mínima permitida de lotes e etapa de mudança de lote estabelecida por um corretor, margem livre e preço de Um lote para a segurança. Neste exemplo, o seguinte é fornecido. Se um usuário tiver configurado um certo valor não-zero da variável externa Lts, por exemplo 0,5, é aceito como a quantidade de lotes Lts quando uma solicitação de negociação para abrir uma ordem é formada. Se 0 é atribuído a Lts, o número de lotes Lts é definido com base na variável Prots (percentagem), margem livre e condições estabelecidas por um corretor. Após Lts é calculado, uma verificação é conduzida. Se esse valor for menor que o valor mínimo permitido, o valor mínimo permitido será aceito. Mas se a margem livre não for suficiente, após uma mensagem correspondente a execução start () é terminada. Ordens de Abertura O bloco de ordens de abertura (bloco 8-9) como o tipo de ordens de abertura é um loop infinito enquanto. No cabeçalho do primeiro operador, são calculadas as condições para abrir uma ordem de compra: se não houver pedidos para a segurança (a variável Total é igual a 0) eo sinal para abrir uma ordem de compra é relevante (OpnB é verdadeiro), o controle É passado para se o corpo do operador para abrir uma ordem. Nesse caso, após as taxas serem atualizadas, os preços para os níveis de parada são calculados. Valores de níveis de parada são inicialmente definidos por um usuário em variáveis ​​externas StopLoss e TakeProfit. Em um caso geral, um usuário pode definir valores para esses parâmetros menores que um corretor permite. Além de um corretor pode alterar a distância mínima permitida a qualquer momento (é um caso, muitas vezes em movimentos de mercado forte, por exemplo, antes de lançamento de notícias importantes). É por isso que antes de cada ordem os níveis de paragem de abertura devem ser calculados tendo em conta os valores definidos para um utilizador e o valor mínimo permitido estabelecido por um corretor. Para calcular os níveis de parada, a função definida pelo usuário NewStop () é usada como um parâmetro passado, o valor do nível de parada definido por um usuário é usado. Em NewStop (), primeiro, a distância mínima permitida atual é calculada. Se o valor definido por um usuário corresponder a requisitos de corretores, esse valor será retornado. Se for menor do que o valor permitido, o valor permitido por um corretor é usado. Os preços dos pedidos de paragem são calculados a partir da cotação correspondente a dois lados (ver Requisitos e Limitações na Realização de Negociações). Uma solicitação de negociação para abrir uma ordem é formada usando a função OrderSend (). Para o cálculo do preço de abertura da ordem e dos preços das solicitações de parada, são utilizados os valores de cotação de dois lados correspondentes ao tipo de ordem. Se uma operação comercial foi bem sucedida (isto é, um servidor devolveu o número de uma ordem aberta) depois de ser apresentada uma mensagem sobre uma abertura de ordem bem sucedida. Start () é concluída. Se uma ordem não foi aberta eo terminal cliente retornou um erro, o erro é processado de acordo com o algoritmo descrito anteriormente. Algumas peculiaridades do código O código do Expert Advisor analisado está orientado para a implementação de uma determinada estratégia. Observe que algumas linhas de programa contêm variáveis ​​e cálculos que seriam alterados se a estratégia fosse alterada. Por exemplo, de acordo com a estratégia aceita, o Expert Advisor é desenvolvido para funcionar apenas com uma ordem. Isto permitiu utilizar a variável Ticket tanto para a identificação de um número de ordem de fecho (no bloco de fecho 6-7) como para a identificação de um sucesso de execução de uma operação comercial ao abrir uma ordem (no bloco de abertura 8-9 ). Neste caso, tal solução é aceitável. No entanto, se tomarmos o código analisado como a base para a implementação de outra estratégia (por exemplo, permitir ordens opostas) teremos que introduzir uma ou várias variáveis ​​para poder reconhecer o número de ordens abertas e identificar o sucesso das operações comerciais. Em outras modificações de estratégia, teremos que mudar as linhas de programa que contém parte das lógicas contidas na estratégia de origem. Nomeadamente no bloco de contabilidade de pedidos não teremos de encerrar a operação do programa se houver várias ordens abertas para uma segurança. Além disso, as condições para abrir e fechar pedidos também vão mudar. Isto implicará a alteração do código em blocos de ordens de abertura e de encerramento. Com base nesta análise, podemos facilmente concluir que o consultor perito descrito simples não é perfeito. In a general case, for the implementation of order accounting one should use a universal function based on using data arrays and not containing logics of a certain strategy. The same can be said about the blocks of opening and closing orders. A more complete program must contain a main analytical function, all other user-defined functions must be subordinate to it. This analytical function must contain a program code, in which all conditions for the implementation of any strategy are analyzed all subordinate functions must perform limited actions. The function of accounting orders must only account orders, functions of opening and closing orders must only open and close orders, and the analytical function must quotthinkquot and manage all other functions, i. e. call them when needed. The Moving Average Cross Expert Advisor The moving average cross is one of the most popular basic trading strategies. It uses two or more moving averages of different periods to determine the direction of the trend. When the faster moving average(s) is above the slower moving average(s), a long position is opened, and vice versa for a short position. The moving average cross excels during long, sustained trends as a mediumlong-range trading strategy. Strategies based on the moving average cross have always been frequently requested by our clients, and thats why we offer the moving average cross expert advisor. You can now purchase this popular expert advisor for over 50 off Formerly 45, the deluxe Moving Average Cross expert advisor is now only 19.95 Up to 3 Moving Average Lines . Use two moving averages, or add a third to filter out long-term trends. Moving Average Types . Simple . Exponential . Smoothed or Linear Weighted . Price Data . Choose from Close, Open, High, Low, Median, Typical or Weighted Close . Shift . Shift the moving average lines forward or backward. Multiple Timeframes . Each moving average can be set to any chart timeframe. Money Management - The lot size is automatically calculated so that the maximum risk per trade is limited to a percentage of your equity. Trailing Stop Break Even Stop - Automatically adjust the stop loss as the trade moves into profit. Set minimum profit levels, step trailing stop in increments and more Daily Trade Timer - Limit your intraday trading to the hours that the market is most active. You can optionally close all open orders at the end of the day. Manual Order Control - Place manual orders on your chart with a specified trade comment, and the MA Cross EA will trail the stop loss and close the order automatically on an opposite cross. Run Once Per Bar or Every Tick . Choose how often to check order opening and closing conditions. You can trade on every tick, or only on the close of each bar. Close On Cross - Close the currently opened position on a moving average cross in the opposite direction. If disabled, orders will only close on a stop loss or manually. Robust . Full error handling and notification, retry on requotes, and much more. Fully compatible with ECN and 5-digit brokers. Alerts - Choose between audio alerts, the built-in alert dialog, email alerts or notifications sent to your smartphone. You can purchase the Moving Average Cross EA instantly for only 19.95Adjustable MA Expert Advisor Adjustable MA Forex expert advisor is a customizable moving average EA that offers flexible tuning of the traditional 2-MA cross strategy. You can set different MA periods, MA types, minimum difference, stop-loss, take-profit, trailing stop and slippage. This expert advisor always opens position on cross and closes it on the next cross. The back-test of the Adjustable MA MetaTrader expert advisor has shown 12.2 profit with 12.6 maximum drawdown during a 6-year period. O volume da posição utilizada foi ajustado para 0,1 lotes padrão. The EA made 647 trades, of which 56.41 were profitable. As configurações padrão foram utilizadas neste back-test no gráfico EURUSD M5. As you can see, the results are not very good. It is not recommended to use this EA on live account. Quais são os stop-loss e take-profit utilizados por esta EA Por padrão, usa stop-loss fixo em 100 pips e take-profit em 70 pips. A parada de arrasto está desativada por padrão. How often does it trade On 5-minute EURUSD chart (the back-test settings) this EA will trade once every day on average. Any settings other than default can be used The limited forward test (which should be more reliable than a back-test) on AUDUSD M5 chart showed some profitable set-up for this expert advisor. These parameters should be changed from default: StopLoss mdash 30 TakeProfit mdash 50 TrailingStop mdash 20 Period1 mdash 50 Period2 mdash 10 This EA is ECN-compatible. É necessário definir o parâmetro de entrada ECNMode como true para habilitar a compatibilidade ECN para este consultor especialista. Caso contrário, você provavelmente verá mensagens OrderSend Error 130 quando o EA estiver tentando abrir posições. Isso ocorre porque, se você está negociando com um corretor ECN (com execução de mercado para ordens), você não pode definir SLTP na abertura de posição. Você tem que abrir uma posição primeiro sem SLTP e só depois modificá-lo, adicionando stop-loss andor take-profit nível. Discussão Aviso Antes de fazer perguntas básicas sobre a instalação dos consultores especializados, por favor, leia este MT4 Expert Advisors Tutorial para obter os conhecimentos elementares sobre como lidar com eles. Do you have your own trading results or any other remarks regarding this expert advisor Discuss Adjustable MA with other traders and MQL programmers on the experts forums. Stochastic Oscillator EA v2 About the Stochastic Oscillator The Stochastic Oscillator Indicator was developed in the late 1950s by Dr. George Lane. The term stochastic refers to the point of a current price in relation to its price range over a period of time. The stochastic oscillator show 2 lines (Main and Signal line) and s support and resistance level. He is included in Metatrader. The default settings are: K 5, D 3 Slowing 3. Trade logic of this forex robot The Stochastic Oscillator EA is a forex robot based on the Stochastic Oscillator with its Main Line, Signal Line and the Support and Resistance levels. He included 5 Stochastic based entry and 3 exit strategies. Crossover in OversoldOverbought Level: Trades if the Main and Signal lines crosses above or below the Support and Resistance levels. Main Line BreakIn: Opens a long trade if the Main Line breaks into the above Level. Vice versa for short trade. Main Line BreakOut: Opens a long trade if the Main Line breaks out of the above Level. Vice versa for short trade. Signal Line BreakIn: Opens a long trade if the Signal Line breaks into the above Level. Vice versa for short trade. Signal Line BreakOut: Opens a long trade if the Signal Line breaks out of the above Level. Vice versa for short trade. Exit On Crossover: Closes the trade on a crossover of the main and signal lines. Main Line BreakThrough: Closes the trade if the Main Line crosses the predefined level. Signal Line BreakThrough: Closes the trade if the Signal Line crosses the predefined level. Stochastic Level Mode If you set the Stochastic Level Mode to 8220Use only buy level8221 the Sell Entry Level and Sell Exit Levels will be calculated based on the Buy Levels like this: Sell Entry Level 100-Buy Entry Level. Sell Exit Level 100-Sell Entry Level. Included functions All versions have variable Magic Number, Take Profit, Stop Loss, Lot Size and Slippage. Does the inverse strategy initiate trades on the same cross, i. e. crossing support from above or resistance from below. I bought your EA but am looking for an inverse stoch strategy that initiates a sell when stoch crosses down from above resistance and initates a buy when it crosses up from below support. Any way to use this EA to do that I would also like to add an MACD filter ( only when buying, 8211 only when selling) This is the closest I8217ve gotten to any EA that would do this for me. Could I pay you to Mod it for these specs The inverse strategy works exactly the same way as the normal strategy does, but it only opens a sell trade instaed of a buy trade and a buy instaed of a sell. I am not planning to add a MACD filter. But I can make a modification for you. Please contact me here .

No comments:

Post a Comment