Thursday 18 July 2019

Icustom moving average


Eu sou novo na codificação, e estou aprendendo muito, no entanto, eu acertei algo que eu não posso obter a minha cabeça ao redor no momento que eu estou tentando chamar o resultado de um teste em um dos meus indicadores, para um ea, por isso pode Adicioná-lo aos seus próprios testes antes de colocar um comércio A ea é uma média simples cruzamento móvel O indicador é um indicador de tendência ou de alcance Eu tenho anexado o código indicador. Eu gostaria de ajuda, e se possível explicado simplesmente para que eu possa obter a minha cabeça ao redor Como ele deve ser configurado dentro do indicador, para o ea reconhecê-lo Uma vez que eu tenho o indicador classificado, vou passar para o indicador ea. The tem dois testes, em que eu gostaria de adicionar a função iCustom Nesta fase, eu Estou apenas querendo adicioná-lo em um teste, não importa que, como eu estou tentando entendê-lo Qualquer pessoa disposta a ajudar e explicar isso simplesmente seria muito benéfico - Eu não consigo encontrar nada on-line que explica isso, então eu O resultado do teste poderia simplesmente ser verdade. Obrigado antecipadamente Você está escrevendo um EA que tem uma estratégia baseada em 2 Indicadores, você poderia construir o código do Indicador para o EA, que é possível, mas é Um pouco envolvido como indicadores buffers don t trabalho em EAs, você teria que usar matrizes e lidar com eles em uma série como a alternativa é ter os indicadores em execução e acessar seus buffers a partir da EA isso é o que iCustom facilita Não são necessárias alterações Para os Indicadores o EA simplesmente acessa os buffers que precisa nos valores de mudança que ele precisa Na chamada iCustom também pode passar todas as variáveis ​​externas que são necessárias para configurar o Indicador como aplicável. iCustom permite que você acesse seus Indicadores buffers é tão simples . Por exemplo, você está escrevendo uma EA que tem uma estratégia baseada em 2 indicadores, você poderia construir o código do indicador para a EA, que é possível, mas é um pouco envolvido como indicadores tampões don t trabalho em EAs, você teria hav E para usar matrizes e manipulá-los em uma série como a alternativa é ter os indicadores em execução e acessar seus buffers a partir da EA isso é o que iCustom facilita Nenhuma mudança é necessária para os indicadores a EA simplesmente acessa os buffers que precisa no turno Valores que ele precisa Na chamada iCustom também pode passar todas as variáveis ​​externas que são necessárias para configurar o Indicador como aplicável. Graças para que RaptorUK, no entanto, é a codificação real que estou tendo dificuldades com eu sou muito novo para MQL4 e tem Só foi fazê-lo um par de meses, e ainda estou aprendendo - por isso estou precisando de uma explicação simples da codificação e como configurá-lo no indicador. Creação de indicadores personalizados. Quando a criação de uma estratégia de negociação de um desenvolvedor muitas vezes enfrenta a necessidade Para desenhar graficamente em uma janela de segurança uma certa dependência calculada por um programador de usuário Para isso MQL4 oferece a possibilidade de criar indicadores personalizados. Custom Indicator é um programa aplicativo codificado em M QL4 é basicamente destinado a exibição gráfica de dependências preliminarmente calculado. Custom Indicator Structure. Necessity de Buffers. O princípio principal subjacente indicadores personalizados está passando valores de matrizes de indicadores para um terminal cliente para desenhar linhas de indicador via buffers de troca. Buffer é uma área de memória Contendo valores numéricos de um array indicador. MQL4 padrão implica a possibilidade de desenhar até oito linhas indicadoras usando um indicador personalizado Uma matriz de indicadores e um buffer são trazidos em correspondência com cada linha de indicador Cada buffer tem seu próprio índice O índice do primeiro buffer É 0, do segundo - 1, e assim por diante, o último tem o índice 7 A Fig. 115 mostra como a informação de um indicador personalizado é passada através de buffers para um terminal cliente para desenhar linhas de indicador. Fig 115 Passando valores do indicador Arrays através de um buffer para um terminal do cliente. A ordem geral das linhas de indicador do edifício é o seguinte.1 Os cálculos são conduzidos em um cu Estômago como resultado valores numéricos são atribuídos a elementos de matriz de indicadores.2 Os valores de elementos de matriz de indicadores são enviados para um terminal de cliente via buffers.3 Nas bases de matrizes de valor recebidas de buffers, um terminal de cliente exibe indicadores de componentes de um Custom Indicator. Vamos analisar um simples indicador personalizado que mostra duas linhas - uma linha é construir com base nos preços máximos da barra, a segunda usa preços mínimos. Exemplo de um indicador personalizado simples. Posso analisar em detalhes as partes indicador Em qualquer programa de aplicação escrito em MQL4 você pode indicar os parâmetros de configuração que fornecem a manutenção de programa correta por um terminal de cliente Neste exemplo a parte de programa de cabeça ver Estrutura de Programa contém várias linhas com diretivas propriedade. A primeira diretiva indica em qual janela o terminal de cliente deve desenhar as linhas de indicador. MQL4 há duas variantes de linhas de desenho indicador na janela de segurança principal e em uma janela separada Janela principal é a janela con Taining um gráfico de segurança Neste exemplo, o parâmetro indicatorchartwindow no diretório de propriedades indica que um terminal cliente deve desenhar linhas de indicadores na janela principal. A próxima linha mostra o número de buffers usados ​​no indicador. No exemplo analisado são desenhadas duas linhas de indicadores Um buffer É atribuído a cada buffer, de modo que o número total de buffers é duas. As linhas seguintes descrevem as cores das linhas indicadoras. Parameters indicatorcolor1 e indicatorcolor2 definem configuração de cor para buffers correspondentes - neste caso para buffers com índices 0 Blue e 1 Red Note que Figuras em nomes de parâmetro indicatorcolor1 e indicatorcolor2 não são índices de buffer Esses números são partes de nomes de constantes que são definidas de acordo com buffers Para cada cor constante pode ser definida a critério de um user. In a próxima linha arrays indicador são declarados. O indicador Destina-se a desenhar duas linhas de indicador, por isso precisamos declarar duas matrizes globais de uma dimensão, uma para cada linha Nomes De matrizes de indicadores são até o usuário Neste caso, os nomes de matriz Buf0 e Buf1 são usados, em outros casos outros nomes podem ser usados, por exemplo, Line1, Alfa, Integral etc É necessário declarar arrays em um nível global, Os valores devem ser preservados entre as chamadas do início da função especial. O código personalizado descrito é construído com base em duas funções especiais - init e start A função init contém a parte de código usada no programa apenas uma vez ver Funções especiais. A ação é executada na linha. Usando a função SetIndexBuffer um buffer necessário neste caso com o índice 0 é colocado em correspondência com uma matriz neste caso Buf0 Significa para construir a primeira linha de indicador um terminal de cliente aceitará dados contidos na matriz Buf0 usando o buffer zero para it. Further o estilo de linha é defined. For o zero buffer 0 um terminal cliente deve usar os seguintes estilos de desenho linha simples DRAWLINE, linha contínua STYLESOLID, linha w Idth 2. As duas linhas seguintes contêm configurações para a segunda linha. Assim, de acordo com o código da função especial init ambas as linhas de indicador serão desenhadas na janela de segurança principal A primeira será uma linha azul sólida com a largura 2, O segundo é uma linha pontilhada vermelha STYLEDOT de uma largura usual As linhas indicadoras podem ser desenhadas por outros estilos e também ver Estilos de Linhas Indicadoras. Calculando Valores de Arrays de Indicadores Os Elementos São Atentos. Valores de elementos de arrays de indicadores são calculados no início da função especial Para entender corretamente o conteúdo do código de início preste atenção à ordem das barras de indexação A seção Arrays descreve em detalhes o método de indexação de arrays-timeseries De acordo com este método a indexação de barras começa a partir de zero A barra zero é uma barra ainda não formada A barra mais próxima S índice é 1 O próximo s é 2 e assim on. As novas barras aparecem em uma janela de segurança, os índices de barras de história já formados são alterados A nova corrente, apenas formada, rightmost bar get S o índice zero, aquele à esquerda dele que acabou de formar-se completamente obtém o índice 1 e os valores dos índices de todas as barras de história também são aumentados por um. O método descrito de barras de indexação é o único possível para o todo em Line MetaTrader, e é levado em conta ao desenhar linhas usando indicadores técnicos e personalizados. Foi dito anteriormente que as linhas de indicadores são construídas com base em informações numéricas contidas em matrizes de indicadores. Uma matriz de indicadores contém informações sobre as coordenadas de pontos Que é desenhada uma linha de indicador E a coordenada Y de cada ponto é o valor de um elemento de matriz de indicadores ea coordenada X é o valor de um índice de elemento de matriz de indicadores No exemplo analisado a primeira linha de indicador é desenhada usando valores máximos de barras Fig, 116 mostra esta linha de indicador de cor azul numa janela de segurança, é construída com base na matriz de indicadores Buf0.Fig 116 Correspondência de coordenadas de uma linha de indicador para v Alues de uma matriz de indicadores. O valor de índice de uma matriz de indicadores está fora por um terminal de cliente em correspondência com um índice de barra - estes valores de índice são iguais Deve também ser levado em conta que o processo de construção de linhas de indicador continua em modo de tempo real Em condições quando em uma janela de segurança novas barras aparecem de vez em quando E todas as barras de história são deslocadas para a esquerda Para ter a linha de indicador desenhado corretamente cada ponto de linha acima de sua barra também deve ser deslocado juntamente com barras Então, há necessidade de necessidade técnica Para re-indexar uma matriz de indicadores. A diferença fundamental de uma matriz de indicadores a partir de uma matriz usual é a seguinte. No momento em que uma nova barra é criada, os valores de índice de elementos da matriz de indicadores são alterados automaticamente pelo terminal do cliente, De cada índice de matriz de indicadores é aumentado em um eo tamanho da matriz de indicadores é aumentado por um elemento com um índice zero. Por exemplo, a barra de zero na estrutura de tempo H1 da Fig. 116 tem o tempo de abertura 6 00 A 7 00 uma nova barra aparecerá na janela de segurança A barra aberta em 6 00 irá automaticamente obter o índice 1 Para ter a linha de indicador traçada corretamente nesta barra, o terminal de cliente irá alterar o índice do elemento de matriz de indicador correspondente à Barra aberta em 6 00 Na tabela na Fig 116 este elemento é escrito na primeira linha Junto com que os índices de todos os elementos de matriz serão aumentados pelo terminal de cliente por um An o índice do elemento de matriz correspondente à barra aberta em 6 00 irá obter o valor 1 antes que fosse igual a 0 A matriz de indicadores será maior por um elemento O índice de um novo elemento adicionado será igual a 0, o valor deste elemento será um novo valor que reflete a coordenada do indicador Linha em uma barra zero Este valor é calculado no começo da função especial em cada tick. Calculações no começo da função especial deve ser realizada de modo que nenhuma ação extra foi realizada Antes que o indicador é anexado a um gráfico, ele faz É não refletir quaisquer linhas de indicador porque os valores de matrizes de indicadores não são definidos ainda Isso é porque no primeiro começo da função especial os valores de matriz de indicador de início devem ser calculados para todas as barras, em que a linha de indicador deve ser desenhada. São todas as barras presentes em um gráfico os cálculos iniciais podem ser conduzidos não para todas as barras disponíveis, mas para alguma última parte do histórico é descrito em outros exemplos Ar todos os novos começos do início da função especial não há necessidade de calcular os valores do indicador Array para todas as barras novamente Estes valores já são calculados e estão contidos na matriz de indicadores É necessário calcular o valor atual da linha de indicador somente em cada novo tick da barra zero. Para a implementação da tecnologia descrita existe uma Função padrão útil em MQL4 - IndicatorCounted. Function IndicatorCounted. This função retorna o número de barras que não foram alteradas desde a última chamada de indicador . Se o indicador nunca tiver sido anexado a um gráfico, na primeira execução de início o valor de Countedbars será igual a zero. Isso significa que a matriz de indicadores não contém nenhum elemento com valor predefinido anterior, por isso toda a matriz de indicadores deve Ser calculado do início ao fim A matriz de indicadores é calculada a partir da barra mais antiga para o zero um Índice da barra mais antiga, a partir de que os cálculos devem ser iniciados, é calculado da seguinte maneira. Suponha no momento de anexar o indicador há 300 Barras em uma janela de gráfico Este é o valor da variável predefinida Barras Como definido anteriormente, Countedbars é igual a 0 Assim, como resultado obtemos que i índice da primeira barra não contabilizada a mais recente, a partir do qual os cálculos devem ser realizados é Igual a 299.Todos os valores dos elementos de matriz de indicadores são calculados no ciclo while. While i está dentro do intervalo desde a primeira barra não contabilizada 299 para a corrente 0 inclusive, os valores da matriz de indicadores Os elementos são calculados para ambas as linhas de indicadores Nota, os valores faltantes dos elementos da matriz de indicadores são calculados durante um primeiro início da inicialização da função especial Durante os cálculos o terminal do cliente lembra os elementos para os quais os valores foram calculados A última iteração dentro é executada quando i é Igual a 0, ou seja, os valores dos arrays de indicadores são calculados para a barra zero Quando o loop é excedido, o início da função especial termina a sua execução eo controle é passado para o terminal do cliente O terminal do cliente, por sua vez, Linhas de acordo com os valores calculados de elementos de matriz. O próximo início de carrapato será iniciado pelo terminal de cliente novamente Novas ações dependerão da situação vamos continuar analisando o exemplo para 300 bars. Variant 1 Um novo carrapato vem durante a formação Da barra zero atual a situação mais comum. Fig. 117 O carrapato processado pertence à barra atual. A Fig. 117 mostra dois carrapatos recebidos por t Ele terminal nos instantes de tempo t 1 e t 2 A situação analisada será a mesma para os dois ticks Vamos rastrear a execução do início que foi lançada no momento t 2 Durante a execução do início da função será executada a seguinte linha. IndicatorCount retornará o valor 299, ou seja, uma vez que a última chamada de início 299 barras anteriores não foram alteradas Como resultado i valor de índice será igual a 0 300-299-1.It significa no próximo while loop os valores de elementos de matriz com o Zero será calculado Em outras palavras, a nova posição de uma linha de indicador na barra de zero será calculada Quando o ciclo estiver terminado, o início deixará de ser executado e passará o controle para o terminal do cliente. Variant 2 Um novo tick é o primeiro Tick ​​de uma barra zero acontece de vez em quando. Fig 118 O tick processado é o primeiro tick de uma nova barra zero. Em este caso, o fato de aparência de uma nova barra é importante Antes de controle é passado para a função especial iniciar, o cliente Terminal irá desenhar novamente todas as barras S presentes na janela de segurança e re-indexar todas as matrizes de indicadores declarados definidas em correspondência com buffers Além disso, o terminal de cliente vai se lembrar que já existem 301 barras, não 300 em uma janela de gráfico. Fig 118 contém situação quando na última marca do Barra anterior no momento t 2 o início da função foi iniciado e executado com sucesso É por isso que, embora agora a primeira barra com o índice 1 terminado no momento t 2 tenha sido calculada pelo indicador, a função IndicatorCount retornará o valor que estava na barra anterior Ou seja, 299.No índice de linha seguinte i será calculado, neste caso para o primeiro tick de uma nova barra será igual a 1 301-299-1.It significa cálculo de valores de matriz de indicador em while loop no aparecimento de Uma nova barra será executada tanto para a última barra como para a nova barra zero Um pouco antes durante a re-indexação de matrizes de indicadores o terminal cliente aumentou tamanhos desses arrays Os valores de elementos de matriz com zero índices não foram definidos antes Os cálculos no loop Durante os cálculos no loop esses elementos obtêm alguns valores Quando os cálculos no início são mais, o controle é retornado para o terminal cliente Depois disso, o terminal cliente irá desenhar linhas de indicadores na barra zero com base em apenas valores calculados de elementos de matriz Com zero indexes. Variant 3 Um novo tick é o primeiro tick de uma nova barra zero, mas o último, mas um tick não é processado caso raro. Fig 119 Nem todos os ticks da barra anterior foram processados. O exemplo 119 mostra a situação quando o start Foi lançado no primeiro tick de uma nova barra no momento t 5 Hora anterior em que esta função foi iniciada no momento t 2 Marca que chegou ao terminal no momento t 3 seta vermelha não foi processada pelo indicador Isto aconteceu porque a execução do início O tempo t 2 - t 4 é maior do que o intervalo entre os ticks t 2 - t 3 Esse fato será detectado pelo terminal cliente durante a execução do início lançado no momento t 5 Durante os cálculos na linha. IndicatorCount será Retornar o valor 299 Esse valor é verdadeiro - a partir do momento da última chamada de indicador 299 barras não foram alteradas depois de já já 301 É por isso que o índice calculado da primeira barra mais à esquerda, a partir da qual os cálculos de valores de elementos de matriz devem ser iniciados Ser igual a 1 301-299-1.it significa que, durante a execução, serão executadas duas iterações Durante o primeiro um valor de elementos de matriz com o índice i 1 será calculado, isto é Buf0 1 e Buf1 1 Not, no momento em que os cálculos começarem , Barras e matrizes de indicadores já são re-indexadas pelo terminal cliente porque uma nova barra iniciada, entre os começos da função especial start É por isso que os cálculos para elementos de matrizes com índice 1 serão calculados com base em array-timeseries maximal e Valores mínimos de um preço de barra também com o índice 1.Durante a segunda iteração de enquanto valores para elementos com zero índices, ou seja, para a barra zero, é calculado com base nos últimos valores conhecidos de arrays-timeseries. A tecnologia descrita para o cálculo de indicadores personalizados permite, em primeiro lugar, garantir o cálculo de valores de todos os elementos da matriz de indicadores, independentemente da natureza específica da história de marca, e segundo, realizar cálculos apenas para barras não contabilizadas, Uma barra é considerada não contabilizada se o cálculo de valores de elemento de um indicador arrays, pelo menos, para um último carrapato da barra não é executada. Começando o indicador personalizado em uma janela de gráfico você verá duas linhas - uma linha azul grossa construída sobre máximos de barras e Uma linha vermelha pontilhada construída sobre seus mínimos Fig 120.Fig 120 Duas linhas de indicadores em uma janela de segurança, construído pelo indicador. Deve-se notar, que pode-se construir um indicador personalizado, linhas de indicadores que coincidiam com as linhas de um Indicador técnico análogo Pode ser fàcilmente feito se como fórmulas do cálculo no indicador feito sob encomenda, as mesmas fórmulas que no indicador técnico são usadas para ilustrar isto s improv E o código de programa analisado no exemplo anterior Deixe o indicador desenhar linhas sobre os valores médios de máximos e mínimos de várias últimas barras É fácil realizar cálculos necessários simplesmente precisamos encontrar valores médios de arrays-timeseries elementos Por exemplo, o valor de um Indicador com o índice 3 ou seja, a coordenada da linha do indicador para a terceira barra com base nos últimos cinco máximos é calculada da seguinte forma. Buf0 3 Alta 3 Alta 4 Alta 5 Alta 6 Alta 7 5.Cálculos anônimos podem ser realizados para um indicador Linhas construídas sobre o mínimo. Exemplo de um simples indicador personalizado Linhas de indicadores são construídas sobre os valores mínimos e máximos médios de N barras. Neste exemplo há uma variável externa AverBars Usando esta variável um usuário pode indicar o número de barras, para que uma média Valor é calculado No início este valor é utilizado para o cálculo de um valor médio No laço para a soma dos valores máximo e mínimo é calculado para o número de barras correspondente Dependendo do valor da variável AverBars Nas duas linhas de programa seguintes, os valores dos elementos da matriz de indicadores são calculados para linhas de indicadores correspondentes a valores mínimos e máximos. O método de média utilizado aqui também é aplicado para cálculos no indicador técnico Média Móvel Se anexarmos O indicador personalizado analisado e o indicador técnico Média Móvel, veremos três linhas de indicadores Se o mesmo período de média for configurado para ambos os indicadores, a linha Média Móvel coincidirá com uma das linhas de indicador personalizadas para este propósito, descritas na Figura 121 Deve ser especificado nas configurações do indicador técnico. Fig 121 Linhas coincidentes de um indicador técnico e um indicador personalizado linha vermelha. Assim, usando o indicador técnico de um usuário pode construir o reflexo de qualquer regularidades necessárias no trabalho prático. Custom Indicator Options. Drawing Indicator Lines Windows. MQL4 separado oferece um grande serviço para a construção de indicadores personalizados que faz usin Em particular, as linhas de indicadores podem ser desenhadas em uma janela separada Isto é conveniente quando valores absolutos da amplitude da linha de indicador é substancialmente menor ou maior do que os preços de segurança Por exemplo, se estamos interessados ​​na diferença entre os valores médios de bar Máximos e mínimos em um determinado intervalo histórico, dependendo do período de tempo este valor será igual a aproximadamente de 0 a 50 pontos, por exemplo, para M15 Não é difícil construir uma linha de indicador, mas em uma janela de segurança esta linha será desenhada em O intervalo de 0 a 50 pontos de um preço de segurança, ou seja, substancialmente inferior à área do gráfico refletida na tela É muito inconveniente. Para desenhar linhas de indicadores em uma janela separada que está na parte inferior de uma janela de segurança, na propriedade de diretiva No parâmetro de início do programa deve ser especificado indicador de janela separada. No momento em que esse indicador é anexado a uma janela de segurança, o terminal do cliente cria um w separado Dependendo das configurações de cor e dos tipos de linhas de indicadores, eles serão desenhados em um ou outro estilo. Limitando o Histórico de Cálculos. Na maioria dos casos, as linhas de indicadores contêm informações úteis somente no História mais recente A parte das linhas de indicadores construídas sobre barras antigas, por exemplo, um período de tempo de 1 mês de idade dificilmente pode ser considerado útil para tomar decisões comerciais Além disso, se houver um monte de barras em uma janela de gráfico, o tempo investido no cálculo e desenho De linhas de indicador é razoavelmente grande Isso pode ser crítico na depuração do programa, quando um programa é compilado e, em seguida, iniciado É por isso que é necessário realizar cálculos não para toda a história, mas para a parte limitada do histórico de barras mais recente. Para este efeito, um histórico de variáveis ​​externas é utilizado no seguinte programa O valor desta variável é tido em conta ao calcular o índice da primeira barra à esquerda, st Arting a partir do qual elementos de matrizes de indicadores devem ser calculados. Cálculos adicionais em loop while será conduzido para o número de barras de histórico recente não maior do que o valor de histórico Nota, o método analisado de limitar um histórico de cálculo diz respeito apenas à parte dos cálculos que são realizados No início do início da função especial. Além disso, quando aparecerem novas barras, novas partes das linhas indicadoras serão adicionadas na parte direita, enquanto a imagem na parte esquerda será preservada. Assim, o comprimento da linha do indicador será aumentado durante todo o processo Indicador de tempo de operação O valor comum do parâmetro History é considerado aproximadamente 5000 bars. Exemplo de um simples indicador personalizado As linhas de indicadores são desenhadas em uma janela separada. Cálculo semelhante de uma linha de indicador é realizado no indicador técnico AverageTrue Range A Fig. 122 mostra uma linha de indicador construída Pelo indicador personalizado em uma janela separada e uma linha de indicador construída pelo ATR em outra janela. As linhas de caso são totalmente idênticas porque o período de média é o mesmo para ambos os indicadores - 5 Se este parâmetro for alterado em qualquer um dos indicadores, a linha de indicador correspondente também mudará. Figura 122 desenhando uma linha de indicador personalizada em uma janela separada Linhas idênticas de Um indicador técnico ATR e um indicador personalizado. É também evidente que a linha de indicador personalizado é construída não para toda a largura da tela, mas para as 50 barras mais recentes, conforme especificado na variável externa. Se um comerciante precisar usar um intervalo de histórico maior, o valor de A variável externa pode ser facilmente alterada através da janela de configurações do indicador personalizado. A Figura 123 mostra uma janela de segurança, na qual a linha de indicadores é desenhada em outro estilo - como um histograma Para obter esse resultado uma linha foi alterada no código do programa - Os estilos de linha são indicados. Todas as outras partes de código são inalteradas. Fig 123 Desenho linha de indicador personalizado em um histograma de janela separado Similaridade de desenhos de um indicador técnico ATR e Um indicador personalizado. Deslocando Linhas Indicadoras Verticalmente e Horizontalmente. Em alguns casos é necessário deslocar uma linha de indicador. Pode ser facilmente feito por meio de MQL4. Vamos analisar um exemplo, em que posição de linhas de indicadores em uma janela de segurança são calculadas de acordo com Com valores especificados por um usuário. Exemplo de um indicador personalizado Deslocando linhas de indicador horizontal e verticalmente. Para ajustar as linhas de deslocamento em um gráfico, há duas variáveis ​​externas - LeftRight para deslocamento horizontal de todas as linhas e UpDown para deslocar duas linhas pontilhadas verticalmente. Algoritmo usado para calcular valores de elementos de matriz correspondentes baseia-se em regras muito simples. Para deslocar uma linha horizontalmente, atribua o valor calculado a um elemento de matriz, cujo índice é maior por LeftRight para deslocamento para a direita e menos para deslocamento para a Para a direita do que o índice de uma barra, para que os cálculos são realizados. Para deslocar uma linha verticalmente, o ponto UpDown deve ser adicionado para deslocar para cima ou det Racionado para deslocamento para baixo para cada valor de uma matriz de indicadores caracterizando a posição da linha inicial. No exemplo analisado os índices são calculados na linha. Aqui i é o índice de uma barra, para a qual os cálculos são realizados, k é um índice de uma matriz de indicadores Elemento Linha indicadora vermelha exibida pelo terminal cliente com base na matriz de indicadores Line0 é deslocada para a esquerda por 5 barras de acordo com configurações personalizadas, veja Fig 124 a partir da linha inicial Neste caso, a linha inicial é uma média móvel com o período de média Igual a 5 a fórmula do cálculo do MA é High i Low i 2.Neste exemplo, a posição da linha vermelha é a base para o cálculo dos valores do array de indicadores para outras duas linhas, ou seja, a sua posição no gráfico As linhas pontilhadas são calculadas A utilização do índice k para elementos de todos os arrays de indicadores permite executar cálculos para elementos de arrays Line1, Line2 na mesma barra usada para calcular valores do array básico correspondente Line0 Como As linhas pontilhadas resultantes são deslocadas em relação à linha vermelha pelo valor especificado na janela de configurações do indicador, neste caso por 30 pontos Fig 124.Fig 124 A linha indicadora vermelha é deslocada para a esquerda por 5 barras As linhas pontilhadas são deslocadas em relação à linha Linha vermelha por 30 pontos. Limitações de Indicadores Personalizados. Há algumas limitações em MQL4 que deve ser levado em conta na programação de indicadores personalizados. Há um grupo de funções que podem ser usadas apenas em indicadores personalizados e não pode ser usado em Expert Por outro lado, as funções comerciais não podem ser usadas nos indicadores OrderSend, OrderClose, OrderCloseBy, OrderDelete e OrderModify. Por outro lado, as funções comerciais não podem ser usadas nos indicadores OrderSend, OrderClose, OrderCloseBy, OrderDelete e OrderModify Isso ocorre porque os indicadores operam no fluxo de interface, distinto dos Expert Advisors e D scripts que operam em seu próprio flow. This é também por isso algoritmos baseados em looping não pode ser usado em indicadores personalizados Início de um indicador personalizado contendo um loop infinito em termos de tempo de execução real pode resultar em terminal do cliente desligar com mais necessidade de reiniciar Um computador. A geral características comparativas de Expert Advisors, scripts e indicadores está contida na Tabela 2bined Uso de Programs. It foi dito anteriormente que, de acordo com as regras MQL4 comércio não pode ser usado em indicadores personalizados, é por isso que para negociação automática Expert Advisors ou Scripts devem ser usados ​​No entanto, a tecnologia de economia de recursos utilizada para cálculos em indicadores ver Criação de indicadores personalizados é amplamente utilizado na criação de programas de negociação Na maioria dos casos em indicadores personalizados pode-se calcular eficientemente os elementos de matriz de indicadores necessários para a formação de critérios de negociação E tomada de decisões comerciais em Expert Advisors. Calculações realizadas no indicador personalizado Tecnicamente também pode ser implementado em Expert Advisors, mas isso pode levar à duplicação de cálculos em diferentes programas de aplicação e ao desperdício de recursos não razoável e, em alguns casos, quando são realizados cálculos de longo uso de recursos - para uma decisão de comércio Os casos em que é necessário usar os resultados de cálculo de indicadores personalizados em um Expert Advisor ou script, a função iCustom pode ser used. Function iCustom. Calculation do dado indicador personalizado O indicador personalizado deve ser compilado arquivo e localizado no diretório Indicadores especialistas Terminalcatalogue. Símbolo - nome do símbolo de uma segurança, sobre os dados dos quais um indicador será calculado NULL indica o atual symbol. timeframe - período Pode ser um dos períodos de gráfico 0 significa o período do atual chart. name - nome do indicador personalizado. - Lista de parâmetros, se necessário Parâmetros passados ​​devem corresponder com a ordem de declaração eo tipo de variáveis ​​externas de um indicador personalizado. mode - Índice de uma linha de indicador Pode ser de - a 7 e deve corresponder ao índice usado por qualquer SetIndexBar Functions. shift - Índice de valor obtido de um deslocamento de buffer indicador de volta em relação a uma barra atual por um número especificado de barras. Vamos considerar como iCustom pode ser usado na prática Vamos resolver o seguinte problema. Problema 30 Uma estratégia de negociação é baseada Sobre os dados do indicador personalizado Se a linha ROC no horizonte de tempo atual laranja cruza uma linha de taxa média suavizada de espessura vermelho abaixo de um certo nível de baixo para cima, este é um critério relevante para comprar aberto Comprar e fechar Venda Se houver condições contrárias, a relevant criterion to sell Write a code implementing this strategy. The principle of construction of the custom indicator is described in details in the section Custom Indicator ROC Price Rate of Change Fig 131 illustrates two points, in which ROC line in the current timeframe M15 crosses the smoothed rate of change line In point A the orange line crosses the red one from bottom upwards and the place of first intersection is below the level -0 001 In point B the orange line crosses the red one in the downward direction and the cross point is above the level 0 001 The fact of this crossing must be detected in the Expert Advisor and be considered as a signal to buy point A - close Sell and open Buy or to sell point B - close Buy and open Sell. Fig 131 Crossing of custom indicator lines is considered as a trading criterion. When solving such problems a ready Expert Advisor can be used, changing the order of calculation trading criteria in it In this case we can take as a basis the Expert Advisor described in the section Simple Expert Advisor The EA calculating trading criteria on the basis of a custom indicator will look loke this. Let us analyze what amendments were made in the source code The main part of the Expert Advisor used as basic has not changed Changes have been made in two blocks - block 1-2- and block 5-6.In the block 5-6 trading criteria are calculated In the described EA a trading strategy is based on two trading criteria - criterion to open Buy and criterion to open Sell The strategy used in the Expert Advisor allows the presence of only one opened market order, pending orders are not allowed The strategy also presupposes closing an opposite order when a criterion for opening triggers for example, if criterion to open a Buy order is relevant, it means that a Sell order must be closed. For using in the EA results of calculations performed in the custom indicator function iCustom must be executed. In this case formal parameters specified in iCustom call denote the following. NULL - calculations in the indicator are performed based on data of the current security in this case the EA is attached to EURUSD window, so data of EURUSD will be used see Fig 131.0 - in calculations data of the current timeframe are used in this case the current timeframe is M15, so data corresponding to M15 will be used. rocseparate - name of a custom indicator, in which calculations will be made. H,P, B,A - list of adjustable parameters In this case the custom indicator has adjustable parameters block 2-3 of code For a user to be able to set up values of these parameters from the EA, they are specified in the list of passed parameters of the function iCustom In the Expert Advisor values of these parameters can differ from those specified in the indicator In such a case during calculations in the indicator exactly these passed values will be used These parameters denote the following. H - number of bars in calculation history. P - period of calculation MA. B - number of bars for rate calculation. A - number of bars for smoothing. the meaning of these parameters is explained in details in the section Custom Indicator ROC Price Rate of Change.1 5 - index line of the indicator In the custom indicator 6 indicator arrays are used ROC line in the current timeframe orange is constructed on the basis of Line1 values, for which buffer with index 1 is used Smoothed average rate line is based on values of Line5 array elements, index of the used buffer is 5.0 - index of value obtained from an indicator buffer shift back relative to a current bar by the specified number of periods In this case values of indicator lines on the zero bar are used, that is why index 0 is specified. For a user to be able to change the adjustable indicator parameters in the EA manually, external variables are specified in block 1a-1b of the Expert Advisor In block 5-5a values of these parameters are assigned to other variables with shorter names - this is done for convenience of code presentation in block 5a-5b Thus a user can specify in parameter s, with which calculations in the custom indicator will be conducted After execution iCustom function will return value corresponding to a specified element value of specified indicator array calculated in the indicator using specified values of adjustable parameters. During practical operation it is convenient to see in a security window lines of the indicator, array elements of which are used in the Expert Advisor see Fig 131 At the same time execution of iCustom is not connected with the presence of the indicator in the security window, as well as with the values of its adjustable parameters. The execution of iCustom does not require the attachment of a corresponding indicator to a security window As well as the call of iCustom from any application program does not result in the attachment of a corresponding indicator to a security window Attachment of a technical indicator to a security window also does not lead to the call of iCustom in any application program. Trading criteria in th e EA block 5-6 are calculated on the basis of array element values obtained using iCustom function For example a criterion for opening Buy and closing Sell are calculated the following way. If the last known value of a smoothed average rate line L5 is less than the specified level value of the adjustable parameter Level 0 001 and the last known value of ROC line in the current timeframe L1 is larger than the smoothed average rate line L5 , the criterion for opening a Buy order and closing a Sell order is considered relevant For the confirmation of relevance of opposite criteria reflecting conditions are used. Trading criteria accepted in this example are used for educational purpose only and must not be considered as a guideline when trading on a real account.

No comments:

Post a Comment