Saturday, 9 December 2017

Mover média especialista conselheiro código


MetaTrader 4 - Expert Muding Average - perito para MetaTrader 4 O especialista em média móvel para formar sinais comerciais usa uma média móvel. A abertura e o fechamento de posições são realizados quando a média móvel atende ao preço na barra recentemente formada (o índice da 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 é realizada pela função CheckForOpen (). Se a média móvel atende a barra de forma que o primeiro seja maior do que o preço aberto, mas inferior ao preço fechado, a posição BUY será aberta. Se a média móvel atende a barra de forma que o anterior seja inferior ao preço aberto, mas maior do que o preço Fechar, a posição VENDA será aberta. O gerenciamento de dinheiro usado no perito é muito simples, mas efetivo: o controle sobre cada volume de posição é realizado de acordo com os 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 de risco básica 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 do lote básico fará 20500 0.02 1000 0.41. É muito importante controlar a precisão do tamanho do lote e normalizar o resultado com os valores permitidos. Normalmente, são permitidos lotes fraccionados com passo de 0,1. Não será realizada uma transação com volume de 0,41. Para normalizar, a função NormalizeDouble () é usada com precisão 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 nos volumes de operação, dependendo do sucesso da negociação, ou seja, negociar com o reinvestimento. Este é o mecanismo básico com a gestão obrigatória do capital para aumentar a eficiência da negociação. DecreaseFactor é a medida em que o tamanho do lote será reduzido após o comércio não lucrativo. Os valores normais são 2,3,4,5. Se as transações anteriores não fossem rentáveis, os volumes subsequentes diminuirão por um fator de Diminuição do Fator, a fim de aguardar o período não lucrativo. Este é o principal fator no algoritmo de gerenciamento de capital. A idéia é muito simples: se o comércio for aumentando com sucesso, o especialista trabalha com o lote básico ganhando 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 desativar a redução de velocidade, para fazê-lo, é preciso especificar Diminuir o código 0. O valor das últimas transações sucessivas não lucrativas é calculado no histórico comercial. O lote básico será recalculado nesta base: Assim, o algoritmo permite reduzir eficazmente o risco que ocorre como resultado de uma série de transações não lucrativas. O tamanho do lote é obrigatoriamente verificado quanto ao tamanho mínimo permitido do lote no final da função porque Os cálculos feitos anteriormente podem resultar em lote 0: o especialista é principalmente destinado a trabalhar com o período diário, e no modo de teste - por fazer a preços fechados. Ele só se trocará na abertura de uma nova barra, é por isso que os modos de modelagem de todos os tiques não são necessários. Os resultados dos testes são representados no relatório. Típicamente, duas médias móveis podem ser usadas para criar uma estratégia forex (EA para MT4) com estas regras: Compre quando a média móvel do período curto está acima da média móvel do período longo Venda quando o período longo se movendo A média está acima da média móvel do período curto No gráfico a seguir do Terminal do MetaTrader, a linha amarela é a média móvel do período curto (Período9) e a 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 parcela de EURCAD (com 100 p. Ex. Take Profit e 50 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 Especialista Simplificado Problema 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 estritas 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 consultor de especialistas 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 pedidos 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ários pedidos podem ser abertos em um terminal ao mesmo tempo, embora seu número seja razoavelmente limitado. Ao usar qualquer estratégia, as decisões comerciais devem ser feitas levando em consideração a situação atual. Antes de uma decisão comercial ser tomada em um programa, é necessário saber quais ordens comerciais já foram abertas ou colocadas. Antes de tudo, 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 comerciais devem ser tomadas 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 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, tempo de lançamentos de notícias importantes, tempo 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 de forma separada. quadra. Um consultor especialista 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 dos cálculos. 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 (controle de passagem) 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 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 são calculados todos os critérios necessários para tomar decisões comerciais, nomeadamente critérios para abertura, encerramento e modificação de pedidos. 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 as primeiras ordens existentes (fechar ou modificar) e somente depois disso para abrir novos pedidos. Geralmente, é correto guiar 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 um pedido é formado neste bloco. Há também erro de análise de bloqueio em um consultor especialista. 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 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, no MQL4 não há possibilidade de um programa encerrar uma operação de EAs em uma janela de segurança (diferente dos scripts, consulte Funções especiais). O que pode ser feito de uma forma de programa é o término do início (). Em um novo começo da função start () em um novo tick, 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, não é permitida a formação de novo pedido comercial. 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 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 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 tendenciais, 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 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. FIG. 111 e 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 MA 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 posterior do MA indica a mudança na direção do movimento do preço. Se abrirmos uma ordem de compra 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 aumento ou queda considerável de preços (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 plano, muitas vezes o cruzamento de MA é um evento regular que interfere com qualquer estratégia de tendências. Numerosos sinais falsos, em regra, levam 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 simples Consultor Especialista), 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 longo prazo em um lado 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. 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 a quota de movimento 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 um período de média maior em 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 de 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 alcançado, 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 tem 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 são iguais (ver Encerramento e Extinção de Ordens). Nesse caso, devemos fechar um pedido por outro e esperar 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 comerciais. FIG. 114 mostra três variantes de correlação de critérios comerciais, quando cada critério é importante (válido). As ações (abertura e fechamento de ordens de mercado) ocorrem no sentido horário nas seguintes imagens. FIG. 114. Correspondência de critérios de abertura e fechamento de pedidos (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 seus disparadores de fechamento. Depois disso, ocorre uma pausa quando nenhuma ordem é aberta. Além disso, uma venda de mercado 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 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 ocorrendo em pequenas correções após movimentos de preços fortes. Nesses casos, uma ordem oposta pode ser aberta com o mesmo valor ou menor que a 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 desencadeada mais uma vez. No entanto, ao criar essa estratégia, o 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 um pedido em giros de direção oposta (aqui o critério de fechamento 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 mudar, um usuário pode configurar um novo valor de lote de números 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, pode-se adquirir grande lucro, 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% 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 diretos 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 partes principais 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 declarar 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 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 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 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, 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 é 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 ordens 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 está aberta para a segurança, na qual a EA opera, se a ordem é comercializada ou pendente Também deve ser levado em consideração ao contar 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 for aberta para a segurança, para a janela da qual a EA está anexada, ela é analisada posteriormente. Se OrderType () retorna valor superior a 1 (veja Tipos de Operações), a ordem selecionada é pendente. Mas neste Expert Advisor, o gerenciamento de pedidos 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 o primeiro desses pedidos, 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 de 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 de contabilidade de 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 obtenha 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 da 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) é calculado 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 por touros se o valor atual do 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 iniciais 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 disparado, o valor de OpnB permanece falso (definido na inicialização da variável) se ele tiver 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 Varecila coincide com o encerramento da Compra. 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. Encomendas de encerramento Foi escrito anteriormente que este Consultor Especialista se destina à operação apenas com um único pedido de mercado aberto para uma segurança, a qual janela está anexada. No momento em que o controle no programa é passado para o bloco de fechamento de pedidos, é 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 para que apenas uma ordem possa ser fechada com sucesso. Este bloco é baseado no loop infinito, enquanto o corpo composto por duas partes análogas: um para fechar uma ordem de compra, outro para fechar uma ordem de venda. Embora seja usado aqui para a finalidade de que, em caso de falha na operação comercial, possa ser repetida mais uma vez. 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 ordem aberta anterior corresponder à Compra (ver Tipos de Operações) e o sinal para fechar a Compra é relevante, o controle é passado para o corpo do operador se o operador onde uma solicitação de fechamento for formada. 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 em Making Trades). Se uma operação comercial for executada com sucesso, após uma mensagem sobre o fechamento da ordem, a corrente enquanto a iteração é interrompida ea 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 ordens (bloco 7-8), os valores necessários de algumas variáveis ​​são calculados - 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 (percentual), 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, após 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 Comprar 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 parada de abertura devem ser calculados tendo em conta os valores estabelecidos 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 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 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 parada são calculados a partir da cotação de dois lados correspondente (consulte Requisitos e Limitações na Negociação). Uma solicitação de troca para abrir uma ordem é formada usando a função OrderSend (). Para o cálculo do preço de abertura do pedido e os preços das solicitações de parada, são usados ​​os valores de cotação em frente e verso correspondentes ao tipo de ordem. Se uma operação de comércio foi bem sucedida (ou seja, um servidor retornou o número de uma ordem aberta) depois que uma mensagem sobre uma abertura de ordem bem-sucedida é mostrada. Começo () A execução está concluída. 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 consultor especialista 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 único pedido. Isso permitiu usar a variável Ticket tanto para a identificação de um número de ordem de fechamento (no bloco de fechamento 6-7) quanto para a identificação do sucesso de uma operação de 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 base para a implementação de outra estratégia (por exemplo, permitir ordens opostas) teremos que apresentar uma ou várias variáveis ​​para poder reconhecer o número de ordens abertas e identificar o sucesso das operações comerciais. Em outras modificações de estratégia, teremos que mudar as linhas do programa venha contendo parte das lógicas contidas na estratégia de origem. Ou seja, no bloco de contabilidade de ordem, não teremos que encerrar a operação do programa se houver várias ordens abertas para uma segurança. Além disso, as condições para abrir e fechar ordens também mudarão. Isso implicará a alteração do código em blocos de pedidos de abertura e fechamento. Com base nessa análise, podemos concluir facilmente que o consultor de especialistas simples descrito não é perfeito. In a general case, for the implementation of order accounting one should use a universal function based on using data arrays and not containing logics of a certain strategy. The same can be said about the blocks of opening and closing orders. A more complete program must contain a main analytical function, all other user-defined functions must be subordinate to it. This analytical function must contain a program code, in which all conditions for the implementation of any strategy are analyzed all subordinate functions must perform limited actions. The function of accounting orders must only account orders, functions of opening and closing orders must only open and close orders, and the analytical function must quotthinkquot and manage all other functions, i. e. call them when needed.

No comments:

Post a Comment