Moving average expert advisor code


Normalmente, duas médias móveis podem ser usadas para criar uma estratégia de forex (EA para MT4) com estas regras: Comprar quando a média móvel de curto período está acima da média móvel de longo período Vender quando a média móvel de longo período está acima da média móvel de curto período No gráfico a seguir do MetaTrader Terminal, a linha amarela é a média móvel de período curto (Period9) ea linha vermelha é a média móvel de período longo (Period18). Analizando o gráfico, poderíamos reescrever as regras de negociação ou sinais de forex como: Compre quando a linha amarela está acima da linha vermelha Venda quando a linha amarela está abaixo da linha vermelha Em vez de gastar muito tempo codificando esta estratégia forex, com Molanis Strategy Builder Você pode criar um diagrama de negociação que representa a estratégia de média móvel em minutos. Basta arrastar e soltar dois blocos de análise técnica, um bloco de compra e um bloco de venda. Conecte-os e defina os parâmetros de bloco para obter um diagrama como o seguinte: Este diagrama de negociação tem dois caminhos comerciais. A esquerda é realçada. Ele vai do bloco START ao bloco END. Podemos lê-lo como: Compre 1 lote de EURCAD (com um 100 Pip Take Profit e 50 pip Stop Loss) quando a média móvel de curto período (9) está acima da média móvel de longo período (18). Lembre-se de ler o diagrama de negociação em sentido oposto ao fluxo de negociação. O caminho correto de negociação pode ser lido como: Vender 1 lote de EURCAD (com um 100 Pip Take Profit e 50 pip Stop Loss) quando a média móvel de longo período (18) está acima da média móvel de curto período (9). Gerando o código MQL para o MetaTrader com apenas um clique No menu Diagrama de negociação, clique em Gerar código MQL4 para obter a janela do código MQL4. Molanis Strategy Builder permite que você abra seu consultor perito diretamente com MetaTrader ou salvá-lo como um arquivo MQ4. Não perca nosso tutorial de vídeo onSimple 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 de 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 está 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 descida), ou como um movimento de preços flat-lateral com desvios fracos de uma certa 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, a que irá 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 novamente, 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 não 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 forma 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 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 da ordem, é 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 qual a execução de qualquer operação comercial deve ser interrompida (por exemplo, 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 um pedido. 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 é 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. In further strategy modifications we will have to change come program lines containing part of logics contained in the source strategy. Namely in the order accounting block we will not have to terminate the program operation if there are several open orders for a security. Besides, conditions for opening and closing orders will alslo change. This will entail the code changing in blocks of opening and closing orders. On the basis of this analysis we can easily conclude that the described simple Expert Advisor is not perfect. 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. Ele usa duas ou mais médias móveis de diferentes períodos para determinar a direção da tendência. Quando a (s) média (s) mais rápida (s) está acima da (s) média (s) mais lenta (s), uma posição longa é aberta e vice-versa para uma posição curta. A cruz média móvel se destaca durante tendências longas e sustentadas como uma estratégia de negociação de médio prazo. Estratégias baseadas no cruzamento de média móvel sempre foram freqüentemente solicitados por nossos clientes, e é por isso que nós oferecemos a média móvel especialista cross cross. Agora você pode comprar este consultor especialista popular para mais de 50 off Anteriormente 45, o consultor especialista de Luxo Moving Average Cross agora é apenas 19,95 Até 3 Moving Average Lines. Use duas médias móveis ou adicione uma terceira para filtrar as tendências de longo prazo. Tipos de média móvel. Simples. Exponencial. Alisado ou Linear Ponderado. Dados de Preços. Escolha entre Fechar, Abrir, Alta, Baixa, Mediana, Típica ou Ponderada Fechar. Mudança . Desloque as linhas de média móvel para a frente ou para trás. Múltiplos prazos. Cada média móvel pode ser definida para qualquer período de tempo do gráfico. Gestão de Dinheiro - O tamanho do lote é calculado automaticamente para que o risco máximo por negócio seja limitado a uma percentagem do seu capital próprio. Trailing Stop Break Even Stop - Automaticamente ajustar a perda stop como o comércio se move em lucro. Definir os níveis mínimos de lucro, passo arrastar parar em incrementos e mais Daily Trade Timer - Limite o seu comércio intraday para as horas que o mercado está mais ativo. Você pode opcionalmente fechar todas as ordens abertas no final do dia. Manual Order Control - Coloque ordens manuais em seu gráfico com um comentário comercial especificado, eo MA Cross EA irá rastrear a perda de parada e fechar a ordem automaticamente em uma cruz oposta. Executar uma vez por barra ou cada Tick. Escolha com que frequência verificar as condições de abertura e fecho da encomenda. Você pode negociar em cada carrapato, ou apenas no final de cada barra. Close On Cross - Feche a posição atualmente aberta em uma cruz de média móvel na direção oposta. Se desativado, as ordens serão fechadas apenas em stop loss ou manualmente. Robusto. Manuseio e notificação de erros completos, repetição em requotes e muito mais. Totalmente compatível com ECN e corretores de 5 dígitos. Alertas - Escolha entre os alertas de áudio, a caixa de diálogo de alerta incorporada, os alertas por e-mail ou as notificações enviadas para o smartphone. Você pode comprar o Moving Average Cross EA instantaneamente por apenas 19.95

Comments

Popular Posts