Wednesday 8 November 2017

Média Simples E Em Movimento


Normalmente, duas médias móveis podem ser usadas para criar uma estratégia forex (EA para MT4) com estas regras: Comprar quando a média móvel do período curto está acima da média móvel do período longo, quando a média móvel do período longo estiver acima da média móvel do período curto No gráfico a seguir do MetaTrader Terminal, a linha amarela é a média móvel do período curto (Period9) ea linha vermelha é a média móvel do período longo (Período 18). Analizando o gráfico, podemos reescrever as regras de negociação ou os sinais forex como: Compre quando a linha amarela estiver acima da linha vermelha Vender quando a linha amarela estiver abaixo da linha vermelha Em vez de passar muito tempo codificando essa estratégia forex, com Molanis Strategy Builder Você pode criar um diagrama de negociação que represente a estratégia da 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 do bloco para obter um diagrama como o seguinte: Este diagrama de negociação tem dois caminhos comerciais. A esquerda é destacada. Ele vai do bloco START para o bloco END. Pode-se lê-lo como: Compre 1 lote de EURCAD (com 100 p. Ex. Take Profit e 50 Stop Stop Stop) quando a média móvel do período curto (9) estiver acima da média móvel do período longo (18). Lembre-se de ler o diagrama de negociação em direção oposta ao fluxo de negociação. O caminho de negociação correto pode ser lido como: Vender 1 lote de EURCAD (com 100 p. Piras de Take Profit e 50 Stop Stop Stop) quando a média móvel do período longo (18) estiver acima da média móvel do período curto (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. O Molanis Strategy Builder permite que você abra seu consultor especialista diretamente com o MetaTrader ou para salvá-lo como um arquivo MQ4. Não perca o nosso tutorial de vídeo no Problema do Supervisor Especial de Problemas 29. Crie um Consultor Especialista em negociação. Argumentos preliminares Antes de começar a programar um consultor especialista em negociação, é necessário definir princípios gerais de um programa futuro. Não existem regras rígidas de criação de programas. No entanto, uma vez que criou um programa, um programador geralmente continua a melhorar. Para poder 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 for melhorado por outro programador). O programa mais conveniente é aquele que consiste em blocos funcionais, cada um dos quais é responsável pela parte dos cálculos. Para criar um algoritmo de um Expert Advisor de 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 pedidos que já existem em um terminal de cliente. Algumas estratégias de negociação permitem apenas uma ordem unidirecional. Geralmente, se uma estratégia de negociação permitir, vários pedidos podem ser abertos em um terminal ao mesmo tempo, embora o número deles seja razoavelmente limitado. Ao usar qualquer estratégia, as decisões comerciais devem ser feitas levando em consideração a situação atual. Antes que uma decisão comercial seja feita em um programa, é necessário saber quais ordens comerciais já foram abertas ou colocadas. Em primeiro lugar, um programa deve conter um bloco de contabilidade de pedidos que está entre os primeiros a serem executados. Durante uma execução EA, as decisões comerciais devem ser tomadas, cuja implementação leva à execução de operações comerciais. A parte do código responsável pela formação de pedidos comerciais é melhor escrita em um bloco separado. Um consultor especialista pode formar uma solicitação comercial para abrir uma nova ordem pendente ou de mercado, fechar ou modificar qualquer uma das ordens existentes ou não realizar nenhuma ação. Uma EA também deve calcular os preços das ordens dependendo do desejo dos usuários. As decisões de comércio devem ser feitas em um programa com base em critérios comerciais. O sucesso de todo o programa depende da correção da detecção de critérios comerciais no programa. Ao calcular critérios de comércio, um programa pode (e deve) ter em consideração 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 dos 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 dos critérios de negociação deve ser escrita de forma separada. quadra. Um consultor especializado em negociação deve necessariamente conter o bloco de processamento de erros. Analisar os erros que podem ocorrer na execução da operação comercial permite, por um lado, repetir um pedido comercial e, por outro lado, informar um usuário sobre uma possível situação de conflito. Estrutura de um consultor de especialistas simples Abaixo está um esquema estrutural de um consultor de especialistas simples construído com base em vários blocos funcionais, em cada bloco uma certa parte de cálculos separados. Na fase de desenvolvimento de EA a seguir, ainda não existe um código de programa. Ao mesmo tempo, o algoritmo de um programa é formado em grande parte. A forma como a EA construída nas bases do esquema oferecido irá operar pode ser facilmente entendida simplesmente olhando o esquema e orientando-se sobre nomes de blocos e matrizes de relações (passagem de controle) entre eles. Após o início do programa, o 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 poderá operar adequadamente. Nesse caso, uma EA deve encerrar a operação informando preliminarmente um usuário sobre isso e informando sobre o motivo do término. Se não houver contra-indicações de caráter geral, o controle é passado para o bloco de contabilização de pedidos. No bloco de ordens contábeis, o número e a qualidade das ordens existentes em um terminal do cliente para uma segurança (para a janela da qual o EA está anexado) são detectados. Neste bloqueio, as ordens de outros títulos devem ser eliminadas. Se uma estratégia de negociação programada requer o uso de apenas ordens de mercado (e não usa ordens pendentes), o fato da presença de ordens pendentes deve ser detectado. Se uma estratégia admite apenas uma ordem de mercado e existem várias ordens, esse fato também deve ser conhecido. A tarefa do bloco de contabilidade de ordem (neste esquema) é definir se a situação comercial atual corresponde a uma esperada, ou seja, na qual a EA pode operar adequadamente. Se a situação corresponder, o controle deve ser passado para o próximo bloco para continuar a operação EAs, caso contrário, a operação EAs deve ser encerrada e esse fato deve ser reportado a um usuário. Se não houver pedidos no terminal ou o número e a qualidade das ordens existentes correspondem ao esperado, o controle é passado para o bloco de definir os critérios de negociação. Neste bloco, todos os critérios necessários para a tomada de decisões comerciais são calculados, nomeadamente critérios para abrir, fechar e modificar ordens. O controle adicional é passado para o bloco de pedidos 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 para abrir novos pedidos. Geralmente, é correto guiar-se 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 de todas as ordens necessárias terem sido fechadas, o controle é passado para um bloco de cálculo de novos tamanhos de pedidos. Há muitos algoritmos para calcular um volume de pedidos. O mais simples é usar um tamanho de lote constante e fixo. É 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 30-40. 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 de pedidos. Se algum dos critérios calculados anteriormente aponta para a necessidade de abrir uma ordem de um determinado tipo, um pedido comercial para abrir uma ordem é formado neste bloco. Também há erro ao analisar o bloqueio em um consultor especializado. Se alguma operação comercial falhou, o controle (somente neste caso) é passado para o bloco de processamento de erro. Se um erro retornado por um servidor ou terminal cliente não for crucial, mais uma tentativa é feita para executar uma operação comercial. Se um erro crucial for retornado (por exemplo, uma conta é bloqueada), uma EA deve encerrar sua operação. Lembre-se de que, no MQL4, não há possibilidade de encerrar um programa de uma operação EAs em uma janela de segurança (diferente dos scripts, consulte Funções especiais). O que pode ser feito de forma programada é o término do início (). Em um novo começo da função start () em um novo tic, o valor de uma certa bandeira de variáveis ​​que proíbe a negociação (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, portanto, a formação de um novo pedido comercial 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 constantemente em movimento. O estado do mercado em 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 plano - lateral com desvios fracos de uma certa média. Essas características de mercado são condicionais, porque não há critérios claros, segundo os quais a tendência ou o plano podem ser identificados. Por exemplo, movimentos laterais longos com desvios fortes que não podem ser seguidos nem para um plano nem para uma tendência. Geralmente, presume-se que o mercado se situa principalmente no estado do movimento lateral e as tendências geralmente ocorrem 15-20 do tempo. Todas as estratégias comerciais também podem ser convencionalmente divididas em dois grupos principais. O primeiro grupo contém estratégias orientadas para o plano. A idéia principal de tais estratégias é que, após um preço de desvio evidente deve retornar à posição anterior, é por isso que 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ências, 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 consideração muitos fatores diferentes que caracterizam o mercado como resultado, a negociação pode ser executada tanto no plano como na tendência. Não é difícil implementar a negociação de acordo com esta ou essa 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 Consultor Especialista, ou seja, aquele 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 busca de critérios comerciais baseia-se na análise da combinação de MAs com diferentes períodos de média. A Fig. 111 e a Fig. 112 mostram a posição de duas MA diferentes (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 próximas de um gráfico de preços, torção e móveis. As médias móveis com um período maior de média (linha azul) são mais inertes, têm atraso maior e estão mais distantes dos preços do mercado. Vamos prestar atenção aos lugares onde MAs com diferentes períodos de média cruzam e tentam decidir se o fato de cruzamento de 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 do preço muda. Na Fig. 111, vemos uma parte do mercado, onde as ordens de abertura na direção do movimento de preços no cruzamento de AMs são justificadas. No ponto A, a linha vermelha cruza o azul de baixo para cima, depois disso o preço do mercado continua a crescer por algum tempo. O cruzamento adicional do MA indica a mudança na direção do movimento do preço. Se abrirmos uma ordem Comprar no ponto A e fechá-la em B, obteremos lucro proporcional à diferença dos preços A e B. Fig. 112. Cruzamento de MA (11) e MA (31) quando a direção do movimento do preço muda. Ao mesmo tempo, há outros momentos no mercado quando MA atravessa, mas isso não leva a um aumento ou queda de preços considerável (Fig. 112). As ordens abertas no cruzamento de MA em tais momentos levarão a perdas. Se a Vender for aberta em A e fechada em B, essa 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 MA depende do número de peças que podem ser caracterizadas como tendência e plana. Em piso, muitas vezes o cruzamento de MA é um evento regular que interfere com qualquer estratégia de tendências. Numerosos sinais falsos, em regra, conduzem a perdas. É por isso que este sinal - cruzamento de MAs com diferentes períodos de média - pode ser usado para construir estratégias de negociação somente em combinação com outros sinais que comprovem uma tendência. Neste exemplo (para construir um consultor de especialistas simples), teremos que recusar usar este sinal. Usaremos outro sinal. Analisando visualmente o caráter das mudanças de preços no mercado, podemos ver que um aumento ou queda de um longo preço de uma direção geralmente aparece como resultado de um curto movimento forte. Em outras palavras, se dentro de um curto período de tempo ocorreu um forte movimento, podemos esperar sua continuação em um período de médio prazo. A Fig. 113 mostra o período de mercado quando um forte movimento resultou na continuação da mudança de preço na mesma direção. Como o movimento forte da quota, 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 um período médio 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, ou seja, numerosos sinais falsos não aparecem. Por exemplo, o salto de preço em 50 pontos com retorno adicional (no centro na Fig. 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 certo valor de diferença entre MAs for atingido, por exemplo, em A, muito provavelmente a ordem será rentável quando um preço atingir um valor de ordem Stop pré-definido. Permite usar esse valor como critério de negociação no nosso Consultor Especialista. Número de encomendas Neste exemplo, analisamos um consultor especialista que admite presença de apenas um pedido de mercado, não são fornecidas ordens pendentes. Tal abordagem é justificada não só neste exemplo, mas pode ser usada como base para qualquer estratégia. As ordens pendentes geralmente são usadas quando um desenvolvedor possui um critério bastante confiável para prever a futura mudança de preço com alta probabilidade. Se não houver tal critério, não é necessário usar ordens pendentes. A situação em que várias ordens opostas para uma segurança está aberta 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 das ordens forem iguais (ver Encerramento e Apagar Pedidos). Nesse caso, devemos fechar uma ordem por outra e aguardar 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 fica claro quais as relações possíveis entre os critérios de negociação. A Fig. 114 mostra três variantes de correlação dos critérios de negociação, quando cada critério é importante (válido). As ações (abrir e fechar ordens de mercado) ocorrem no sentido horário nas seguintes fotos. Fig. 114. Correspondência de critérios de abertura e fechamento de ordem (a e b - correto, c - incorreto). A variante mais popular de um critério comercial corretamente formado é a variante a. Depois de abrir uma ordem de mercado, a compra é realizada até o momento em que o critério exige os gatilhos de fechamento. Depois disso, ocorre uma pausa quando não são abertas ordens. Além disso, uma venda de mercado pode ser aberta. As condições para fechar uma ordem de Venda (de acordo com os critérios corretamente formados) ocorrem anteriormente, do que as condições para abrir uma ordem Comprar. No entanto, uma ordem de compra pode ser aberta novamente, se um critério de negociação exigir 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 contrária. A correlação de critérios semelhante 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. Esta variante como a variante a não permite vários pedidos abertos no terminal ao mesmo tempo em uma segurança. A variante da correlação de critérios está incorreta. De acordo com esta variante, a abertura de um pedido de mercado é permitida quando as ordens contrárias ainda não estão fechadas, o que é sem sentido. Pode haver casos raros quando esta variante é parcialmente justificada. A abertura de uma ordem oposta às vezes é aceitável para compensar perdas que ocorrem em pequenas correções após fortes movimentos de preços. Nesses casos, uma ordem oposta pode ser aberta do mesmo ou menor valor do que já existente e depois fechada quando a correção acabou. Essa tática permite não interferir com o quotmainquot order aberto 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 uma ordem aberta anterior é protegida por uma ordem Stop e o critério apontando para o desenvolvimento de preços na mesma direção desencadeou mais uma vez. No entanto, ao criar essa estratégia, um desenvolvedor deve estar plenamente consciente de que, no caso de uma mudança de movimento de preço acentuada, 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. No nosso exemplo, usamos 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 parada ou após um critério de abertura de uma ordem em giros de direção oposta (aqui o critério de encerramento de Compra coincide com o de abertura de Vender e vice-versa). Tamanho das ordens abertas Em qualquer tamanho de ordem de estratégia comercial deve ser razoavelmente limitado. Em um caso simples, um tamanho de ordem fixa é usado em um consultor especialista. Antes de iniciar a 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 balanço muda, um usuário pode configurar um novo valor de lotes de pedidos abertos. Um tamanho de ordem muito pequeno proporciona 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 for muito grande, grande lucro pode ser adquirido, mas tal EA será muito arriscado. Normalmente, o tamanho das ordens abertas é configurado de modo que os requisitos de margem não excedam 2-35 por cento do saldo ou margem livre (se uma estratégia permite apenas uma ordem aberta, saldo e margem livre no momento antes da abertura do pedido será igual). Neste exemplo, ambas as variantes são implementadas. Um usuário pode escolher indicar valores diretamente de ordens ou definir o valor em porcentagem da margem livre. Detalhes da programação Uma tendência simples Expert Advisor tradingexpert. mq4 construído com base em argumentos anteriores pode ser assim: Descrevendo variáveis ​​Um critério mais na estimativa do programa é a legibilidade. Um programa é considerado corretamente escrito, se pode ser facilmente lido por outros programadores, é por isso que todas as principais partes do programa e os 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 do seu primeiro uso (ver Tipos de Variáveis), e é por isso que eles são declarados na parte da cabeça 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. Regras de declaração de variáveis ​​locais não exigem, mas também não proíbem. Se um programador tiver dificuldades para entender o significado de uma variável ao ler o programa, ele pode se referir à parte do programa superior e descobrir o significado eo 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 encerra a operação se não houver barras suficientes em uma janela de segurança nesse caso, é impossível detectar corretamente (no bloco 5-6) valores de médias móveis necessários para o cálculo de 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, falso é atribuído a esta variável e o início () termina a operação. Esse valor não será alterado no futuro, é por isso que o código a seguir não foi 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 contatado). Depois que a situação for resolvida, o programa pode ser iniciado novamente, ou seja, o EA pode ser anexado a uma janela de segurança. Ordens de contabilidade O Consultor Especializado descrito permite trabalhar apenas com uma ordem de mercado. A tarefa do bloco de contabilidade de ordens (bloco 4-5) é definir características de uma ordem aberta, se houver uma. No começo, as encomendas para todos os pedidos existentes no mercado e pendentes são verificadas, desde o primeiro (int i1) até o último (iampltOrdersTotal ()). Em cada ciclo, a ordem seguinte é selecionada pela função OrderSelect (). A seleção é feita a partir de uma fonte de pedidos pendentes e pendentes (SELECTBYPOS). Se a seleção for executada com sucesso (ou seja, há mais uma ordem no terminal), além disso, esta ordem e a situação devem ser analisadas: se a ordem é aberta para a segurança, na qual a EA opera, se a ordem é comercializada ou pendente Também deve ser levado em consideração na contagem de pedidos. Na linha: todos os pedidos abertos para outra segurança são eliminados. O operador continua para 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 da qual o EA está anexado, é analisado posteriormente. Se OrderType () retornar valor superior a 1 (veja Tipos de Negócios), a ordem selecionada é pendente. Mas neste consultor especializado, gerenciar ordens pendentes não é fornecido. Isso significa que a execução do início () deve ser encerrada, porque ocorreu uma situação de conflito. Nesse caso, após uma mensagem sobre o início da terminação da operação (), a execução é interrompida pelo retorno do operador. Se o último controle mostrou que a ordem analisada é uma ordem de mercado, o número total de pedidos de segurança é calculado e analisado. Para a primeira dessas ordens, todas as características necessárias são definidas. Se na próxima iteração o contador de pedidos (variável Total) encontrar a segunda ordem do mercado, a situação também é considerada um conflito, porque a EA não consegue gerenciar mais do que uma ordem de mercado. Em tal caso, a execução de início () é interrompida após mostrar uma mensagem correspondente. Como resultado da execução do bloco contábil da ordem (se todas as verificações tiverem sido bem-sucedidas), a variável Total preserva seu valor zero se não houver ordens de mercado ou obtiver o valor 1 se houver um pedido de mercado para nossa segurança. No último caso, algumas variáveis ​​definidas em correspondência com as características da ordem (número, tipo, preço de abertura, níveis de parada e valor de ordem) também obtêm seus valores. Cálculo de critérios de negociação Na definição de exemplo analisada de critérios de negociação (bloco 5-6) é calculada com base nas diferenças entre as médias móveis com diferentes períodos de média. De acordo com os critérios aceitos, um gráfico é dirigido por touros se o valor atual da MA com um período menor for maior do que o valor de MA com um período maior e a 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 e a diferença também é maior que um determinado valor crítico. Nos valores de início do 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. As variáveis ​​OpnB e OpnS indicam o critério desencadeante para abrir pedidos de compra e venda, variáveis ​​Cls e ClsS - para fechamento. Por exemplo, se um critério para abrir o Buy não tiver sido ativado, o valor de OpnB permanece falso (definido na inicialização da variável) se ele for disparado, o OpnB obtém o valor true. Nesse caso, o critério de fechamento da Vender coincide com o da abertura da Compra, o critério de abertura da Vareira coincide com o encerramento da Compra. Os critérios de negociação aceitos neste exemplo são usados ​​somente para fins educacionais e não devem ser considerados como diretriz ao negociar em uma conta real. Encomendas de encerramento Foi escrito anteriormente que este Consultor Especialista destina-se a operação apenas com um único pedido de mercado aberto para uma segurança, a qual janela anexada. No momento em que o controle no programa é passado para o bloco de fechamento da ordem, é conhecido 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 está escrito de modo que apenas uma ordem possa ser fechada com sucesso. Este bloco é baseado no loop infinito, enquanto o corpo é composto por duas partes análogas: uma para fechar uma ordem de compra, outra para fechar uma ordem de venda. Embora seja usado aqui com o objetivo de que, em caso de falha na operação comercial, possa ser repetida novamente. No cabeçalho do primeiro operador se a condição para fechar uma ordem de compra é calculada (as ordens de venda são fechadas da maneira análoga). Se o tipo de uma ordem anterior aberta corresponder a Buy (ver Tipos de Operações) e o sinal para fechar Buy é relevante, o controle é passado para o corpo de if operator onde uma solicitação para fechar é formada. Como um preço de fechamento de ordem na função OrderClose (), o valor de uma cotação frente e verso correspondente ao tipo de ordem é indicado (consulte Requisitos e Limitações em Making Trades). Se uma operação comercial for executada com sucesso, após uma mensagem sobre o encerramento da ordem, a corrente enquanto a iteração é interrompida e a execução do bloco de fechamento da ordem acabou. Mas se a operação falhar, a função definida pelo usuário para processar erros FunError () é chamada (bloco 10-11). Processando Erros Como um parâmetro passado no FunError (), o último código de erro calculado pelo 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 a execução do programa pode ser continuada (por exemplo, um erro comum) e aqueles, após os quais a execução de operações comerciais deve ser interrompida (por exemplo, conta bloqueada). Se depois de uma operação comercial sem sucesso a função definida pelo usuário retorna 1, a corrente enquanto a iteração é encerrada 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 início () está parada. No próximo começo do tiquetaque () será iniciado pelo terminal do cliente novamente e se as condições para o fechamento da ordem forem preservadas, outra tentativa de fechar a ordem será feita. Se, durante o processamento do erro, descobrir que a execução adicional do programa é sem sentido (por exemplo, o programa funciona em uma versão antiga do terminal do cliente) durante o próximo início, a execução do início da função especial () será encerrada no bloco de processamento preliminar quando Analisando o valor da variável Trabalho. Calculando a quantidade de lotes para novas encomendas 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 em uma soma igual a uma determinada porcentagem (definida por um usuário) de uma margem livre. No início do bloco de definir a quantidade de lotes para novas encomendas (bloco 7-8), calculam-se valores necessários de algumas variáveis ​​- quantidade mínima permitida de lotes e passo de mudança de lote configurado por um corretor, margem livre e preço de Um lote para a segurança. Neste exemplo, o seguinte é fornecido. Se um usuário configurou 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 comercial para abrir uma ordem é formada. Se 0 for atribuído a Lts, o número de lotes Lts é definido com base na variável Prots (percentagem), margem livre e condições configuradas por um corretor. Depois que Lts é calculado, um cheque é conduzido. Se esse valor for inferior ao valor mínimo permitido, o valor mínimo permitido será aceito. Mas se a margem livre não for suficiente, depois de uma mensagem correspondente, a execução start () é encerrada. Ordens de abertura O bloco de ordens de abertura (bloco 8-9) como o bloqueio das ordens de abertura é um loop infinito enquanto. No cabeçalho do primeiro operador, se as condições para a abertura de uma ordem de compra são calculadas: se não houver ordens para a segurança (a variável Total é igual a 0) eo sinal para abrir uma ordem Comprar é relevante (OpnB é verdade), controle É passado para o corpo do operador para abrir um pedido. Nesse caso, após as taxas são atualizados os preços para os níveis de parada são calculados. Os valores dos 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 disso, um corretor pode alterar a distância mínima permitida em qualquer momento (é um caso freqüente de fortes movimentos do mercado, por exemplo, antes do importante comunicado de imprensa). É por isso que antes de cada ordem, os níveis de paragem de abertura devem ser calculados tendo em conta os valores estabelecidos por um usuário e o valor mínimo permitido 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 de nível de parada definido por um usuário é usado. Em NewStop () primeiro, a distância mínima mínima atual é calculada. Se o valor definido por um usuário corresponder aos requisitos de um corretor, esse valor será retornado. Se for menor que o valor permitido, o valor permitido por um corretor é usado. Os preços das solicitações de paradas são calculados a partir da cotação de dois lados correspondente (consulte Requisitos e Limitações na Fazendo Negociações). Uma solicitação de troca para abrir uma ordem é formada usando a função OrderSend (). For the calculation of order opening price and prices of stop requests the two-sided quote values corresponding to the order type are used. If a trade operation was successful (i. e. a server returned the number of an opened order) after a message about a successful order opening is shown. start() execution is finished. If an order was not opened and the client terminal returned an error, the error is processed according to the algorithm described earlier. Some Code Peculiarities The analyzed Expert Advisor code is oriented to the implementation of a certain strategy. Note, some program lines contain variables and calculations that would be changed, if the strategy were changed. For example, according to the accepted strategy the Expert Advisor is developed to work only with one order. This allowed to use the variable Ticket both for the identification of a closing order number (in block of closing 6-7) and for the identification of a success of a trade operation execution when opening an order (in the block of opening 8-9). In this case such a solution is acceptable. However, if we take the analyzed code as the basis for the implementation of another strategy (for example allow opposite orders) we will have to introduce one or several variables to be able to recognize numbers of opened orders and identify the success of trade operations. 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.

No comments:

Post a Comment