Simple moving average ea mq4


MetaTrader 4 - Peritos Média Móvel - expert para MetaTrader 4 O especialista em Média Móvel para formar sinais de negociação usa uma média móvel. Abertura e fechamento de posições são realizadas quando a média móvel atende ao preço na barra recém-formada (índice de barra igual a 1). O tamanho do lote será otimizado de acordo com um algoritmo especial. O consultor especialista analisa a concordância da média móvel e do gráfico de preços de mercado. A verificação é executada pela função CheckForOpen (). Se a média móvel atender a barra de tal forma que a primeira seja maior que o preço Aberto, mas menor do que o preço Fechado, a posição COMPRAR será aberta. Se a média móvel atender a barra de tal forma que a primeira seja menor do que o preço Aberto, mas maior que o preço de fechamento, a posição VENDER será aberta. O Money Management usado no especialista é muito simples, mas efetivo: o controle sobre cada volume de posição é executado dependendo dos resultados das transações anteriores. Este algoritmo é implementado pela função LotsOptimized (). O tamanho básico do lote é calculado com base no risco máximo permitido: O parâmetro MaximumRisk exibe a porcentagem básica de risco para cada transação. Geralmente possui um valor entre 0,01 (1) e 1 (100). Por exemplo, se a margem livre (AccountFreeMargin) for igual a 20.500 e as regras de gerenciamento de capital prescrevem para usar o risco de 2, o tamanho básico do lote fará com que 20500 seja 0,02 / 1.000 0,41. É muito importante controlar a precisão do tamanho do lote e normalizar o resultado com os valores permitidos. Normalmente, lotes fracionários com passo de 0,1 são permitidos. Uma transação com volume de 0,41 não será executada. Para normalizar, a função NormalizeDouble () é usada com precisão de até 1 caractere após o ponto. Isso resulta no lote básico de 0,4. O cálculo do lote básico com base na margem livre permite aumentar os volumes de operação dependendo do sucesso comercial, ou seja, negociar com o reinvestimento. Este é o mecanismo básico com gerenciamento de capital obrigatório para aumentar a efetividade do negócio. DecreaseFactor é a medida em que o tamanho do lote será reduzido após negociações não lucrativas. Valores normais são 2,3,4,5. Se as transações anteriores não forem lucrativas, os volumes subseqüentes diminuirão por um fator DecreaseFactor para aguardar o período não lucrativo. Esse é o principal fator no algoritmo de gerenciamento de capital. A idéia é muito simples: se a negociação está aumentando com sucesso, o especialista trabalha com o lote básico para obter o máximo lucro. Após a primeira transação não lucrativa, o especialista reduzirá a velocidade até que uma nova transação positiva seja feita. O algoritmo permite desabilitar a redução de velocidade, pois, para isso, é necessário especificar DecreaseFactor 0. O valor das últimas transações não lucrativas sucessivas é calculado no histórico de transações. O lote básico será recalculado com base nisso: Assim, o algoritmo permite efetivamente reduzir o risco que ocorre como resultado de uma série de transações não lucrativas. O tamanho do lote é obrigatoriamente verificado pelo tamanho mínimo permitido do lote no final da função, porque os cálculos feitos anteriormente podem resultar no lote 0: O especialista destina-se principalmente a trabalhar com período diário e no modo de teste - para fazer a preços reduzidos. Ele será negociado apenas na abertura de uma nova barra, é por isso que os modos de modelagem de cada tick não são necessários. Os resultados dos testes são representados no relatório. Simples Expert Advisor Problem 29. Crie um Expert Advisor de negociação. Argumentos preliminares Antes de começar a programar um Expert Advisor de negociação, é necessário definir os princípios gerais de um programa futuro. Não há regras rígidas de criação de programa. No entanto, depois de ter criado um programa, um programador geralmente continua a melhorá-lo. Para ser capaz de compreender facilmente o programa no futuro, ele deve ser criado de acordo com um esquema bem pensado e fácil de entender (é especialmente importante que um programa seja melhorado por outro programador). O programa mais conveniente é aquele que consiste em blocos funcionais, cada um dos quais é responsável por sua parte de cálculos. Para criar um algoritmo de um Expert Advisor, analise o que um programa operacional deve fazer. Um dos dados mais importantes na formação de ordens de negociação é a informação sobre ordens que já existem em um terminal de cliente. Algumas das estratégias de negociação permitem apenas uma ordem unidirecional. Geralmente, se uma estratégia de negociação permitir, várias ordens podem ser abertas em um terminal ao mesmo tempo, embora seu número deva ser razoavelmente limitado. Ao usar qualquer estratégia, as decisões comerciais devem ser tomadas levando em conta a situação atual. Antes que uma decisão comercial seja feita em um programa, é necessário saber quais ordens de negociação já foram abertas ou colocadas. Primeiro de tudo, um programa deve conter um bloco de contabilidade de ordens que está entre os primeiros a serem executados. Durante uma execução de EA, as decisões de negociação devem ser tomadas, cuja implementação leva à execução de operações de negociação. Parte de código responsável pela formação de ordens de negociação é melhor escrita em um bloco separado. Um Expert Advisor pode formar uma solicitação de negociação para abrir uma nova ordem pendente ou de mercado, fechar ou modificar qualquer um dos pedidos existentes ou não executar nenhuma ação. Um EA também deve calcular os preços do pedido, dependendo do desejo do usuário. As decisões comerciais devem ser tomadas em um programa com base em critérios comerciais. O sucesso de todo o programa depende da exatidão de se detectar critérios comerciais no programa. Ao calcular critérios comerciais, um programa pode (e deve) levar em conta todas as informações que podem ser úteis. Por exemplo, um Expert Advisor pode analisar a combinação de valores de indicadores técnicos, tempo de notícias importantes, hora atual, valores de alguns níveis de preços, etc. Por conveniência, a parte do programa responsável pelo cálculo dos critérios de negociação deve ser escrita em separado. quadra. Um Expert Advisor de negociação deve necessariamente conter um bloco de processamento de erros. A análise de erros que podem ocorrer na execução da operação de negociação permite, por um lado, repetir uma solicitação de negociação e, por outro lado, informar um usuário sobre uma possível situação de conflito. Estrutura de um Expert Advisor Simples Abaixo está um esquema estrutural de um Expert Advisor simples, construído com base em vários blocos funcionais, em cada bloco, uma certa parte destacada dos cálculos. No estágio de desenvolvimento do EA a seguir, ainda não há código de programa. Ao mesmo tempo, o algoritmo de um programa é em grande parte formado. Como o EA construído sobre as bases do esquema oferecido irá operar pode ser facilmente entendido simplesmente olhando o esquema e orientando sobre os nomes de blocos e matrizes de relações (controle de passagem) entre eles. Depois que o controle de início do programa é passado para o bloco de processamento preliminar. Neste bloco, alguns parâmetros gerais podem ser analisados. Por exemplo, se não houver barras suficientes em uma janela (barras necessárias para calcular parâmetros de indicadores técnicos), um EA não poderá operar adequadamente. Nesse caso, um EA deve encerrar a operação preliminarmente informando um usuário sobre ele e relatando o motivo da rescisão. Se não houver contra-indicações de caráter geral, o controle é passado para ordenar o bloqueio contábil. No bloco de ordens contábeis, o número e a qualidade dos pedidos existentes em um terminal do cliente para uma segurança (para a janela da qual o EA está anexado) são detectados. Neste bloco, as ordens de outros títulos devem ser eliminadas. Se uma estratégia de negociação programada exigir o uso apenas de ordens de mercado (e não usar ordens pendentes), o fato da presença de ordens pendentes deve ser detectado. Se uma estratégia admite apenas uma ordem de mercado e na verdade existem várias ordens, esse fato também deve ser conhecido. A tarefa do bloco de contabilidade de pedidos (neste esquema) é definir se a situação atual de negociação corresponde a uma situação esperada, ou seja, aquela em que o EA pode operar adequadamente. Se a situação corresponder, o controle deve ser passado para o próximo bloco para continuar a operação dos EAs, caso contrário, a operação dos EAs deve ser finalizada e esse fato deve ser relatado a um usuário. Se não houver pedidos no terminal ou o número e a qualidade dos pedidos existentes corresponderem ao esperado, o controle será passado para o bloco de definição dos critérios de negociação. Neste bloco são calculados todos os critérios necessários para a tomada de decisões comerciais, ou seja, critérios para abertura, fechamento e modificação de ordens. Mais controle é passado para o bloco de ordens de fechamento. É fácil entender por que, no esquema oferecido, o bloco de ordens de fechamento é executado antes do bloco de ordens de abertura. É sempre mais razoável processar os primeiros pedidos existentes (fechar ou modificar) e somente depois disso abrir novos pedidos. Geralmente, é correto ser guiado pelo desejo de ter o mínimo de ordens possível. Durante a execução deste bloco todas as ordens, para as quais o critério de fechamento foi ativado, devem ser fechadas. Depois que todos os pedidos necessários foram fechados, o controle é passado para um bloco de cálculo de tamanho de novos pedidos. Existem muitos algoritmos para calcular um volume de pedidos. O mais simples deles é usar um tamanho de lote fixo e constante. É conveniente usar esse algoritmo em um programa para testar estratégias. O método mais popular de definir um tamanho de pedido é definir o número de lotes, dependendo da quantidade de margem livre, por exemplo, de 30 a 40. Se a margem livre não for suficiente, o programa encerra sua operação informando o usuário sobre o motivo. Após o número de lotes para abertura de novos pedidos ser definido, o controle é passado para o bloco de abertura do pedido. Se algum dos critérios calculados anteriormente apontar para a necessidade de abrir uma ordem de um certo tipo, um pedido de negociação para abrir um pedido é formado neste bloco. Há também um bloco de análise de erros em um Expert Advisor. Se alguma operação de negociação falhou, o controle (somente neste caso) é passado para o bloco de processamento de erros. Se um erro retornado por um servidor ou terminal de cliente não for crucial, mais uma tentativa será feita para executar uma operação de negociação. Se um erro crucial for retornado (por exemplo, uma conta é bloqueada), um EA deve encerrar sua operação. Lembre-se, no MQL4 não há possibilidade de o programa terminar uma operação do EA em uma janela de segurança (diferentemente dos scripts, veja Funções Especiais). O que pode ser feito de uma maneira de programa é o término de start (). Em um novo início da função start () em um novo tick, o valor de um determinado flag de proibição de flag variável (neste caso habilitado como resultado de um erro crítico) pode ser analisado e o controle pode ser passado para o término do operação de função especial, a formação de novo pedido de comércio não é permitida. No esquema oferecido, o valor da bandeira é analisado no bloco de processamento preliminar. Estratégia de Negociação Os preços do mercado estão em constante movimento. O estado de mercado a qualquer momento pode ser condicionalmente caracterizado como uma tendência - forte mudança de preço unidirecional (aumento ou queda), ou como um movimento de preço flat-lateral com desvios fracos de uma certa média. Essas características de mercado são condicionais, porque não há critérios claros, de acordo com qual tendência ou flat podem ser identificados. Por exemplo, movimentos laterais longos com fortes desvios que não podem ser traçados nem em um plano nem em uma tendência. Geralmente assume-se que o mercado está principalmente no estado de movimento lateral e as tendências geralmente ocorrem 15-20 do tempo. Todas as estratégias de negociação também podem ser convencionalmente divididas em dois grupos principais. O primeiro grupo contém estratégias orientadas para planos. A idéia principal de tais estratégias é que, depois que um desvio evidente do preço deva retornar à posição anterior, é por isso que as ordens são abertas na direção contrária ao movimento do último preço. As estratégias do segundo grupo são estratégias de tendência, quando as ordens são abertas na mesma direção do movimento do preço de sal. Existem estratégias mais complicadas (combinadas). Tais estratégias levam em conta muitos fatores diferentes que caracterizam o mercado, como resultado, a negociação pode ser executada tanto no plano quanto na tendência. Não é difícil implementar a negociação de acordo com essa ou aquela estratégia tecnicamente - o MQL4 contém todos os meios necessários para isso. O principal trabalho na criação de uma vez própria estratégia consiste na busca de critérios de negociação. Critérios de Negociação Neste exemplo, tentaremos construir um Expert Advisor de tendência, ou seja, aquele que abrirá pedidos na direção do movimento de preços. Então, precisamos encontrar entre vários indicadores técnicos aqueles que detectam o início de uma tendência. Um dos métodos mais simples de pesquisar critérios de negociação é baseado na análise da combinação de MAs com diferentes períodos médios. A figura 111 e a figura 112 mostram a posição de dois MA diferentes (com períodos de média 11 e 31) em diferentes partes do mercado. Médias com pequeno período médio (linhas vermelhas) estão mais próximas de um gráfico de preços, sinuoso e móvel. Médias móveis com maior período de média (linha azul) são mais inertes, têm maior defasagem e estão mais distantes dos preços de mercado. Vamos prestar atenção aos lugares onde os MAs com diferentes períodos médios se cruzam e tentam decidir, se o fato do cruzamento MA pode ser usado como um critério de leitura. Fig. 111. Cruzamento de MA (11) e MA (31) quando a direção do movimento de preços muda. Na Fig. 111, vemos uma parte do mercado em que as ordens de abertura na direção do movimento de preços na passagem de MA são justificadas. No ponto A, a linha vermelha cruza a linha azul de baixo para cima, depois disso o preço de mercado continua crescendo por algum tempo. Além disso, o cruzamento de MA reverso indica a mudança de direção do movimento de preço. Se abrirmos uma ordem de compra no ponto A e fechá-la em B, obteremos lucro proporcional à diferença entre os preços A e B. Fig. 112. Cruzamento de MA (11) e MA (31) quando a direção do movimento de preços muda. Ao mesmo tempo, há outros momentos no mercado quando o MA se cruza, mas isso não leva a uma subida ou descida considerável dos preços (Fig. 112). Pedidos abertos no cruzamento do MA nesses momentos levarão a perdas. Se a venda for aberta em A e fechada em B, tal negociação trará perdas. O mesmo pode ser dito sobre uma ordem de compra aberta em B e fechada em C. O sucesso de toda a estratégia implementada com base no cruzamento de AM depende do número de peças que podem ser caracterizadas como tendências e planas. No plano, muitas vezes o cruzamento MA é um evento regular que interfere com qualquer estratégia de tendência. Inúmeros sinais falsos geralmente levam a perdas. É por isso que este cruzamento de MAs com diferentes períodos de média pode ser usado para construir estratégias de negociação apenas em combinação com outros sinais que provem uma tendência. Neste exemplo (para construir um Expert Advisor simples), teremos que recusar o uso deste sinal. Nós usaremos outro sinal. Analisando visualmente o caráter das mudanças de preço no mercado, podemos ver que uma alta ou baixa de preço de uma direção ocorre frequentemente como resultado de um movimento curto e forte. Em outras palavras, se em um curto período ocorreu um movimento forte, podemos esperar sua continuação em um período de médio prazo. A figura 113 mostra o período de mercado em que um movimento forte resultou na continuação da mudança de preço na mesma direção. Como o movimento forte da cota, podemos usar a diferença de MAs com diferentes períodos médios. Quanto mais forte o movimento, maior a defasagem do MA com maior período médio de MA com um pequeno período de média. Além disso, mesmo os movimentos de preços descontínuos fortes com retorno adicional não resultam numa grande diferença entre os MAs, isto é, numerosos sinais falsos não aparecem. Por exemplo, o salto de preço em 50 pontos com retorno adicional (no centro da Fig. 113) acarretou aumento de diferença entre os MAs apenas em 20 pontos. Ao mesmo tempo, um movimento realmente forte (que geralmente não é acompanhado por uma correção considerável) no ponto A resultou na diferença aumentar até 25 - 30 pontos. Se a ordem de compra for aberta quando um determinado valor de diferença entre os MAs for atingido, por exemplo, em A, o mais provável será que a ordem seja lucrativa quando um preço atingir um valor de ordem de parada predefinido. Vamos usar esse valor como um critério de negociação no nosso Expert Advisor. Número de pedidos Neste exemplo, analisamos um Expert Advisor que admite a presença de apenas um pedido de mercado, mas pedidos pendentes não são fornecidos. Tal abordagem é justificada não apenas neste exemplo, mas pode ser usada como base para qualquer estratégia. Geralmente, as ordens pendentes são usadas quando um desenvolvedor tem um critério bastante confiável para prever a mudança futura de preço com alta probabilidade. Se não houver tal critério, não há necessidade de usar pedidos pendentes. A situação em que várias ordens opostas para um título estão abertas também não pode ser considerada razoável. Foi escrito anteriormente que, do ponto de vista econômico, as ordens opostas são consideradas sem sentido, especialmente se os preços dos pedidos forem iguais (consulte Encerrando e Excluindo Pedidos). Nesse caso, devemos fechar um pedido por outro e esperar que um sinal abra uma ordem de mercado em uma determinada direção. Relação dos Critérios de Negociação A partir desta posição, torna-se claro quais as relações possíveis entre os critérios de negociação. A Figura 114 mostra três variantes de correlação de critérios de negociação, quando cada critério é importante (válido). Ações (abertura e fechamento de ordens de mercado) ocorrem no sentido horário nas figuras a seguir. Fig. 114. Correlação dos critérios de abertura e fechamento de ordens (aeb - correto, c - incorreto). A variante mais popular de um critério comercial corretamente formado é a variante a. Depois de ser aberto, uma ordem de compra do Mercado é mantida até o momento em que o critério exige o seu gatilho de fechamento. Depois disso, uma pausa ocorre quando nenhum pedido é aberto. Além disso, uma ordem de venda do mercado pode ser aberta. As condições para o fechamento de uma ordem de venda (de acordo com os critérios corretamente formados) ocorrem mais cedo do que as condições para a abertura de uma ordem de compra. No entanto, uma ordem de compra pode ser aberta novamente, se um critério de negociação exigir isso. Mas, de acordo com essa variante, uma ordem de mercado não pode ser aberta se houver uma ordem de mercado aberto na direção contrária. Correlação de critérios semelhantes está 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. Essa variante, como a variante a, não permite várias ordens abertas no terminal ao mesmo tempo em uma única garantia. A variante da 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 é insensato. Pode haver casos raros quando esta variante é parcialmente justificada. A abertura de uma ordem oposta é às vezes aceitável para compensar perdas ocorridas em pequenas correções após fortes movimentos de preços. Nesses casos, uma ordem oposta pode ser aberta com o mesmo valor ou menor que a já existente e, em seguida, fechada quando a correção é finalizada. Tal tática permite não interferir com a ordem "main" aberta na direção da tendência. Em geral, várias ordens de uma direção também são possíveis. Isso pode ser justificado quando um pedido aberto anteriormente é protegido por uma ordem Stop e o critério que aponta para o desenvolvimento do preço na mesma direção é acionado novamente. No entanto, ao criar essa estratégia, um desenvolvedor deve estar plenamente ciente de que, no caso de uma alteração brusca no movimento do preço, 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, usamos a variante b da correlação dos critérios de negociação. Todas as ordens de mercado abertas são fechadas por uma ordem de parada ou após um critério de abertura de uma ordem em triggers de direção oposta (aqui o critério de fechamento de compra coincide com o de abertura de venda e vice-versa). Tamanho de pedidos abertos Em qualquer estratégia de negociação, os tamanhos dos pedidos devem ser razoavelmente limitados. Em um caso simples, um tamanho de pedido fixo é usado em um Expert Advisor. Antes do início da operação do EA, um usuário pode definir qualquer tamanho de pedidos futuros e deixá-lo inalterado por algum tempo. Além disso, se o saldo for alterado, um usuário poderá definir um novo valor de números de lote de pedidos abertos. Um tamanho de pedido muito pequeno proporciona mais confiança na operação na imprevisível mudança de mercado, mas o lucro em caso de sucesso não será tão grande. Se o tamanho do pedido for muito grande, pode ser obtido um grande lucro, mas esse EA será muito arriscado. Normalmente, o tamanho dos pedidos abertos é configurado de modo que os requisitos de margem não excedam de 2 a 35% do saldo ou margem livre (se uma estratégia permitir apenas um pedido aberto, saldo e margem livre no momento anterior à abertura do pedido) igual). Neste exemplo, ambas as variantes são implementadas. Um usuário pode optar por indicar diretamente os valores dos pedidos ou definir o valor em porcentagem da margem livre. Detalhes de Programação Um Expert Advisor de tendência simples tradingexpert. mq4 construído com base em argumentos anteriores pode ter esta aparência: Descrevendo Variáveis ​​Um outro critério na estimativa de programa é sua legibilidade. Um programa é considerado como escrito corretamente, se puder ser lido facilmente por outros programadores, é por isso que todas as principais partes do programa e principais momentos que caracterizam a estratégia devem ser comentados. É também por isso que é recomendado 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 de seu primeiro uso (veja Tipos de Variáveis), por isso elas são declaradas na parte principal do programa. Todas as variáveis ​​locais da função start () são reunidas e descritas na parte superior da função (bloco 2-3) imediatamente após o cabeçalho da função. As regras de declarar variáveis ​​locais não exigem isso, 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 de programa superior e descobrir o significado e o tipo de qualquer variável. É muito conveniente na prática de programação. Bloco de processamento preliminar 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) valores de médias móveis necessários para o cálculo dos critérios. Além disso, o valor da variável Work é analisado. Na operação normal do EA, 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 essa variável e start () conclui sua operação. Este valor não será alterado no futuro, é por isso que o seguinte código não é executado. Nesse caso, a operação do programa deve ser interrompida e a razão do erro crítico deve ser detectada (se necessário, um centro de negociação deve ser contatado). Depois que a situação é resolvida, o programa pode ser iniciado novamente, isto é, o EA pode ser anexado a uma janela de segurança. Pedidos contábeis O Expert Advisor descrito permite trabalhar somente com uma ordem de mercado. A tarefa do bloco de contabilidade de ordens (bloco 4-5) é definir as características de uma ordem aberta, se houver uma. No loop, passando por ordens para todas as ordens de mercado e pendentes existentes são verificadas, ou seja, do primeiro (int i1) para o último (iampltOrdersTotal ()). Em cada iteração de ciclo, o próximo pedido é selecionado pela função OrderSelect (). A seleção é feita a partir de uma fonte de ordens abertas e pendentes (SELECTBYPOS). Se a seleção for executada com sucesso (ou seja, houver mais uma ordem no terminal), é necessário analisar essa ordem e a situação: se a ordem está aberta para a segurança na qual a EA opera, se a ordem é de mercado ou pendente também deve ser levado em consideração ao contar pedidos. Na linha: todas as ordens abertas para outra segurança são eliminadas. Operador continua interrompe a iteração e as características de tal ordem não são processadas. Mas se o pedido for aberto para a segurança, para a janela da qual o EA é anexado, ele é analisado posteriormente. Se OrderType () retorna um valor maior que 1 (veja Types of Trades), o pedido selecionado é um pendente. Mas neste Expert Advisor, o gerenciamento de pedidos pendentes não é fornecido. Isso significa que a execução de start () deve ser finalizada, porque ocorreu uma situação de conflito. Nesse caso, após uma mensagem sobre o término da operação, a execução do start () é interrompida pelo retorno do operador. Se a última verificação mostrou que a ordem analisada é uma ordem de mercado, o número total de ordens para uma garantia é calculado e analisado. Para o primeiro de tais ordens, todas as características necessárias são definidas. Se na próxima iteração o contador de ordem (variável Total) encontrar a segunda ordem de mercado, a situação também será considerada em conflito, porque o 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 bloqueio contábil de pedidos (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. No último caso, algumas variáveis ​​configuradas em correspondência com as características do pedido (número, tipo, preço de abertura, níveis de parada e valor do pedido) 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 Médias Móveis com diferentes períodos de média. De acordo com os critérios aceitos, um gráfico é direcionado a touro se o valor atual do MA com período menor for maior que o valor de MA com período maior, e a diferença entre os valores for maior que um determinado valor. Em um movimento de urso, o MA com período menor é menor que o MA com maior período e a diferença também é maior do que um determinado valor crítico. No bloco, os valores iniciais de MAs com os períodos médios PeriodMA1 e PeriodMA2 são calculados. O fato de significado de qualquer critério de negociação é expresso através do valor de uma variável correspondente. As variáveis ​​OpnB e OpnS denotam o critério de acionamento para abertura de ordens de compra e venda, variáveis ​​Cls e ClsS - para fechamento. Por exemplo, se um critério para abrir Buy não for acionado, o valor de OpnB permanecerá falso (definido na inicialização da variável) se tiver sido acionado, OpnB obterá o valor true. Neste caso, o critério para o fechamento do Sell coincide com o da abertura do Buy, o critério para a abertura do Sell coincide com o do fechamento do 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 diretriz ao negociar em uma conta real. Ordens de Encerramento Foi escrito anteriormente que este Expert Advisor é destinado para operação somente com uma ordem de mercado aberta para uma segurança, para qual janela o EA está anexado. Para o momento em que o controle no programa é passado para o bloco de fechamento de pedidos, sabe-se com certeza que no momento atual não há pedidos para a segurança, ou existe apenas uma ordem de mercado. É por isso que o código no bloco de fechamento de pedidos é escrito para que apenas um pedido possa ser fechado com êxito. Este bloco é baseado no laço infinito enquanto, o corpo do qual consiste de duas partes análogas: uma para fechar uma ordem de compra, outra para fechar uma ordem de venda. Enquanto é usado aqui para o propósito que no caso de uma falha na operação de negociação, ele pode ser repetido novamente. No cabeçalho do primeiro operador, se a condição para o fechamento de uma ordem de compra é calculada (ordens de venda são fechadas de maneira análoga). Se o tipo de um pedido aberto anteriormente corresponder a Comprar (consulte Tipos de Negociações) e o sinal de fechamento de Compra for relevante, o controle será passado para o corpo do operador se um pedido de fechamento for formado. Como um preço de fechamento de pedido na função OrderClose (), o valor de uma cotação em dois lados correspondente ao tipo de pedido é indicado (consulte Requisitos e limitações na realização de negociações). Se uma operação de negociação for executada com sucesso, depois que uma mensagem sobre o fechamento da ordem for mostrada, a corrente enquanto a iteração é interrompida e a execução do bloco de fechamento da ordem termina. Mas se a operação falhar, a função definida pelo usuário para processar os erros 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 e a operação puder ser repetida, e 0 se o erro for crítico. Erros críticos são divididos em dois tipos - aqueles, após os quais a execução de um programa pode ser continuada (por exemplo, um erro comum) e aqueles após os quais a execução de qualquer operação de negociação deve ser interrompida (por exemplo, conta bloqueada). se depois de uma operação de negociação malsucedida 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 retornar 0, a execução atual do start () será interrompida. No próximo tick start () será iniciado pelo terminal do cliente novamente e se as condições para o fechamento do pedido forem preservadas, outra tentativa de fechar o pedido será feita. Se durante o processamento de erros for descoberto que a execução de um programa adicional é sem sentido (por exemplo, o programa opera em uma versão antiga do terminal cliente) durante a próxima partida, a execução da função especial start () será encerrada no processamento preliminar quando analisando o valor da variável Work. Cálculo do Montante de Lotes para Novos Pedidos O volume de lotes pode ser calculado de acordo com as configurações dos usuários, seguindo uma das duas variantes. A primeira variante é um determinado valor constante configurado por um usuário. De acordo com a segunda variante, a quantidade de lotes é calculada com base em uma soma igual a uma determinada porcentagem (definida por um usuário) de uma margem livre. No início do bloco de definição da quantidade de lotes para novas ordens (bloco 7-8) são calculados os valores necessários de algumas variáveis ​​- quantidade mínima permitida de lotes e passo de mudança de lote definido por um corretor, margem livre e preço de lote. um lote para a segurança. Neste exemplo, o seguinte é fornecido. Se um usuário configurou um determinado valor diferente de zero da variável externa Lts, por exemplo 0,5, ele é aceito como a quantidade de lotes Lts quando um pedido de negociação para abrir um pedido é formado. Se 0 é atribuído a Lts, o número de lotes Lts é definido com base na variável Prots (porcentagem), margem livre e condições configuradas por um corretor. Depois que Lts é calculado, uma verificação é realizada. 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 () será finalizada. 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, se as condições para abrir uma ordem de compra forem calculadas: se não houver ordens para a segurança (a variável Total é igual a 0) e o sinal para abrir uma ordem de compra for relevante (OpnB for true), controle é passado para o corpo do operador para abrir um pedido. Nesse caso, após as tarifas serem atualizadas, os preços dos níveis de parada são calculados. Os valores dos níveis de parada são inicialmente definidos por um usuário nas variáveis ​​externas StopLoss e TakeProfit. Em um caso geral, um usuário pode definir valores para esses parâmetros menores que um broker permite. Além de um corretor pode alterar a distância mínima permitida a qualquer momento (é um caso frequente em movimentos de mercado fortes, por exemplo, antes do importante comunicado de imprensa). É por isso que, antes de cada ordem, os níveis de parada de abertura devem ser calculados levando em conta os valores definidos por um usuário e o valor mínimo permitido configurado por um corretor. Para calcular os níveis de parada, a função definida pelo usuário NewStop () é usada como parâmetro passado. O valor do nível de parada definido por um usuário é usado. Em NewStop () primeiro calcula-se a distância mínima permitida atual. Se o valor definido por um usuário corresponder aos requisitos de um agente, esse valor será retornado. Se for menor que o valor permitido, o valor permitido por um intermediário é usado. Os preços das solicitações de parada são calculados a partir da cotação de dois lados correspondente (consulte Requisitos e limitações na realização de negociações). Uma solicitação de negociação para abrir um pedido é formada usando a função OrderSend (). Para o cálculo do preço de abertura do pedido e dos preços dos pedidos de parada, os valores de cotação de dois lados correspondentes ao tipo de ordem são usados. Se uma operação de negociação foi bem-sucedida (isto é, um servidor retornou o número de um pedido aberto) depois que uma mensagem sobre uma abertura de pedido bem-sucedida é mostrada. start () a execução está terminada. Se um pedido não foi aberto e o terminal do 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 um pedido. Isto permitiu usar a variável Ticket tanto para a identificação de um número de ordem de fechamento (em bloco de fechamento 6-7) quanto para a identificação de um sucesso de uma operação de negociação 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 base para a implementação de outra estratégia (por exemplo, permitir ordens opostas), teremos de introduzir uma ou várias variáveis ​​para podermos reconhecer os números de pedidos abertos e identificar o sucesso das operações comerciais. Em outras modificações de estratégia, teremos que alterar as linhas de programa que contêm parte das lógicas contidas na estratégia de origem. Ou seja, no bloco contábil da ordem, não teremos que finalizar a operação do programa se houver vários pedidos em aberto para uma garantia. Além disso, as condições para abertura e fechamento de pedidos também mudam. Isso implicará na alteração do código em blocos de ordens de abertura e fechamento. 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. XP Moving Average XP Moving Average: Im one of Moving Average loyal fans, I like all the types of well known Moving Average: Simple moving average, Exponential moving average, Smoothed moving average, Linear weighted moving average, Double Exponential Moving Average, Triple Exponential Moving Average and T3 Moving Average. I like too see the Moving Average Indicator changes its color according to its direction (like red for up and blue for down). But where to find such XP Moving Average. I didnt find it, I created it to enjoy it together History (I dont remember the dates and time): Current version is version 4 But the name of the indicator still called xpMA. mq4 Version 1 was repainting the past now its not Added: Debug mode option which when you turn it on it will take screen shots of every tick to be proof that the indicator doesnt print the past. Added: Moving Average type 7 JMA. Added: Arrows upon color changes. Added Sound Alert upon color changes. Changed: The method of changing the color upon the direction change. Added: Signal buffer added to make it easy to make an EA based on the xpMA (-1 means sell signal, 1 means buy signal and 0 means nothing). Nota . the T3MA. mq4 and JMA. mq4 (included) are required files for the Moving Average type 6 and 7. ATTACHED THE UPDATED VERSION (Last Modification 2010.10.13) OF XPMA EA - MORE DETAILS: xpMA. zip 10 KB 2,614 downloads Uploaded Oct 22, 2010 9:49pm Thanks for everybody reads/reading my stuff I hope they were helpful Thanks for all of my friends here and there (no links please ) for their precious support and sweet words that making my days The xpMA is not more than All In One Moving Average which is like the normal MA plus: 1- It has the normal moving average types plus 4 of the most used moving average types added 2- It colors itself when the direction changes The Last version is attached in the first post but you can monitor the update at: xpworx/XP Moving Average Settings. htm And you can an Expert Advisor based on the xpMA at: xpworx/xpMA EA. htm Hope its helpful

Комментарии

Популярные сообщения