Sunday 20 August 2017

Moving Average Custom Indicator


Média móvel O Indicador técnico de média móvel mostra o valor médio do preço do instrumento para um determinado período de tempo. Quando se calcula a média móvel, uma média do preço do instrumento para este período de tempo. À medida que o preço muda, sua média móvel aumenta ou diminui. Existem quatro tipos diferentes de médias móveis: Simples (também referido como Aritmética), Exponencial. Suavizado e Ponderado. A média móvel pode ser calculada para qualquer conjunto de dados seqüenciais, incluindo preços de abertura e fechamento, preços mais altos e mais baixos, volume de negociação ou quaisquer outros indicadores. É freqüentemente o caso quando se utilizam médias móveis duplas. A única coisa em que as médias móveis de diferentes tipos divergem consideravelmente umas das outras, é quando os coeficientes de peso, que são atribuídos aos dados mais recentes, são diferentes. No caso de nós estamos falando de média móvel simples. Todos os preços do período de tempo em questão são iguais em valor. A média móvel exponencial e a média móvel ponderada linear atribuem mais valor aos preços mais recentes. A maneira mais comum de interpretar a média móvel de preços é comparar sua dinâmica com a ação de preço. Quando o preço do instrumento sobe acima de sua média móvel, um sinal de compra aparece, se o preço cai abaixo de sua média móvel, o que temos é um sinal de venda. Este sistema de comércio, que é baseado na média móvel, não é projetado para fornecer entrada no direito de mercado em seu ponto mais baixo, e sua saída direita no pico. Permite agir de acordo com a seguinte tendência: comprar logo após os preços chegarem ao fundo, e vender logo depois que os preços atingiram seu pico. As médias móveis também podem ser aplicadas aos indicadores. É aí que a interpretação das médias móveis dos indicadores é semelhante à interpretação das médias móveis de preços: se o indicador se eleva acima da média móvel, isso significa que o movimento do indicador ascendente deverá continuar: se o indicador cair abaixo da sua média móvel, Significa que é provável que continue indo para baixo. Aqui estão os tipos de médias móveis no gráfico: Média móvel simples (SMA) Média móvel exponencial (EMA) Média móvel suavizada (SMMA) Média móvel ponderada linear (LWMA) Você pode testar os sinais comerciais desse indicador criando um especialista Em Assistente MQL5. Simples, ou seja, a média móvel aritmética é calculada resumindo os preços de encerramento do instrumento ao longo de um certo número de períodos únicos (por exemplo, 12 horas). Este valor é então dividido pelo número de tais períodos. SMA SOMA (FECHAR (i), N) / N SUM soma FECHAR (i) período de fechamento preço próximo N número de períodos de cálculo. Média Móvel Exponencial (EMA) A média móvel suavizada exponencialmente é calculada pela adição de uma determinada parcela do preço de fechamento atual ao valor anterior da média móvel. Com médias móveis exponencialmente suavizadas, os últimos preços próximos são de maior valor. A média móvel exponencial de P por cento se parecerá com: EMA (CLOSE (i) P) EMA (i - 1) (1 - P) De um período anterior P a percentagem de utilização do valor do preço. (SMMA) O primeiro valor desta média móvel suavizada é calculado como a média móvel simples (SMA): SUM1 SUM (CLOSE (i), N) A segunda média móvel é calculada de acordo com esta fórmula: SMMA (i) (I-1) FIM (i)) / N As médias móveis sucessivas são calculadas de acordo com a seguinte fórmula: ) / N Soma SUM SUM1 soma total dos preços de fechamento para N períodos é contada a partir da barra anterior PREVSUM suavização da barra anterior SMMA (i-1) suavizada média móvel da barra anterior SMMA (i) média móvel suavizada da (Exceto para o primeiro) CLOSE (i) preço de fechamento atual N período de suavização. Após conversões aritméticas a fórmula pode ser simplificada: SMMA (i) (SMMA (i - 1) (N - 1) FECHAR (i)) / N Média Móvel Ponderada Linear (LWMA) No caso da média móvel ponderada, É mais valioso do que dados mais cedo. A média móvel ponderada é calculada multiplicando-se cada um dos preços de fechamento dentro da série considerada, por um determinado coeficiente de ponderação: LWMA SOMA (FECHAR (i) i, N) Ao criar uma estratégia de negociação, um desenvolvedor muitas vezes enfrenta a necessidade de desenhar graficamente em uma janela de segurança uma certa dependência calculada por um usuário (programador). Para isso, o MQL4 oferece a possibilidade de criar indicadores personalizados. Custom Indicator é um programa aplicativo codificado em MQL4 que é basicamente destinado a exibição gráfica de dependências calculadas preliminarmente. Estrutura do indicador personalizado Necessidade dos buffers O principal princípio subjacente aos indicadores personalizados é passar valores de matrizes de indicadores para um terminal cliente (para desenhar linhas de indicadores) através de buffers de troca. Buffer é uma área de memória que contém valores numéricos de um array de indicadores. O padrão MQL4 implica a possibilidade de desenhar até oito linhas de indicadores usando um indicador personalizado. Uma matriz de indicadores e um tampão são colocados em correspondência com cada linha de indicador. Cada buffer possui 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 as informações de um indicador personalizado são transmitidas através de memórias intermédias para um terminal cliente para desenhar linhas de indicador. FIG. 115. Passando valores de matrizes de indicadores através de um buffer para um terminal cliente. A ordem geral das linhas de indicadores de construção é a seguinte: 1. Os cálculos são conduzidos em um indicador personalizado como resultado valores numéricos são atribuídos aos elementos de matriz de indicadores. 2. Os valores dos elementos da matriz de indicadores são enviados para um terminal cliente através 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 é construir com base em preços máximos barra, o segundo usa preços mínimos. Exemplo de um indicador personalizado simples userindicator. mq4 Permite analisar em detalhes as partes do 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 principal do programa (ver Estrutura do Programa) contém várias linhas com propriedades de directivas. A primeira diretiva indica em que janela o terminal cliente deve desenhar as linhas de indicador: Em MQL4 há duas variantes de linhas de desenho de indicadores: na janela de segurança principal e em uma janela separada. A janela principal é a janela que contém 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, portanto, o número total de buffers é dois. As linhas seguintes descrevem as cores das linhas indicadoras. Parâmetros indicatorcolor1 e indicatorcolor2 definem configuração de cor para buffers correspondentes - neste caso para buffers com índices 0 (Azul) e 1 (Vermelho). Observe que as figuras nos nomes de parâmetro indicatorcolor1 e indicatorcolor2 não são índices de buffer. Esses números são partes de nomes constantes que são definidas de acordo com buffers. Para cada cor constante pode ser definida à discrição de um usuário. Na próxima linha indicadores arrays 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é usuário. Neste caso, os nomes de matriz Buf0 e Buf1 são usados, em outros casos podem ser usados ​​outros nomes, por exemplo, Line1, Alfa, Integral etc. É necessário declarar arrays em um nível global, porque os valores de elementos de array devem ser preservados entre as chamadas Da função especial start (). 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 do código utilizada no programa apenas uma vez (ver Funções especiais). Uma ação muito importante é realizada na linha: Usando a função SetIndexBuffer () um buffer necessário (neste caso com o índice 0) é colocado em correspondência com um array (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 ela. Além disso, o estilo de linha é definido: Para o buffer zero (0), um terminal cliente deve usar os seguintes estilos de desenho: linha simples (DRAWLINE), linha contínua (STYLESOLID), largura de linha 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 indicadores serão desenhadas na janela de segurança principal. O primeiro será uma linha azul contínua com a largura 2, a segunda é uma linha tracejada vermelha (STYLEDOT) de uma largura usual. As linhas de indicadores também podem ser desenhadas por outros estilos (consulte Estilos de Linhas Indicadoras). Cálculo de valores de matrizes de indicadores Elementos (Atenção) Os valores dos elementos de matriz de indicadores são calculados na função especial start (). Para entender corretamente o conteúdo do código start () 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. O índice de bares mais próximo é 1. Os próximos são 2 e assim por diante. À medida que novas barras aparecem em uma janela de segurança, os índices de barras já formadas (histórico) são alterados. A nova barra (atual, apenas formada, mais à direita) obtém o índice zero, a um à esquerda dele (que acaba de se formar completamente) obtém o índice 1 e os valores dos índices de todas as barras da história também são aumentados em um. O método descrito de barras de indexação é o único possível para todo o sistema de negociação on-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 nas informações numéricas contidas nas matrizes de indicadores. Uma matriz de indicadores contém informações sobre as coordenadas de pontos nas quais é desenhada uma linha de indicador. E a coordenada Y de cada ponto é o valor de um elemento de matriz de indicadores. E 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. A 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 das coordenadas de uma linha de indicador com os valores 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. Também deve ser levado em conta que o processo de construção de linhas de indicadores se passa em modo de tempo real em condições quando em uma janela de segurança novas barras aparecem de tempos em tempos. E todas as barras de história são deslocadas para a esquerda. Para que a linha do indicador seja traçada corretamente (cada ponto de linha acima da barra) também deve ser deslocada juntamente com barras. Portanto, há necessidade (necessidade técnica) de re-indexar um array de indicadores. A diferença fundamental de uma matriz de indicadores 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, ou seja - o valor de cada índice da matriz de indicadores é aumentado Um eo tamanho da matriz indicadora é aumentado por um elemento (com um índice zero). Por exemplo, a barra zero na Fig. 116 (tempo H1) tem o tempo de abertura 6:00. Às 7:00 uma nova barra aparecerá na janela de segurança. A barra aberta às 6:00 obtém automaticamente o índice 1. Para que a linha do indicador seja traçada corretamente nesta barra, o terminal do cliente alterará o índice do elemento da matriz do indicador correspondente à barra aberta às 6:00. Na tabela na Fig. 116 este elemento está escrito na primeira linha. Juntamente com os índices de todos os elementos da matriz serão aumentados pelo terminal do cliente por um. Um índice do elemento de matriz correspondente à barra aberta às 6:00 obtém o valor 1 (antes disso era igual a 0). A matriz de indicadores ficará 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 da linha de indicador em uma barra zero. Este valor é calculado na função especial start () em cada tick. Os cálculos na função especial start () devem ser conduzidos de modo que nenhuma ação extra seja realizada. Antes de o indicador ser anexado a um gráfico, ele não reflete quaisquer linhas de indicadores (porque os valores de matrizes de indicadores ainda não estão definidos). É por isso que no primeiro início da função 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 são todas as barras presentes em um gráfico (os cálculos iniciais podem ser realizados não para todas as barras disponíveis, mas para alguma última parte da história é descrito em outros exemplos). Ar todos os começos adicionais da função especial start () não há necessidade de calcular valores de matriz de indicadores para todas as barras novamente. Estes valores já estão calculados e estão contidos na matriz de indicadores. É necessário calcular o valor atual da linha do indicador apenas em cada novo tick da barra zero. Para a implementação da tecnologia descrita há uma função padrão muito útil em MQL4 - IndicatorCount (). Função IndicatorCount () Esta função retorna o número de barras que não foram alteradas desde a última chamada do indicador. Se o indicador nunca foi anexado a um gráfico, na primeira execução de start () o valor de Countedbars será igual a zero: 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 a zero. O índice da barra mais antiga, a partir da qual os cálculos devem ser iniciados, é calculado da seguinte maneira: Suponha que no momento de anexar o indicador há 300 barras em uma janela de gráfico. Este é o valor da variável predefinida Bars. Como definido anteriormente, Countedbars é igual a 0. Assim, como resultado obtemos que o índice i da primeira barra não contabilizada (a mais recente, a partir da qual os cálculos devem ser realizados) é igual a 299. Todos os valores dos elementos da matriz de indicadores são Calculado no ciclo while (): Enquanto i está dentro do intervalo desde a primeira barra não contabilizada (299) até a corrente (0) inclusive, os valores dos elementos da matriz de indicadores são calculados para ambas as linhas de indicadores. Nota, os valores em falta dos elementos da matriz de indicadores são calculados durante um (o primeiro) início da função especial start (). Durante os cálculos, o terminal cliente se lembra de elementos, para os quais foram calculados valores. A última iteração em while () é executada quando i é igual a 0, isto é, os valores de matrizes de indicadores são calculados para a barra zero. Quando o loop termina, a função especial start () termina sua execução eo controle é passado para o terminal cliente. O terminal cliente, por sua vez, irá desenhar todas as linhas indicadoras (neste caso duas) de acordo com os valores calculados dos elementos da matriz. No próximo tick start () será iniciado pelo terminal cliente novamente. Outras ações dependerão da situação (continuaremos analisando o exemplo para 300 barras). Variante 1. Um novo carrapato surge durante a formação da barra zero atual (a situação mais comum). FIG. 117 mostra dois ticks recebidos pelo terminal nos instantes de tempo t 1 e t 2. A situação analisada será a mesma para ambos os ticks. Vamos mostrar a execução de start () que foi lançada no momento t 2. Durante a execução da função start (), a seguinte linha será executada: IndicatorCount () retornará o valor 299, isto é, desde a última chamada start 299 barras anteriores não foram alteradas. Como resultado, o valor de índice i será igual a 0 (300-299-1): Significa no próximo while () loop os valores de elementos de matriz com o índice zero serão calculados. Em outras palavras, a nova posição de uma linha de indicador na barra zero será calculada. Quando o ciclo terminar, start () parará de ser executado e passará o controle para o terminal do cliente. Variante 2. Uma nova marca é o primeiro sinal de uma barra zero (acontece de vez em quando). Neste caso, o fato de aparecimento de uma nova barra é importante. Antes que o controle seja passado para a função especial start (), o terminal cliente irá desenhar novamente todas as barras 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 cliente 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 da barra anterior (no momento t 2) a função start () foi iniciada e executada com sucesso. É por isso que, embora agora a primeira barra (com índice 1) terminada no momento t 2 foi calculada pelo indicador, a função IndicatorCount () retornará o valor que estava na barra anterior. 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): Significa cálculo de valores de matriz de indicador em while () loop No aparecimento de uma nova barra será realizada tanto para a última barra e para a nova barra zero. Um pouco mais cedo durante a re-indexação de matrizes de indicadores, o terminal cliente aumentou o tamanho dessas matrizes. Valores de elementos de matriz com zero índices não foram definidos antes dos cálculos no loop. Durante os cálculos no loop esses elementos obtêm alguns valores. Quando os cálculos em start () terminam, o controle é retornado para o terminal cliente. Depois disso, o terminal cliente desenhará linhas de indicadores na barra zero com base em valores calculados apenas de elementos de matriz com zero índices. Variante 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 mostra a situação em que 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 processado pelo indicador. Isso ocorreu porque o tempo de execução de start () t 2 - t 4 é maior que o intervalo entre ticks t 2 - t 3. Esse fato será detectado pelo terminal cliente durante a execução de start () lançado no momento t 5. Durante Cálculos na linha: IndicatorCount () retornará o valor 299 (). Este valor é verdadeiro - a partir do momento da última chamada de indicador 299 barras não foram alteradas depois (agora já) 301. É por isso que o índice calculado da primeira barra (à esquerda), a partir da qual os cálculos dos valores do elemento de matriz devem ser iniciados, Será igual a 1 (301-299-1): significa durante while () execução duas iterações serão realizadas. Durante o primeiro um valor de elementos de matriz com o índice i 1 será calculado, isto é Buf01 e Buf11. Não, no momento em que os cálculos são iniciados, as barras e matrizes de indicadores já são re-indexadas pelo terminal cliente (porque uma nova barra foi 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 (valores máximos e mínimos de um preço de barras) também com o índice 1: Durante a segunda iteração de while () valores para elementos com zero Índices, ou seja, para a barra zero, é calculado com base nos últimos valores conhecidos de arrays-timeseries. A utilização da tecnologia descrita para o cálculo de indicadores personalizados permite, em primeiro lugar, garantir o cálculo dos valores de todos os elementos da matriz de indicadores, independentemente da natureza específica da história dos carimbos e, segundo, realizar cálculos apenas para as barras não contabilizadas, ou seja, . Não, uma barra é considerada uncounted se o cálculo de valores de elemento de um indicador arrays, pelo menos, para um último tick da barra não é realizada. Iniciando o indicador personalizado userindicator. mq4 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). Deve notar-se que se pode construir um indicador personalizado, cujas linhas indicadoras coincidiriam com as linhas de um indicador técnico análogo. Pode ser feito facilmente 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 isso, podemos melhorar o código do programa analisado no exemplo anterior. Deixe o indicador desenhar linhas sobre valores médios de máximos e mínimos de várias últimas barras. É fácil realizar os cálculos necessários: simplesmente precisamos encontrar valores médios dos elementos arrays-timeseries. Por exemplo, o valor de uma matriz de indicadores com o índice 3 (ou seja, coordenada de linha do indicador para a terceira barra) com base nos últimos cinco máximos é calculado da seguinte maneira: Buf03 (High3 High4 High5 High6 High7) / 5 Cálculos análogos podem ser Executado para um indicador linhas construídas sobre mínimos. Exemplo de um indicador personalizado simples averagevalue. mq4. As linhas de indicadores são construídas com base nos 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 um valor médio é calculado. Em start (), este valor é utilizado para o cálculo de um valor médio. No ciclo para a soma dos valores máximo e mínimo é calculado para o número de barras correspondente ao valor da variável AverBars. Nas duas linhas de programa seguintes, os valores de elementos de matriz de indicadores são calculados para linhas de indicador correspondentes a valores mínimos e máximos. O método de média usado aqui também é aplicado para cálculos no indicador técnico Média Móvel. Se anexarmos o indicador médio analisado averagevalue. mq4 e o indicador técnico Moving Average, 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 indicadoras personalizadas (para isso os parâmetros descritos na Figura 121 devem ser especificados 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 um usuário pode construir a reflexão de todas as regularidades necessárias no trabalho prático. Opções de Indicador Personalizadas Linhas de Indicador de Desenho em Janelas Separadas O MQL4 oferece um serviço de grande porte para a construção de indicadores personalizados que os torna muito convenientes. Em particular, as linhas de indicadores podem ser desenhadas numa janela separada. Isto é conveniente quando os valores absolutos da amplitude da linha do indicador são substancialmente menores (ou maiores) do que os preços de segurança. Por exemplo, se estivermos interessados ​​na diferença entre os valores médios de máximos de barras e mínimos em um determinado intervalo histórico, dependendo do período, 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 no 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), no parâmetro de propriedade de diretiva (no início do programa) deve ser especificada a janela indicadora: No momento em que esse indicador é anexado a uma janela de segurança , O terminal cliente cria uma janela separada abaixo de um gráfico, no qual linhas de indicadores calculadas no indicador serão desenhadas. Dependendo das configurações de cores e tipos de linhas de indicadores, eles serão desenhados em um ou outro estilo. Limitando Histórico de Cálculos Na maioria dos casos, as linhas de indicadores contêm informações úteis somente no histórico mais recente. A parte das linhas de indicadores construída sobre barras antigas (por exemplo, um período de tempo de 1 mês de idade) dificilmente pode ser considerada ú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 indicadores é excessivamente 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 da história barra mais recente. Para este propósito, um histórico de variáveis ​​externas é usado no seguinte programa. O valor desta variável é levado em conta ao calcular o índice da primeira barra (à esquerda), a partir da qual devem ser calculados os elementos das matrizes de indicadores. Cálculos adicionais no loop while () serão conduzidos para o número de barras de histórico recentes não maiores do que o valor History. Observe que o método de limitação de um histórico de cálculo analisado refere-se apenas à parte dos cálculos que são realizados no primeiro início da função especial start (). 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 tempo de operação do indicador. O valor comum do parâmetro History é considerado aproximadamente 5000 barras. Exemplo de um indicador personalizado simples separatewindow. mq4. As linhas de indicadores são desenhadas numa janela separada. Cálculo semelhante de uma linha de indicador é realizado no indicador técnico AverageTrue Range. FIG. 122 mostra uma linha de indicador construída pelo indicador personalizado separatewindow. mq4 numa janela separada e uma linha de indicador construída por ATR noutra janela. Neste caso, as linhas 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 indicadora correspondente também mudará. FIG. 122. desenho de uma linha de indicador personalizado em uma janela separada. Linhas idênticas de um indicador técnico (ATR) e um indicador personalizado (separatewindow. mq4). Também é evidente que a linha de indicador personalizada é construída não para toda a largura da tela, mas para 50 barras mais recentes, conforme especificado na variável externa História. Se um comerciante precisa usar um intervalo de histórico maior, o valor da variável externa pode ser facilmente alterado através da janela de configurações do indicador personalizado. FIG. 123 mostra uma janela de segurança, na qual a linha indicadora é desenhada em outro estilo - como um histograma. Para obter tal resultado, uma linha foi alterada no código do programa. Separwindow. mq4 - outros estilos de linha são indicados: Todas as outras partes de código são inalteradas. FIG. 123. Desenho linha de indicador personalizado em uma janela separada (histograma). Similaridade de desenhos de um indicador técnico (ATR) e um indicador personalizado (separatewindow. mq4). Deslocamento de linhas de indicadores vertical e horizontal Em alguns casos, é necessário deslocar uma linha de indicador. Ele pode ser facilmente feito por MQL4 meios. Vamos analisar um exemplo, em que a posição das linhas de indicadores em uma janela de segurança são calculadas de acordo com valores especificados por um usuário. Exemplo de um indicador personalizado displacement. mq4. Deslocando as linhas indicadoras horizontal e verticalmente. Para ajustar o deslocamento de linhas 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. 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 índice é maior por LeftRight (para deslocar para a direita e menos para deslocar Para a direita) do que o índice de uma barra, para a qual os cálculos são 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 posição da linha inicial. Os índices de exemplo 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 um elemento de matriz de indicadores. Linha indicadora vermelha exibida pelo terminal cliente com base na matriz de indicadores A linha 0 é deslocada para a esquerda por 5 barras (de acordo com as configurações personalizadas, ver 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 MA é (HighiLowi) / 2. Neste exemplo, a posição da linha vermelha é a base para o cálculo de valores de matriz de indicadores para outras duas linhas, isto é, a sua posição no gráfico. As linhas pontilhadas são calculadas desta maneira: O uso 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 resultado, as linhas pontilhadas são deslocadas relativamente à linha vermelha pelo valor especificado na janela de definições do indicador, neste caso por 30 pontos (Fig. 124). FIG. 124. A linha indicadora vermelha é deslocada para a esquerda por 5 barras. Linhas indicadoras pontilhadas são deslocadas em relação à linha vermelha em 30 pontos. Limitações dos Indicadores Personalizados Existem algumas limitações no MQL4 que devem ser levadas em conta na programação de indicadores personalizados. Há um grupo de funções que pode ser usado somente em indicadores personalizados e não 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 funções comerciais não 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 próprio fluxo). É também por isso que algoritmos baseados em looping não podem ser utilizados em indicadores personalizados. O início de um indicador personalizado que contém um loop infinito (em termos de tempo de execução real) pode resultar em terminal do cliente desligar com necessidade adicional para reiniciar um computador. As características gerais comparativas de Expert Advisors, scripts e indicadores estão contidas na Tabela 2. Como criar seus próprios EAs e Indicadores I Na peça de hoje, seguimos nosso artigo sobre o novo terminal de negociação MT4 Build 600 para lhe dar uma visão como Para algumas ferramentas que você pode usar para converter essa estratégia de sua em um consultor especialista ou MT4 indicador que pode ser usado para negociação na plataforma de negociação Forex4you. Algumas destas ferramentas são gratuitas, enquanto o resto exigirá o pagamento da licença de software. Na primeira parte que publicamos hoje, apresentamos uma das grandes ferramentas por aí que torna mais fácil programar seus próprios EAs e indicadores. Este é o NoProgra EA Builder. O NoProgras EA Builder é um tipo distinto de construtor EA no mercado hoje no sentido de que tem a capacidade de linguagem humana natural no código MQL4. O que isto significa é que se o comerciante fala inglês ou outra língua, tudo o que é necessário é entrar na linguagem naturalmente falada, e algoritmos de estratégia NoProgras irá converter a linguagem natural em MQL4, isto criando o perito conselheiro (s) para você. Para o melhor de meu conhecimento, este é o único software que faz isso. Então, como é que este trabalho NoProgra Custom Indicator Builder é um módulo autônomo do NoProgra EA Builder. Ele usa uma interface gráfica semelhante que permite aos usuários criar indicadores personalizados para MT4 usando linguagem natural (a maneira como falamos). A linguagem natural é traduzida para MQL4 por NoProgra assim você não precisa codificar ou programar em MQL. Com NoProgra Custom Indicator Builder você pode criar seus próprios indicadores para MT4 e usá-los no NoProgra EA Builder. NOPROGRA EA BUILDER 8211 CARACTERÍSTICAS Use linguagem natural para criar seus próprios conselheiros especialistas para MetaTrader. Grande interface gráfica do usuário. Nenhum conhecimento MQL ou de codificação é necessário. Ferramenta visual que permite aos comerciantes e codificadores criar EAs em segundos. Crie soluções complexas usando indicadores técnicos, preços de moeda, sinais de vela e conectores lógicos (AND 8211 OU). Você pode criar eas que olham para negociação sinais em diferentes prazos e para vários pares de moedas. Você pode importar indicadores personalizados existentes escritos bem e usá-los em seu EA. Criar EAs e indicadores mais rapidamente Produz código correto MQL Suporta 4 e 5 dígitos corretores Com NoProgra EA Builder você don8217t necessidade de aprender MQL ou EA programação para criar seus consultores especializados. No entanto, se você quiser aprender MQL, esta é a ferramenta perfeita para ver como funciona o código de negociação de código. It8217s o único construtor do conselheiro do perito baseado na língua natural. ECN compatível. Você começa a escolher se você quer um MT4 EA ou um EA para uma plataforma ECN. Mantenha seus segredos comerciais para si mesmo. Não há necessidade de compartilhá-lo com codificadores mais, especialmente se você espera vender os EAs. Isso reduz o medo de a segurança dos EAs ser comprometida. MetaTrader4 variáveis ​​para gerenciar EAs e indicadores criados. Recursos para criar variáveis ​​MT4 a serem usadas durante backtesting e otimização de software criado. Ele vem com NoProgra Indicator Builder para que você possa criar indicadores sem qualquer programação Exemplos de Indicadores Construído com NoProgra Aqui vamos mostrar-lhe três exemplos de consultores especializados construídos com o NoProgra EA Builder Após a compra, você encontrará esses EAs no diretório de instalação NoProgra. Para usar esses consultores especializados no MetaTrader, é necessário abrir o arquivo. trs com o NoProgra EA Builder (.trs é a extensão de arquivo para EAs construídas com o NoProgra EA Builder e significa TRading Strategy). Esses arquivos precisam ser convertidos para os arquivos. mq4 ou. ex4 para que eles trabalhem na plataforma MT4. Depois de abrir o arquivo. trs, você verá a estratégia no NoProgra EA Builder. Em seguida, você terá que gerar o EA usando o NoProgra EA Builder. 1º Exemplo: Orientador de Especialista em Movimento Médio (MovingAverage. trs) Este é o EA mais simples e fácil que você pode criar. A lógica é escrita pela primeira vez na linguagem humana natural (que neste caso é o inglês) no lado esquerdo da interface. Queremos estabelecer um sinal de negociação com base no indicador de média móvel. Esta é essencialmente uma estratégia de média móvel com duas médias móveis (7 dias e 21 dias), onde queremos criar um algoritmo de negociação em que a média móvel mais curta deve atravessar a média móvel mais longa, ea direção da cruz será Em seguida, indicar a direção que o sinal de negociação deve estar indo. Sinal Long: Ir longo (Comprar) se a média móvel com um período de 7 é maior do que a média móvel com um período de 21. Sinal curto: Vá curto (Venda) se a média móvel com um período de 7 é inferior à média móvel. Média móvel com um período de 21. Ambos os valores de MA são calculados usando o preço de fechamento da barra anterior (ou 1 bar atrás) uma vez que a EA irá negociar na abertura do próximo castiçal. 2º Exemplo: Moving Average com ADX Expert Advisor (MovingAverageADX. trs) Aqui temos um segundo exemplo, que procura criar um EA que combine o EA anterior no primeiro exemplo, mas com um filtro adicionado na forma de um sinal do Indicador Direcional Médio (ADX). O ADX é usado para detectar a tendência de um par de moedas. Quando ADX é alto, significa que o mercado está tendendo. O próprio ADX não diz a direção do mercado, e é isso que o indicador de média móvel vai fazer. Então, usando as 2 médias móveis, juntamente com o indicador ADX escolhe a tendência do ativo, bem como a direção da tendência. Assim, a lógica escrita em linguagem natural é a seguinte: Sinal Long: Ir longo (Buy) se a média móvel com um período de 7 é maior do que a média móvel com um período de 21 E ADX com um período de 14 é maior do que 30. Sinal curto: Vá curto (venda) se a média móvel com um período de 7 é inferior à média móvel com um período de 21 E ADX com um período de 14 é superior a 30. O especialista MA-ADX abre Quando ambas as condições de negociação forem verdadeiras ao mesmo tempo. Assim, a condição MA e a condição ADX precisam ser verdadeiras para acionar uma nova ordem. 3º Exemplo: Moving Average com ADX modificado Expert Advisor (MovingAverageADX2.trs) Vamos mais adiante adicionar outro filtro ao EA criado no segundo exemplo, porque descobrimos que o MA-ADX EA anterior tem um efeito indesejado de não sempre pegar Oportunidades de comércio, deixando assim dinheiro na mesa. Vamos dizer que a média móvel com um período de 7 foi superior à média móvel com um período de 21 E ao mesmo tempo ADX com um período de 14 foi superior a 30 e como resultado uma nova posição longa (BUY) foi aberto . Algum tempo depois, o mercado mudou de direção e se moveu contra a posição aberta. Em um ponto, a média móvel com um período de 7 é menor do que a média móvel com um período de 21, mas ADX com um período de 14 é inferior a 308230 e nada acontece. Por que ambas as condições precisam ser verdadeiras para o EA fechar a posição longa (COMPRAR) e abrir uma nova posição curta (VENDER). Desde ADX é inferior a 30 nada acontece. Para evitar esse comportamento, podemos adicionar algumas condições de negociação para fechar posições abertas quando o mercado muda de direção (independentemente dos valores do ADX). Então, para cuidar deste problema, nós fazemos algo muito simples. Adicionamos filtros de saída à estrutura EA adicionando dois novos componentes: a Saída de posição longa e Saída de posição curta: Ir longa (Comprar) se a média móvel com um período de 7 for superior à média móvel com um período de 21 E ADX Com um período de 14 é superior a 30. Saia da posição comprada (fechar COMPRAS anteriores) se a média móvel com um período de 7 é inferior à média móvel com um período de 21 Go Short (Venda) se a média móvel com um período De 7 é inferior à média móvel com um período de 21 E ADX com um período de 14 é superior a 30. Saia da posição curta (fechar VENDAS anteriores) se a média móvel com um período de 7 é superior à média móvel com um Período de 21 Por favor, note que se você não está protegendo, a EA fecha todas as posições longas antes de abrir uma nova posição curta de forma similar a EA fecha todas as posições curtas antes de abrir uma nova posição longa. Criando Indicadores Personalizados Para criar seu próprio indicador personalizado, basta seguir um processo simples: Executar o Módulo Indicador Personalizado (NoPrograCIB) Adicionar um Sinal Indicador: Um sinal é uma linha, ícone ou histograma que representa uma Fórmula Indicadora. Você precisa definir a fórmula para seu indicador personalizado. Adicione uma fórmula ao Sinal Indicador: Os indicadores são baseados em fórmulas que usam preços e / ou volume. Por exemplo, a fórmula para uma média móvel pode se parecer com: MA (Fechar Preço na barra 1 Fechar Preço na barra 2 Fechar Preço na barra n) / n Gerar o seu indicador personalizado. Preste atenção ao número do sinal. Um indicador MetaTrader4 pode ter até 8 sinais, com números de sinais de 0 a 7. Você precisa saber o número do sinal para poder usar o indicador em um Expert Advisor. Encontre o indicador personalizado no MetaTrader4. Procure por indicadores personalizados. Anexe o indicador a um gráfico. Quando você gera o código indicador personalizado, você verá uma mensagem com os sinais ea maneira de identificá-los. O indicador personalizado será salvo em MetaTrader Diretório / experts / indicators Vá para o EA Builder, selecione a opção de indicador personalizado Importar o indicador personalizado Ao criar indicadores personalizados para MT4, você precisa levar em conta os seguintes fatores: Indicadores personalizados devem ser colocados No diretório MetaTrader Diretório / peritos / indicadores Um indicador personalizado não pode negociar Um indicador personalizado usa informações históricas de preços e volume Informações históricas só usa 4 preços por bar: aberto, fechado, alto e baixo. Não usa todos os preços entre abrir e fechar Para barras de referência, metaTrader4 usuário um índice da seguinte maneira: 0 é a barra atual 1 é a barra anterior 2 é a barra antes da barra anterior 3 é a barra precedendo 2, etc O índice é Usado na fórmula seu sempre entre e i0 significa usar barra atual i1 significa usar a barra anterior i2 significa usar a barra antes da barra anterior i3 Indicadores personalizados para MetaTrader pode ter até 8 sinais Cada sinal tem um número para identificá-lo Em sinais MetaTrader Pode ser plotada no gráfico ou abaixo do gráfico. Em um indicador personalizado, todos os sinais devem ser plotados da mesma maneira. Você não pode ter um indicador que traça um sinal no gráfico e outro sinal abaixo do gráfico. Se você precisa exibir os sinais de diferentes maneiras, é necessário criar dois indicadores. Se sua fórmula de indicador personalizado usa / (Divide by como em a / b), você pode ter divisão por zero problemas. Para evitá-los, certifique-se de usar este padrão a / (b0.0000000000001) Adicione um número realmente pequeno para evitar a divisão por zero, certifique-se de que não afeta a sua fórmula. INSTALAÇÃO E USO Primeiro instale o java a partir do java enquanto o programa é executado em Java. Em seguida, faça o download do NoProgra usando o link abaixo: noprogra / download-ea-builder. Execute o instalador e instale o NoProgra na pasta C: NoProgra. Depois de terminar a instalação, você pode criar seu diretório MT4 de acordo com as diretrizes sob as quais o novo MT4 Build 600 é executado. Depois de gerar o código EA com NoProgra, você também pode testar novamente o seu consultor perito para garantir que ele funciona como esperado. Use variáveis ​​do MetaTrader para otimizar. O software vem com uma avaliação gratuita de 4 dias e uma garantia de 7 dias dinheiro de volta. O software está disponível para 127 em noprogra. Na próxima parte deste artigo, vamos trazer mais dois exemplos de construtores EA que podem ajudá-lo a transformar suas idéias para uma EA em uma realidade sem o uso de linguagem de programação. Atenção As opiniões dos autores são inteiramente suas.

No comments:

Post a Comment