Icustom Moving Average




Icustom Moving AverageIndicador Tecnico de Media Movel O Indicador Tecnico de Media Movel mostra o valor medio do preco do instrumento para um determinado periodo de tempo. Quando se calcula a media movel, uma media do preco do instrumento para este periodo de tempo. A medida que o preco muda, sua media movel aumenta ou diminui. Existem quatro tipos diferentes de medias moveis: Simples (tambem referido como Aritmetica). Exponencial. Alisado e linear ponderado. As medias moveis podem ser calculadas para qualquer conjunto de dados sequenciais, incluindo precos de abertura e fechamento, precos mais altos e mais baixos, volume de negociacao ou quaisquer outros indicadores. E frequentemente o caso quando se utilizam medias moveis duplas. A unica coisa em que as medias moveis de diferentes tipos divergem consideravelmente umas das outras, e quando os coeficientes de peso, que sao atribuidos aos dados mais recentes, sao diferentes. No caso em que estamos falando de simples media movel, todos os precos do periodo em questao, sao iguais em valor. As Medias Minimas exponenciais e Lineares ponderadas atribuem mais valor aos precos mais recentes. A maneira mais comum de interpretar a media movel de precos e comparar sua dinamica com a acao de preco. Quando o preco do instrumento sobe acima de sua media movel, um sinal de compra aparece, se o preco cai abaixo de sua media movel, o que temos e um sinal de venda. Este sistema de comercio, que e baseado na media movel, nao e projetado para fornecer entrada no direito de mercado em seu ponto mais baixo, e sua saida direita no pico. Permite agir de acordo com a seguinte tendencia: comprar logo apos os precos chegarem ao fundo, e vender logo depois que os precos atingiram seu pico. As medias moveis tambem podem ser aplicadas aos indicadores. E ai que a interpretacao das medias moveis dos indicadores e semelhante a interpretacao das medias moveis de precos: se o indicador se eleva acima da media movel, isso significa que o movimento do indicador ascendente devera continuar: se o indicador cair abaixo da sua media movel, Significa que e provavel que continue indo para baixo. Aqui estao os tipos de medias moveis no grafico: Media Movel Simples (SMA) Media Movel Exponencial (EMA) com suavizacao de Media Movel (SMMA) Linear Media Movel Ponderada Calculo (LWMA): Media Movel Simples (SMA) Simples, em outras palavras, A media movel aritmetica e calculada pela soma dos precos de encerramento do instrumento ao longo de um certo numero de periodos unicos (por exemplo, 12 horas). Este valor e entao dividido pelo numero de tais periodos. Onde: N e o numero de periodos de calculo. Media Movel Exponencial (EMA) A media movel suavizada exponencialmente e calculada adicionando a media movel de uma determinada parcela do preco de fechamento atual ao valor anterior. Com medias moveis exponencialmente suavizadas, os precos mais recentes sao de maior valor. P-porcentagem de media movel exponencial sera parecido com: Onde: FECHAR (i) o preco do encerramento do periodo atual EMA (i-1) Exponencialmente Movendo Media do periodo anterior encerramento P a percentagem de utilizacao do valor do preco. Alisou Media Movel (SMMA) O primeiro valor desta media movel suavizada e calculada como a media movel simples (SMA): A segunda e subsequentes medias moveis sao calculados de acordo com esta formula: Onde: sum1 e a soma total dos precos de fechamento N periodos PREVSUM e a soma suavizada do SMMA1 bar anterior e a media movel suavizada da primeira barra SMMA (i) e a media movel suavizada da barra atual (exceto para o primeiro) CLOSE (i) e o preco de fechamento atual N E o periodo de suavizacao. Media Movel Ponderada Linear (LWMA) No caso da media movel ponderada, os dados mais recentes sao mais valiosos que os dados mais antigos. A media movel ponderada e calculada multiplicando cada um dos precos de fechamento dentro da serie considerada, por um determinado coeficiente de ponderacao. Onde: SUM (i, N) e a soma total dos coeficientes de peso. Source Code A fonte MQL4 completa de Medias Moveis esta disponivel no Codigo Base: Medias Moveis Aviso: Todos os direitos sobre estes materiais sao reservados pela MetaQuotes Software Corp. A copia ou reimpressao destes materiais, no todo ou em parte, e proibida. double ma iCustom (NULL , PERIODM30, quotMoving Average, 13,0,0,0,1) Imprimir (quotMA quot ma) Como fazer EA se eu quiser imprimir variavel quotmaquot apenas uma vez por bar (uma vez a cada 30min) Agora ele imprime muitas vezes ate mesmo o meu grafico Tem o periodo m30. Sua funcao EA e indicador provavelmente funcionara por tick, nao por barra. A EA faz isso, pois pode ser necessario fazer varias operacoes entre cada barra. Um carrapato pode ser uma quantidade pequena, mas variavel de tempo. Portanto, se voce tiver um comando de impressao dentro da funcao de inicio principal da EA, o resultado sera impresso frequentemente. Existem varias maneiras de contornar isso, uma e manter um tickcount que voce usa e redefini-lo de vez em quando, outro e contar o tempo, usando os resultados coletivos das diferentes funcoes TimeCurrent, outro seria esperar ate que o resultado do construido em Barras variaveis, a quantidade total de barras no grafico, aumentado em 1. NB iCustom e apenas para os indicadores personalizados que voce faz ou editar, e isso que o seu iMA procurando e a funcao de media movel padrao. Sua funcao EA e indicador provavelmente funcionara por tick, nao por barra. A EA faz isso, pois pode ser necessario fazer varias operacoes entre cada barra. Um carrapato pode ser uma quantidade pequena, mas variavel de tempo. Portanto, se voce tiver um comando de impressao dentro da funcao de inicio principal da EA, o resultado sera impresso frequentemente. Existem varias maneiras de contornar isso, uma e manter um tickcount que voce usa e redefini-lo de vez em quando, outro e contar o tempo, usando os resultados coletivos das diferentes funcoes TimeCurrent, outro seria esperar ate que o resultado do construido em Barras variaveis, a quantidade total de barras no grafico, aumentado em 1. NB iCustom e apenas para os indicadores personalizados que voce faz ou editar, e isso que o seu iMA procurando e a funcao de media movel padrao. Obrigado por sua resposta. Sim, tenho indicador personalizado. Eu comparar 2 valores (mudanca diferente em icustom) e entao eu decido whato para fazer (vender, comprar ou fechar impressao). Como voce disse, funciona em cada ponto. Vou tentar com bares. Int LastClose // define isto no topo do script em vars globais, logo apos extern vars // coloca o codigo aqui Qualquer coisa dentro do IF so executara uma vez por barra int LastClose // define isto no topo do script em vars globais, logo apos Extern vars // coloque o seu codigo aqui Qualquer coisa dentro do IF so executara uma vez por barra E uma boa ideia, exceto na circunstancia rara de que o valor de Close era o mesmo valor em ambas as barras. Eu ainda iria para o tempo eu mesmo e 30 minutos antes de cada comando foi realizado, mas se voce realmente queria uma opcao de barra: int CountBars 0 if (barras lt CountBars) // se nao e igual ou maior, devemos repor o seu valor. If (Barras gt CountBars) // Seu codigo aqui dentro. NB a outra razao id tempo de uso em vez de barras, e porque em lag pesado eu conjeturar voce pode perder uma barra para fora nas cartas menores. Criacao de indicadores personalizados Ao criar uma estrategia de negociacao de um desenvolvedor muitas vezes enfrenta a necessidade de desenhar graficamente em uma seguranca Uma certa dependencia calculada por um usuario (programador). Para isso, o MQL4 oferece a possibilidade de criar indicadores personalizados. Custom Indicator e um programa aplicativo codificado em MQL4 que e basicamente destinado a exibicao grafica de dependencias calculadas preliminarmente. Estrutura do indicador personalizado Necessidade dos buffers O principal principio subjacente aos indicadores personalizados e passar valores de matrizes de indicadores para um terminal cliente (para desenhar linhas de indicadores) atraves de buffers de troca. Buffer e uma area de memoria que contem valores numericos de um array de indicadores. O padrao MQL4 implica a possibilidade de desenhar ate oito linhas de indicadores usando um indicador personalizado. Uma matriz de indicadores e um tampao sao colocados em correspondencia com cada linha de indicador. Cada buffer tem seu proprio indice. O indice do primeiro buffer e 0, do segundo - 1, e assim por diante, o ultimo tem o indice 7. A Fig. 115 mostra como as informacoes de um indicador personalizado sao transmitidas atraves de memorias intermedias para um terminal cliente para desenhar linhas de indicador. FIG. 115. Passando valores de matrizes de indicadores atraves de um buffer para um terminal cliente. A ordem geral das linhas de indicadores de construcao e a seguinte: 1. Os calculos sao conduzidos em um indicador personalizado como resultado valores numericos sao atribuidos aos elementos de matriz de indicadores. 2. Os valores dos elementos da matriz de indicadores sao enviados para um terminal cliente atraves de buffers. 3. Nas bases de matrizes de valor recebidas de buffers, um terminal cliente exibe linhas de indicadores. Componentes de um indicador personalizado Permite analisar um indicador personalizado simples que mostra duas linhas - uma linha e construir com base em precos maximos barra, o segundo usa precos minimos. Exemplo de um indicador personalizado simples userindicator. mq4 Permite analisar em detalhes as partes do indicador. Em qualquer programa de aplicacao escrito em MQL4 voce pode indicar os parametros de configuracao que fornecem a manutencao de programa correta por um terminal de cliente. Neste exemplo, a parte principal do programa (ver Estrutura do Programa) contem varias linhas com propriedades de directivas. A primeira diretiva indica em que janela o terminal cliente deve desenhar as linhas de indicador: Em MQL4 ha duas variantes de linhas de desenho de indicadores: na janela de seguranca principal e em uma janela separada. A janela principal e a janela que contem um grafico de seguranca. Neste exemplo, o parametro indicatorchartwindow no diretorio de propriedades indica que um terminal cliente deve desenhar linhas de indicadores na janela principal. A proxima linha mostra o numero de buffers usados ??no indicador: No exemplo analisado sao desenhadas duas linhas de indicadores. Um buffer e atribuido a cada buffer, portanto, o numero total de buffers e dois. As linhas seguintes descrevem as cores das linhas indicadoras. Parametros indicatorcolor1 e indicatorcolor2 definem configuracao de cor para buffers correspondentes - neste caso para buffers com indices 0 (Azul) e 1 (Vermelho). Observe que as figuras nos nomes de parametro indicatorcolor1 e indicatorcolor2 nao sao indices de buffer. Esses numeros sao partes de nomes constantes que sao definidas de acordo com buffers. Para cada cor constante pode ser definida a discricao de um usuario. Na proxima linha indicadores arrays sao declarados: O indicador destina-se a desenhar duas linhas de indicador, por isso precisamos declarar duas matrizes globais de uma dimensao, uma para cada linha. Nomes de matrizes de indicadores sao ate usuario. Neste caso, os nomes de matriz Buf0 e Buf1 sao usados, em outros casos podem ser usados ??outros nomes, por exemplo, Line1, Alfa, Integral etc. E necessario declarar arrays em um nivel global, porque os valores de elementos de array devem ser preservados entre as chamadas Da funcao especial start (). O codigo personalizado descrito e construido com base em duas funcoes especiais - init () e start (). A funcao init () contem a parte do codigo utilizada no programa apenas uma vez (ver Funcoes especiais). Uma acao muito importante e realizada na linha: Usando a funcao SetIndexBuffer () um buffer necessario (neste caso com o indice 0) e colocado em correspondencia com um array (neste caso Buf0). Significa para construir a primeira linha de indicador um terminal de cliente aceitara dados contidos na matriz Buf0 usando o buffer zero para ela. Alem disso, o estilo de linha e definido: Para o buffer zero (0) um terminal cliente deve usar os seguintes estilos de desenho: linha simples (DRAWLINE), linha continua (STYLESOLID), largura de linha 2. As duas linhas seguintes contem configuracoes para a segunda linha : Assim, de acordo com o codigo da funcao especial init (), ambas as linhas de indicadores serao desenhadas na janela de seguranca principal. O primeiro sera uma linha azul continua com a largura 2, a segunda e uma linha tracejada vermelha (STYLEDOT) de uma largura usual. As linhas de indicadores tambem podem ser desenhadas por outros estilos (consulte Estilos de Linhas Indicadoras). Calculo de valores de matrizes de indicadores Elementos (Atencao) Os valores dos elementos de matriz de indicadores sao calculados na funcao especial start (). Para entender corretamente o conteudo do codigo start () preste atencao a ordem das barras de indexacao. A secao Arrays descreve em detalhes o metodo de indexacao de arrays-timeseries. De acordo com este metodo, a indexacao de barras comeca a partir de zero. A barra zero e uma barra ainda nao formada. O indice de bares mais proximo e 1. Os proximos sao 2 e assim por diante. A medida que novas barras aparecem em uma janela de seguranca, os indices de barras ja formadas (historico) sao alterados. A nova barra (atual, apenas formada, mais a direita) obtem o indice zero, o que esta a esquerda dele (que acaba de se formar completamente) obtem o indice 1 e os valores dos indices de todas as barras da historia tambem sao aumentados em um. O metodo descrito de barras de indexacao e o unico possivel para todo o sistema de negociacao on-line MetaTrader, e e levado em conta ao desenhar linhas usando indicadores tecnicos e personalizados. Foi dito anteriormente que as linhas de indicadores sao construidas com base nas informacoes numericas contidas nas matrizes de indicadores. Uma matriz de indicadores contem informacoes sobre as coordenadas de pontos nas quais e desenhada uma linha de indicador. E a coordenada Y de cada ponto e o valor de um elemento de matriz de indicadores. E coordenada X e o valor de um indice de elemento de matriz de indicadores. No exemplo analisado, a primeira linha de indicador e desenhada usando valores maximos de barras. A Fig. 116 mostra esta linha de indicador (de cor azul) numa janela de seguranca, e construida com base na matriz de indicadores Buf0. FIG. 116. Correspondencia das coordenadas de uma linha de indicador com os valores de uma matriz de indicadores. O valor de indice de uma matriz de indicadores esta fora por um terminal de cliente em correspondencia com um indice de barra - estes valores de indice sao iguais. Tambem deve ser levado em conta que o processo de construcao de linhas de indicadores se passa em modo de tempo real em condicoes quando em uma janela de seguranca novas barras aparecem de tempos em tempos. E todas as barras de historia sao deslocadas para a esquerda. Para que a linha do indicador seja tracada corretamente (cada ponto de linha acima da barra) tambem deve ser deslocada juntamente com barras. Portanto, ha necessidade (necessidade tecnica) de re-indexar um array de indicadores. A diferenca fundamental de uma matriz de indicadores de uma matriz usual e a seguinte: No momento em que uma nova barra e criada, os valores de indice de elementos da matriz de indicadores sao alterados automaticamente pelo terminal do cliente, ou seja - o valor de cada indice da matriz de indicadores e aumentado Um eo tamanho da matriz indicadora e aumentado por um elemento (com um indice zero). Por exemplo, a barra zero na Fig. 116 (tempo H1) tem o tempo de abertura 6:00. As 7:00 uma nova barra aparecera na janela de seguranca. A barra aberta as 6:00 obtem automaticamente o indice 1. Para que a linha do indicador seja tracada corretamente nesta barra, o terminal do cliente alterara o indice do elemento da matriz de indicadores correspondente a barra aberta as 6:00. Na tabela na Fig. 116 este elemento esta escrito na primeira linha. Juntamente com os indices de todos os elementos da matriz serao aumentados pelo terminal do cliente por um. Um indice do elemento de matriz correspondente a barra aberta as 6:00 obtem o valor 1 (antes disso era igual a 0). A matriz de indicadores ficara maior por um elemento. O indice de um novo elemento adicionado sera igual a 0, o valor deste elemento sera um novo valor que reflete a coordenada da linha de indicador em uma barra zero. Este valor e calculado na funcao especial start () em cada tick. Os calculos na funcao especial start () devem ser conduzidos de modo que nenhuma acao extra seja realizada. Antes de o indicador ser anexado a um grafico, ele nao reflete quaisquer linhas de indicadores (porque os valores de matrizes de indicadores ainda nao estao definidos). E por isso que no primeiro inicio da funcao especial start () os valores do array de indicadores devem ser calculados para todas as barras, nas quais a linha do indicador deve ser desenhada. No exemplo analisado, estas sao todas as barras presentes em um grafico (os calculos iniciais podem ser realizados nao para todas as barras disponiveis, mas para alguma ultima parte da historia e descrito em outros exemplos). Ar todos os comecos adicionais da funcao especial start () nao ha necessidade de calcular valores de matriz de indicadores para todas as barras novamente. Estes valores ja estao calculados e estao contidos na matriz de indicadores. E necessario calcular o valor atual da linha do indicador apenas em cada novo tick da barra zero. Para a implementacao da tecnologia descrita ha uma funcao padrao muito util em MQL4 - IndicatorCount (). Funcao IndicatorCount () Esta funcao retorna o numero de barras que nao foram alteradas desde a ultima chamada do indicador. Se o indicador nunca foi anexado a um grafico, na primeira execucao de start () o valor de Countedbars sera igual a zero: Significa que a matriz de indicadores nao contem nenhum elemento com valor predefinido anterior, por isso toda a matriz de indicadores Deve ser calculado do inicio ao fim. A matriz de indicadores e calculada a partir da barra mais antiga para a zero. O indice da barra mais antiga, a partir da qual os calculos devem ser iniciados, e calculado da seguinte maneira: Suponha que no momento de anexar o indicador ha 300 barras em uma janela de grafico. Este e o valor da variavel predefinida Bars. Como definido anteriormente, Countedbars e igual a 0. Assim, como resultado obtemos que o indice i da primeira barra nao contabilizada (a mais recente, a partir da qual os calculos devem ser realizados) e igual a 299. Todos os valores dos elementos da matriz de indicadores sao Calculado no ciclo while (): Enquanto i esta dentro do intervalo desde a primeira barra nao contabilizada (299) ate a corrente (0) inclusive, os valores dos elementos da matriz de indicadores sao calculados para ambas as linhas de indicadores. Nota, os valores em falta dos elementos da matriz de indicadores sao calculados durante um (o primeiro) inicio da funcao especial start (). Durante os calculos, o terminal cliente se lembra de elementos, para os quais foram calculados valores. A ultima iteracao em while () e executada quando i e igual a 0, isto e, os valores de matrizes de indicadores sao calculados para a barra zero. Quando o loop termina, a funcao especial start () termina sua execucao eo controle e passado para o terminal cliente. O terminal cliente, por sua vez, ira desenhar todas as linhas indicadoras (neste caso duas) de acordo com os valores calculados dos elementos da matriz. No proximo tick start () sera iniciado pelo terminal cliente novamente. Outras acoes dependerao da situacao (continuaremos analisando o exemplo para 300 barras). Variante 1. Um novo carrapato surge durante a formacao da barra zero atual (a situacao mais comum). FIG. 117 mostra dois ticks recebidos pelo terminal nos instantes de tempo t 1 e t 2. A situacao analisada sera a mesma para ambos os ticks. Vamos mostrar a execucao de start () que foi lancada no momento t 2. Durante a execucao da funcao start (), a seguinte linha sera executada: IndicatorCount () retornara o valor 299, isto e, desde a ultima chamada start 299 barras anteriores nao foram alteradas. Como resultado, o valor de indice i sera igual a 0 (300-299-1): Significa no proximo while () loop os valores de elementos de matriz com o indice zero serao calculados. Em outras palavras, a nova posicao de uma linha de indicador na barra zero sera calculada. Quando o ciclo terminar, start () parara de ser executado e passara o controle para o terminal do cliente. Variante 2. Uma nova marca e o primeiro sinal de uma barra zero (acontece de vez em quando). Neste caso, o fato de aparecimento de uma nova barra e importante. Antes que o controle seja passado para a funcao especial start (), o terminal cliente ira desenhar novamente todas as barras presentes na janela de seguranca e re-indexar todas as matrizes de indicadores declarados (definidas em correspondencia com buffers). Alem disso, o terminal cliente lembrara que ja existem 301 barras, nao 300 em uma janela de grafico. FIG. 118 contem situacao quando na ultima marca da barra anterior (no momento t 2) a funcao start () foi iniciada e executada com sucesso. E por isso que, embora agora a primeira barra (com indice 1) terminada no momento t 2 foi calculada pelo indicador, a funcao IndicatorCount () retornara o valor que estava na barra anterior. 299: No indice de linha seguinte i sera calculado, neste caso para o primeiro tick de uma nova barra sera igual a 1 (301-299-1): Significa calculo de valores de matriz de indicador em while () loop No aparecimento de uma nova barra sera realizada tanto para a ultima barra e para a nova barra zero. Um pouco mais cedo durante a re-indexacao de matrizes de indicadores, o terminal cliente aumentou o tamanho dessas matrizes. Valores de elementos de matriz com zero indices nao foram definidos antes dos calculos no loop. Durante os calculos no loop esses elementos obtem alguns valores. Quando os calculos em start () terminam, o controle e retornado para o terminal cliente. Depois disso, o terminal cliente desenhara linhas de indicadores na barra zero com base em valores calculados apenas de elementos de matriz com zero indices. Variante 3. Um novo tick e o primeiro tick de uma nova barra zero, mas o ultimo mas um tick nao e processado (caso raro). FIG. 119 mostra a situacao em que start () foi lancado no primeiro tick de uma nova barra no momento t 5. Hora anterior em que esta funcao foi iniciada no momento t 2. Marca que chegou ao terminal no momento t 3 (seta vermelha ) Nao foi processado pelo indicador. Isso ocorreu porque o tempo de execucao de start () t 2 - t 4 e maior que o intervalo entre ticks t 2 - t 3. Esse fato sera detectado pelo terminal cliente durante a execucao de start () lancado no momento t 5. Durante Calculos na linha: IndicatorCount () retornara o valor 299 (). Este valor e verdadeiro - a partir do momento da ultima chamada de indicador 299 barras nao foram alteradas depois (agora ja) 301. E por isso que o indice calculado da primeira barra (a esquerda), a partir da qual os calculos dos valores do elemento de matriz devem ser iniciados, Sera igual a 1 (301-299-1): significa durante while () execucao duas iteracoes serao realizadas. Durante o primeiro um valor de elementos de matriz com o indice i 1 sera calculado, isto e Buf01 e Buf11. Nao, no momento em que os calculos sao iniciados, as barras e matrizes de indicadores ja sao re-indexadas pelo terminal cliente (porque uma nova barra foi iniciada, entre os comecos da funcao especial start ()). E por isso que os calculos para elementos de matrizes com indice 1 serao calculados com base em array-timeseries (valores maximos e minimos de um preco de barras) tambem com o indice 1: Durante a segunda iteracao de while () valores para elementos com zero Indices, ou seja, para a barra zero, e calculado com base nos ultimos valores conhecidos de arrays-timeseries. A utilizacao da tecnologia descrita para o calculo de indicadores personalizados permite, em primeiro lugar, garantir o calculo dos valores de todos os elementos da matriz de indicadores, independentemente da natureza especifica da historia dos carimbos e, segundo, realizar calculos apenas para as barras nao contabilizadas, ou seja, . Nao, uma barra e considerada uncounted se o calculo de valores de elemento de um indicador arrays, pelo menos, para um ultimo tick da barra nao e realizada. Iniciando o indicador personalizado userindicator. mq4 em uma janela de grafico voce vera duas linhas - uma linha azul grossa construida sobre maximos de barras e uma linha vermelha pontilhada construida sobre seus minimos (Fig. 120). Deve notar-se que se pode construir um indicador personalizado, cujas linhas indicadoras coincidiriam com as linhas de um indicador tecnico analogo. Pode ser feito facilmente se como formulas do calculo no indicador feito sob encomenda, as mesmas formulas que no indicador tecnico sao usadas. Para ilustrar isso, podemos melhorar o codigo do programa analisado no exemplo anterior. Deixe o indicador desenhar linhas sobre valores medios de maximos e minimos de varias ultimas barras. E facil realizar os calculos necessarios: simplesmente precisamos encontrar valores medios dos elementos arrays-timeseries. Por exemplo, o valor de uma matriz de indicadores com o indice 3 (ou seja, coordenada de linha do indicador para a terceira barra) com base nos ultimos cinco maximos e calculado da seguinte maneira: Buf03 (High3 High4 High5 High6 High7) / 5 Calculos analogos podem ser Executado para um indicador linhas construidas sobre minimos. Exemplo de um indicador personalizado simples averagevalue. mq4. As linhas de indicadores sao construidas com base nos valores minimos e maximos de N barras. Neste exemplo, ha uma variavel externa AverBars. Usando esta variavel um usuario pode indicar o numero de barras, para que um valor medio e calculado. Em start (), este valor e utilizado para o calculo de um valor medio. No ciclo para a soma dos valores maximo e minimo e calculado para o numero de barras correspondente ao valor da variavel AverBars. Nas duas linhas de programa seguintes, os valores de elementos de matriz de indicadores sao calculados para linhas de indicador correspondentes a valores minimos e maximos. O metodo de media usado aqui tambem e aplicado para calculos no indicador tecnico Media Movel. Se anexarmos o indicador medio analisado averagevalue. mq4 e o indicador tecnico Moving Average, veremos tres linhas de indicadores. Se o mesmo periodo de media for configurado para ambos os indicadores, a linha Media Movel coincidira com uma das linhas indicadoras personalizadas (para isso os parametros descritos na Figura 121 devem ser especificados nas configuracoes do indicador tecnico). FIG. 121. Linhas coincidentes de um indicador tecnico e um indicador personalizado (linha vermelha). Assim, usando o indicador tecnico um usuario pode construir a reflexao de todas as regularidades necessarias no trabalho pratico. Opcoes de Indicador Personalizadas Linhas de Indicador de Desenho em Janelas Separadas O MQL4 oferece um servico de grande porte para a construcao de indicadores personalizados que os torna muito convenientes. Em particular, as linhas de indicadores podem ser desenhadas numa janela separada. Isto e conveniente quando os valores absolutos da amplitude da linha do indicador sao substancialmente menores (ou maiores) do que os precos de seguranca. Por exemplo, se estivermos interessados ??na diferenca entre os valores medios dos maximos de barras e minimos num determinado intervalo historico, dependendo do periodo, este valor sera igual a aproximadamente de 0 a 50 pontos (por exemplo, para M15). Nao e dificil construir uma linha de indicador, mas em uma janela de seguranca esta linha sera desenhada no intervalo de 0 a 50 pontos de um preco de seguranca, ou seja, substancialmente inferior a area do grafico refletida na tela. E muito inconveniente. Para desenhar linhas de indicadores em uma janela separada (que esta na parte inferior de uma janela de seguranca), no parametro de propriedade de diretiva (no inicio do programa) deve ser especificada a janela indicadora: No momento em que esse indicador e anexado a uma janela de seguranca , O terminal cliente cria uma janela separada abaixo de um grafico, no qual linhas de indicadores calculadas no indicador serao desenhadas. Dependendo das configuracoes de cores e tipos de linhas de indicadores, eles serao desenhados em um ou outro estilo. Limitando Historico de Calculos Na maioria dos casos, as linhas de indicadores contem informacoes uteis somente no historico mais recente. A parte das linhas de indicadores construida sobre barras antigas (por exemplo, um periodo de tempo de 1 mes de idade) dificilmente pode ser considerada util para tomar decisoes comerciais. Alem disso, se houver um monte de barras em uma janela de grafico, o tempo investido no calculo e desenho de linhas de indicadores e excessivamente grande. Isso pode ser critico na depuracao do programa, quando um programa e compilado e, em seguida, iniciado. E por isso que e necessario realizar calculos nao para toda a historia, mas para a parte limitada da historia barra mais recente. Para este proposito, um historico de variaveis ??externas e usado no seguinte programa. O valor desta variavel e levado em conta ao calcular o indice da primeira barra (a esquerda), a partir da qual devem ser calculados os elementos das matrizes de indicadores. Calculos adicionais no loop while () serao conduzidos para o numero de barras de historico recentes nao maiores do que o valor History. Observe que o metodo de limitacao de um historico de calculos analisado apenas diz respeito a parte dos calculos que sao realizados no primeiro inicio da funcao especial start (). Alem disso, quando aparecerem novas barras, novas partes das linhas indicadoras serao adicionadas na parte direita, enquanto a imagem na parte esquerda sera preservada. Assim, o comprimento da linha do indicador sera aumentado durante todo o tempo de operacao do indicador. O valor comum do parametro History e considerado aproximadamente 5000 barras. Exemplo de um indicador personalizado simples separatewindow. mq4. As linhas de indicadores sao desenhadas numa janela separada. Calculo semelhante de uma linha de indicador e realizado no indicador tecnico AverageTrue Range. FIG. 122 mostra uma linha de indicador construida pelo indicador personalizado separatewindow. mq4 numa janela separada e uma linha de indicador construida por ATR noutra janela. Neste caso, as linhas sao totalmente identicas porque o periodo de media e o mesmo para ambos os indicadores - 5. Se este parametro for alterado em qualquer um dos indicadores, a linha indicadora correspondente tambem mudara. FIG. 122. desenho de uma linha de indicador personalizado em uma janela separada. Linhas identicas de um indicador tecnico (ATR) e um indicador personalizado (separatewindow. mq4). Tambem e evidente que a linha de indicador personalizada e construida nao para toda a largura da tela, mas para 50 barras mais recentes, conforme especificado na variavel externa Historia. Se um comerciante precisa usar um intervalo de historico maior, o valor da variavel externa pode ser facilmente alterado atraves da janela de configuracoes do indicador personalizado. FIG. 123 mostra uma janela de seguranca, na qual a linha indicadora e desenhada em outro estilo - como um histograma. Para obter tal resultado, uma linha foi alterada no codigo do programa. Separwindow. mq4 - outros estilos de linha sao indicados: Todas as outras partes de codigo sao inalteradas. FIG. 123. Desenho linha de indicador personalizado em uma janela separada (histograma). Similaridade de desenhos de um indicador tecnico (ATR) e um indicador personalizado (separatewindow. mq4). Deslocamento de linhas de indicadores vertical e horizontal Em alguns casos, e necessario deslocar uma linha de indicador. Ele pode ser facilmente feito por MQL4 meios. Vamos analisar um exemplo, em que a posicao das linhas de indicadores em uma janela de seguranca sao calculadas de acordo com valores especificados por um usuario. Exemplo de um indicador personalizado displacement. mq4. Deslocando as linhas indicadoras horizontal e verticalmente. Para ajustar o deslocamento de linhas em um grafico, ha duas variaveis ??externas - LeftRight para deslocamento horizontal de todas as linhas e UpDown para deslocar duas linhas pontilhadas verticalmente. O algoritmo utilizado 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 indice e maior por LeftRight (para deslocar para a direita e menos para deslocar Para a direita) do que o indice de uma barra, para a qual os calculos sao realizados para deslocar uma linha verticalmente, deve ser adicionado UpDownPoint (para deslocar para cima ou para diminuir para deslocar para baixo) para cada valor de uma matriz de indicadores caracterizando a posicao da linha inicial. Os indices de exemplo sao calculados na linha: Aqui i e o indice de uma barra, para a qual os calculos sao realizados, k e um indice de um elemento de matriz de indicadores. Linha indicadora vermelha exibida pelo terminal cliente com base na matriz de indicadores A linha 0 e deslocada para a esquerda por 5 barras (de acordo com as configuracoes personalizadas, ver Fig. 124) a partir da linha inicial. Neste caso a linha inicial e uma Media Movel com o periodo de media igual a 5 a formula do calculo MA e (HighiLowi) / 2. Neste exemplo, a posicao da linha vermelha e a base para o calculo de valores de matriz de indicadores para outras duas linhas, isto e, a sua posicao no grafico. As linhas pontilhadas sao calculadas desta maneira: O uso do indice k para elementos de todos os arrays de indicadores permite executar calculos para elementos de arrays Line1, Line2 na mesma barra usada para calcular valores do array basico correspondente Line0. Como resultado, as linhas pontilhadas sao deslocadas relativamente a linha vermelha pelo valor especificado na janela de definicoes do indicador, neste caso por 30 pontos (Fig. 124). FIG. 124. A linha indicadora vermelha e deslocada para a esquerda por 5 barras. Linhas indicadoras pontilhadas sao deslocadas em relacao a linha vermelha em 30 pontos. Limitacoes dos Indicadores Personalizados Existem algumas limitacoes no MQL4 que devem ser levadas em conta na programacao de indicadores personalizados. Ha um grupo de funcoes que pode ser usado somente em indicadores personalizados e nao pode ser usado em Expert Advisors e scripts: IndicatorBuffers (), IndicatorCount (), IndicatorDigits (), IndicatorShortName (), SetIndexArrow (), SetIndexBuffer (), SetIndexDrawBegin ), SetIndexEmptyValue (), SetIndexLabel (), SetIndexShift (), SetIndexStyle (), SetLevelStyle (), SetLevelValue (). Por outro lado, as funcoes comerciais nao podem ser usadas em indicadores: OrderSend (), OrderClose (), OrderCloseBy (), OrderDelete () e OrderModify (). Isso ocorre porque os indicadores operam no fluxo de interface (diferente de Expert Advisors e scripts que operam em seu proprio fluxo). E tambem por isso que algoritmos baseados em looping nao podem ser utilizados em indicadores personalizados. O inicio de um indicador personalizado que contem um loop infinito (em termos de tempo de execucao real) pode resultar em terminal do cliente desligar com necessidade adicional para reiniciar um computador. As caracteristicas gerais comparativas de Expert Advisors, scripts e indicadores estao contidas na Tabela 2. Neste tutorial, adicionaremos o indicador de media movel como uma condicao adicional de entrada no mercado para nossa estrategia de negociacao. Para fazer isso vamos usar a funcao iMA () que esta embutida no MQL4. Funcoes como iMA, iMACD, iRSI e muitos outros permitem que voce acesse rapidamente a media movel, MACD, RSI e outros indicadores de dentro de seus sistemas negociando algoritmicos. Neste curso de iniciantes vamos apenas tocar a iMA () brevemente, mas isso deve ser suficiente para o que precisamos em nosso sistema de comercio. Codigo para 4 digitos brokersSaucer Este e o unico sinal para comprar que vem quando o grafico de barras e maior do que a linha zero. Deve-se ter em mente: o sinal de pires e gerado quando o grafico de barras inverte sua direcao de baixo para cima. A segunda coluna e mais baixa que a primeira e e colorida em vermelho. A terceira coluna e maior que a segunda e e colorida em verde. Para o sinal de pires ser gerado o grafico de barras deve ter pelo menos tres colunas. Lembre-se de que todas as colunas Awesome Oscillator devem estar sobre a linha zero para o sinal do pires ser usado. Cruzamento de linha zero O sinal de compra e gerado quando o grafico de barras passa da area de valores negativos para a de positivo. Ele vem quando o grafico de barras cruza a linha zero. As regards this signal: for this signal to be generated, only two columns are necessary the first column is to be below the zero line, the second one is to cross it (transition from a negative value to a positive one) simultaneous generation of signals to buy and to sell is impossible. Twin peaks This is the only signal to buy that can be generated when the bar chart values are below the zero line. As regards this signal, please, bear in mind: another by followed is and line zero the below which minimum lowest (the down pointing peak a have you when generated signal the down-pointing) peak which is somewhat higher (a negative figure with a lesser absolute value, which is therefore closer to the zero line), than the previous down-looking peak. the bar chart is to be below the zero line between the twin peaks. If the bar chart crosses the zero line in the section between the peaks, the signal to buy doesnt function. However, a different signal to buy will be generated zero line crossing. each new peak of the bar chart is to be higher (a negative number of a lesser absolute value that is closer to the zero line) than the previous peak. if an additional higher peak is formed (that is closer to the zero line) and the bar chart has not crossed the zero line, an additional signal to buy will be generated. Signals to sell Awesome Oscillator signals to sell are identical to the signals to buy. The saucer signal is reversed and is below zero. Zero line crossing is on the decrease the first column of it is over the zero, the second one is under it. The twin peaks signal is higher than the zero line and is reversed too. Calculation: AO is a 34-period simple moving average, plotted through the central points of the bars (HL)/2, and subtracted from the 5-period simple moving average, graphed across the central points of the bars (HL)/2. Source Code Full MQL4 source of Awesome Oscillator is available in the Code Base: Awesome Oscillator Warning: All rights on these materials are reserved by MetaQuotes Software Corp. Copying or reprinting of these materials in whole or in part is prohibited.