Friday 21 July 2017

Moving Average Indicator Separate Window


Indicadores para Análise Técnica Um indicador técnico é uma manipulação matemática de um preço de segurança e / ou volumes destinados a prever futuras mudanças de preços. As decisões sobre como e quando abrir ou fechar posições podem ser feitas com base em sinais de indicadores técnicos. De acordo com suas propriedades funcionais, os indicadores podem ser divididos em dois grupos: indicadores de tendência e osciladores. Indicadores de tendência ajudam a avaliar a direção do preço e detectar os momentos de volta de forma síncrona ou com um atraso. Os osciladores permitem encontrar os pontos de viragem com antecedência ou de forma síncrona. O MetaTrader 5 para iPhone / iPad fornece 30 indicadores. Eles são divididos nos seguintes grupos: Um indicador técnico pode ser desenhado em uma janela de indicador separado com sua própria escala vertical (por exemplo, MACD) ou aplicado diretamente a um gráfico de preços (como Moving Average). Cada indicador tem um conjunto específico de parâmetros. Gerenciamento de indicadores Para ir para a página de gerenciamento de indicadores, toque quando exibir um gráfico ou use o comando quotIndicatorsquot do menu de contexto. Adicionando Indicadores Para adicionar um indicador, toque no cabeçalho da janela do gráfico, por exemplo, quotMain chartquot. Se os indicadores são aplicados apenas no gráfico principal ou não são aplicados, a janela fornece opções para adicionar / remover indicadores apenas para o gráfico principal. Se um indicador for desenhado numa janela separada (por exemplo, MACD), a janela é criada automaticamente. Depois que uma janela adicional foi criada, você pode adicionar indicadores diretamente a ela. Um toque no cabeçalho da janela do gráfico abre uma janela, a partir da qual pode ser seleccionado um indicador Depois de seleccionar os indicadores, abre-se a janela de propriedades. Definições dos Indicadores Cada indicador tem um conjunto específico de parâmetros. Um dos parâmetros comuns é quotApply toquot. Os indicadores podem ser plotados com base em dados de preços e seus derivados (Preço Mediano, Preço Típico, Ponderado Close), bem como com base em outros indicadores. Por exemplo, uma Média Móvel pode ser construída com base nos valores MACD. Para fazer isso, trace primeiro o código MACD e, em seguida, em sua janela, adicione MA, selecionando no campo QuotApply toquot de suas configurações a opção quotPrevious indicator39s dataquot. Se você selecionar quotFerst indicador39s dataquot, MA será construído com base no primeiro indicador, que não é necessariamente o MACD. Existem nove variantes de desenho indicador: Fechar 150 com base em preços fechados. Abrir 150 baseado em preços abertos. Alta 150 com base em preços altos. Low 150 com base em preços baixos. Preço Médio (HL / 2) 150 com base no preço médio: (Alta Baixa) / 2. Preço típico (HLC / 3) 150 baseado no preço típico: (High Low Close) / 3. Ponderado Close (HLCC / 4) 150 com base no preço médio ponderado ponderado: (High Low 2Close) / 4. Dados do primeiro indicador39 com base nos valores do primeiro indicador aplicado. A opção de usar os dados do primeiro indicador só está disponível para indicadores em uma janela separada, porque na janela principal do gráfico o primeiro indicador é o preço. Dados do indicador anterior 150 com base nos valores do indicador anterior. Além deste parâmetro, você pode definir o período, método, Shift e muitos outros parâmetros de indicadores. Como remover indicadores Você pode excluir os indicadores da seguinte forma: Toque no botão Modificar no canto superior direito. Para remover um indicador ou uma janela adicional, toque em. Passe o dedo da esquerda para a direita na linha do indicador. Para remover um indicador, use o botão quotDeletequot que aparece. Modificando Indicadores Para mudar os parâmetros de um indicador, toque nele na janela quotIndicatorsquot. MetaTrader 4 - Indicadores Multi Moving Average - indicador para MetaTrader 4 Descrição: Multi Moving Average - é um indicador que mostra as informações sobre 4 Médias Móveis em um separado janela. Você pode alterar os parâmetros de entrada na janela Propriedades do Indicador para qualquer uma das médias móveis: Período médio (período). Método de média (mamethod). O tipo de preço utilizado para cálculo (preço aplicado). E muitas opções para rótulos de texto: Ele foi criado para quotunloadquot o gráfico de preços (especialmente das Médias Móveis), mas salvar as informações úteis. 1. Mostra o estado atual das médias móveis - aumento ou queda (usando as diferentes cores para caixas / seta) 2. Mostra o estado atual das médias móveis em relação ao preço (ou Média Móvel com período 1) - é Ele acima ou abaixo (usando as diferentes cores para etiquetas de texto) Assim, configurando os períodos de Médias Móveis, é possível entender a tendência do mercado sem usar as médias móveis na tabela de preços Imagem: Se você tiver perguntas para melhorar o indicador, por favor Envia-me a mensagem privada Editores observação: Se você tiver alguma dúvida para o autor, sugestões ou comentários, é melhor postá-los lá. Se você encontrou este código útil para fins comerciais ou educacionais, não se esqueça de agradecer a author. MetaTrader 4 - Exemplos Segredos do MetaTrader 4 Client Terminal: Indicadores Não se pode imaginar a análise dos mercados financeiros sem indicadores técnicos no momento. Você pode criar seus próprios indicadores ou usar os incorporados. Os indicadores incorporados funcionam mais rapidamente do que os personalizados e possuem vários recursos que não podem ser implementados em indicadores personalizados. Por exemplo, existem indicadores que podem ser anexados a um gráfico, tanto na janela principal como em uma sub-janela. Além disso, o indicador pode ser calculado não sobre valores de preço e / ou volume, mas sobre os valores de outro indicador. O uso inteligente dos indicadores incorporados ajudará a ir longe sem mergulhar na programação dos próprios. Há trinta indicadores embutidos no MetaTrader 4 Client Terminal. Condicionalmente, todos os indicadores podem ser divididos em quatro grupos: osciladores tendência indicadores Bill Williams volumes indicadores. Os indicadores de tendência ajudam a alocar movimentos de preços em uma direção e detectam, sincronicamente ou atrasados, os momentos em que as tendências se transformam. Os osciladores permitem detectar essas voltas de forma sincronizada ou antecipada. Bill Williams indicadores têm propriedades de osciladores e indicadores de tendência. Os volumes analisam não os movimentos de preços como são, mas a quantidade de carrapatos que têm renda durante o bar. Tabela de Resumo das Características dos Indicadores Incorporados Usando os links na tabela, você pode visualizar a fonte de código de um indicador personalizado que corresponde ao embutido. Descrições dos campos da tabela o oscilador t indicador de tendência b Indicador Bill Williams v volume. S indicador é anexado em uma sub janela por padrão m indicador é anexado na janela principal por padrão. Associação com s / m. Se o indicador pode ou não ser associado ao indicador já anexado em uma sub janela (s) ou na janela principal (m). Linhas adicionais. Linhas adicionais, Indicadores anteriores Dados e Primeiros indicadores Dados, aparecem no campo Aplicar a na janela de propriedades de indicadores quando o indicador está sendo arrastado. Indicadores anteriores Dados - dados do último indicador anexado à janela principal ou a uma sub-janela. Se não houver indicadores conectados, os dados de indicadores anteriores são os dados do gráfico. E o indicador a ser anexado será construído com base no preço de fechamento do gráfico. Primeiros Indicadores Dados - dados do indicador que foi anexado como o primeiro para a janela principal ou para uma sub-janela. Se não houver indicadores conectados, os Dados dos Primeiros Indicadores são os dados do gráfico. E o indicador a ser anexado será construído com base no preço de fechamento do gráfico. Período / turno. Disponibilidade de campos com nomes correspondentes na guia Parâmetros da janela de propriedades de indicadores. Aplicar a. Disponibilidade do campo Aplicar a na guia Parâmetros da janela de propriedades dos indicadores. Método . Disponibilidade do campo do mesmo nome na guia Parâmetros (escolha do método de construção da média móvel). Níveis. Disponibilidade da guia Níveis. Como anexar indicadores a um gráfico Um indicador pode ser anexado a um gráfico de seis maneiras: usando o comando do menu principal: clicando duas vezes no nome do indicador na janela Navegador selecionando o comando do menu de contexto da janela Navegador: usando as teclas de atalho predefinidas arrastando O indicador com o mouse para a janela principal ou para os outros indicadores sub-janela (arrastar e soltar). As cinco primeiras maneiras não diferem entre si fundamentalmente. Vamos chamá-los modos padrão de anexar indicador. Nesse caso, o indicador será desenhado no gráfico ou em uma sub-janela separada, como por padrão. O quinto método, o arrastar, é mais interessante. Alguns indicadores, quando arrastados para o gráfico, podem ser calculados a partir de valores de outro indicador já anexado ao gráfico. Existem sete indicadores especiais: Bollinger Bands Commodity Channel Índice Envelopes Momentum Moving Average Relative Strength Index Desvio padrão. Os indicadores incorporados podem ser combinados com outros indicadores ou calculados com base nos valores de outros indicadores. Ao combinar, o indicador a ser anexado é exibido apenas sobre o indicador já anexado, mas tem sua própria escala e bordas. Nesse caso, os valores do indicador a ser anexado são calculados a partir dos valores de preço do gráfico. Um indicador embutido que é exibido em uma subventa por padrão pode ser combinado com o indicador já anexado na sub-janela. Um indicador incorporado que é exibido na janela principal por padrão pode ser combinado com o indicador já anexado na janela principal. A maioria dos indicadores incorporados só pode ser anexada como no modo padrão. Esses sete indicadores especiais podem ser anexados tanto à janela principal como a uma sub-janela. Como anexar à janela principal Indicadores que são abertos em uma subwindow por padrão Os indicadores abaixo são abertos em uma subventa por padrão: Índice de canal de mercadoria Momentum Índice de força relativa Desvio padrão Vamos estudar as propriedades desses indicadores pelo exemplo de Commodity Channel Index. Como já foi mencionado acima, este indicador será aberto em uma janela separada por padrão: Para anexar CCI para a janela principal, é preciso arrastá-lo para o gráfico. As propriedades dos indicadores olharão como dadas abaixo: Na verdade, o gráfico é ao mesmo tempo o indicador. Portanto, se não houver outros indicadores disponíveis, os Dados dos Primeiros Indicadores e os Indicadores Anteriores - são dados do próprio gráfico eo método de desenho dos valores dos indicadores anteriores não difere de modo algum dos valores dos primeiros indicadores. Assim, para anexar o indicador na janela do gráfico, é preciso arrastá-lo e soltá-lo para o gráfico e selecionar Dados do primeiro indicador ou Dados do indicador anterior. O resultado obtido: Indicadores Momentum, Índice de Força Relativa e Desvio Padrão são anexados à janela do gráfico da mesma maneira. Como anexar a uma subwindow Indicadores que são abertos na janela principal por padrão Os indicadores deste grupo estão listados abaixo: Vamos considerar a média móvel como um exemplo. Por padrão, este indicador tem a seguinte aparência: Anexo do MA para uma sub-janela separada, é necessário fazer algumas ações mais do que para o exemplo anterior. Em primeiro lugar, uma janela separada deve ser criada. Para isso, vamos anexar ao gráfico qualquer indicador que possa ser aberto em uma sub-janela. Por exemplo, MACD. Agora, podemos arrastar a Média Móvel para a janela MACD e selecionar Dados de Indicadores Anteriores ou Primeiros Indicadores Dados na janela de propriedades (uma vez que há apenas um indicador na subventana, o MACD, será o primeiro eo último indicador) . Quando um número de indicadores é anexado a uma sub-janela, é sempre possível detectar, qual deles sobre o qual é construído. Seleção de Indicadores Anteriores Os dados são exibidos como - gt, aquele de Dados de Primeiro Indicador - como gt. Obtivemos MACD com média móvel sobreposto a ele. Podemos parar com isso, mas também podemos fazer isso para que apenas a média móvel permaneça na janela. Para fazer isso, é necessário remover MACD. Mas, se apenas removê-lo, a média móvel, como indicador construído sobre os valores MACD, será removido, também. Então, vamos desmarcar Moving Average do MACD primeiro. Vamos calcular em, por exemplo, Fechar valores. Agora, o MACD pode ser removido, a média móvel permanecerá na janela separada. Assim, combinando propriedades de diferentes indicadores, pode-se construir um sistema bastante complicado. Algumas Propriedades Comuns dos Indicadores Anexando Se o indicador a ser anexado for calculado em valores do indicador que tem várias linhas (mais de uma), ele será calculado em valores de linha zero ou a linha principal. No código, essa linha é detectada usando valores do primeiro parâmetro da função SetIndexStyle. Assim, por exemplo, se o indicador a ser anexado for calculado no MACD, os valores de histograma serão tomados como valores para cálculos, uma vez que é determinado no código MACD: SetIndexStyle (0, DRAWHISTOGRAM). Muitos indicadores têm, por padrão, fixo máximo e mínimo, por exemplo, RSI tem. Neste caso, depois de ter sido ligado a outro indicador, por exemplo, MACD, as suas bordas podem desalinhamento, ou seja, RSI apenas não irá coincidir com a janela MACD. Para corrigir isso, é necessário desmarcar os campos de máximo e mínimo, e as escalas de indicadores serão independentes umas nas outras. Quando um número de indicadores é anexado a uma sub-janela, é sempre possível detectar, qual deles sobre o qual é construído. Seleção de Indicadores Anteriores Os dados são exibidos como - gt, aquele de Dados de Primeiros Indicadores - como gt. No exemplo acima, os indicadores são construídos da seguinte maneira: MACD MAC ligado calculado sobre os Primeiros Dados de Indicadores, isto é, sobre valores do MACD Calculado RSI nos primeiros dados de indicadores, isto é, novamente sobre os valores do MACD combinado CCI com MACD calculado Momentum sobre os dados de indicadores anteriores, ou seja, sobre os valores do CCI. Os indicadores incorporados podem ser sobrepostos não apenas a outros indicadores incorporados, mas também a indicadores personalizados. Os princípios de ligação são os mesmos. Por exemplo: Como construir níveis Alguns indicadores permitem construir níveis. Para MA, pode-se construir um canal usando níveis. Para fazer isso, é necessário ir para a guia Níveis e definir alguns valores usando o botão Adicionar. Agora, se fizermos a linha de MA coloridos o mesmo que o fundo, vamos obter canal construído sobre a média móvel. Guia de Visualização No final, vamos considerar mais uma propriedade de indicadores no MetaTrader 4 Client Terminal. Todos os indicadores, tanto incorporados como personalizados, têm essa propriedade. Além disso, pode aplicar-se a objectos, também, isto é, a ferramentas analíticas gráficas e técnicas. Não há segredo de que os dados analisados ​​em prazos diferentes do mesmo símbolo podem ser diferentes. Diferentes ferramentas técnicas podem ser usadas, incluindo diferentes indicadores com configurações diferentes. O seguinte pode ser feito para não reajustar indicadores novamente e novamente ao alternar entre períodos de tempo: Especifique na janela de propriedades do indicador esse período de tempo, ao qual o indicador selecionado será ancorado. E assim por diante para todos os indicadores e em todos os prazos. No futuro, ao alternar entre eles, seremos capazes de ver diferentes indicadores em diferentes prazos. Permanece apenas para salvar o modelo a ser usado no futuro para outros símbolos. Exemplo. Nos prazos de H1 e M15, os mesmos indicadores, MACD e MA, são anexados, mas com períodos diferentes. Em H1: MACD com valores de 12, 26, 9 MA com o período de 7 é calculado no MACD MA com o período de 5 é calculado no MA (7). Em M15: MACD com valores de 24, 52, 18 MA com o período de 28 é calculado no MA MACD com o período de 20 é calculado no MA (28).Creação de Indicadores Personalizados Ao criar uma estratégia de negociação um desenvolvedor muitas vezes Enfrenta a necessidade de desenhar graficamente numa janela de segurança uma certa dependência calculada por um utilizador (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 tem seu próprio índice. O índice do primeiro buffer é 0, do segundo um - 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 indexar 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, o que está à 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 de indicadores 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 em um. Um índice do elemento de matriz correspondente à barra aberta às 6:00 obterá o valor 1 (antes que fosse 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 de 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. Using of the described technology for the calculation of custom indicators allows, first, to guarantee calculation of values of all indicator array elements irrespective of the specific nature of tick history, and second, to conduct calculations only for uncounted bars, i. e. use economically calculating resources. Not, a bar is considered uncounted if calculation of element values of an indicator arrays at least for one last tick of the bar is not performed. Starting the custom indicator userindicator. mq4 in a chart window you will see two lines - a thick blue line built upon bar maximums and a dotted red line built upon its minimums (Fig. 120). It should be noted, that one can built a custom indicator, indicator lines of which would coincide with the lines of an analogous technical indicator. It can be easily done if as calculation formulas in the custom indicator, the same formulas as in the technical indicator are used. To illustrate this lets improve the program code analyzed in the previous example. Let the indicator draw lines upon average values of maximums and minimums of several last bars. It is easy to conduct necessary calculations: we simply need to find average values of arrays-timeseries elements. For example, value of an indicator array with the index 3 (i. e. indicator line coordinate for the third bar) on the basis of the last five maximums is calculated the following way: Buf03 ( High3 High4 High5 High6 High7 ) / 5 Analogous calculations can be performed for an indicator lines built upon minimums. Example of a simple custom indicator averagevalue. mq4. Indicator lines are built upon average minimal and maximal values of N bars. In this example there is an external variable AverBars. Using this variable a user can indicate the number of bars, for which an average value is calculated. In start()this value is used for the calculation of an average value. In the loop for the sum of maximal and minimal values is calculated for the number of bars corresponding to the value of the variable AverBars. In the next two program lines values of indicator array elements are calculated for indicator lines corresponding to minimal and maximal values. The averaging method used here is also applied for calculations in the technical indicator Moving Average. If we attach the analyzed custom indicator averagevalue. mq4 and the technical indicator Moving Average, we will see three indicator lines. If the same period of averaging is set up for both indicators, Moving Average line will coincide with one of the custom indicator lines (for this purpose parameters described in Fig. 121 must be specified in the technical indicator settings). FIG. 121. Coincident lines of a technical indicator and a custom indicator (red line). Thus, using technical indicator a user can construct the reflection of any regularities necessary in practical work. Custom Indicator Options Drawing Indicator Lines in Separate Windows MQL4 offers a large service for constructing custom indicators which makes using them very convenient. In particular, indicator lines can be drawn in a separate window. This is convenient when absolute values of the indicator line amplitude is substantially smaller (or larger) than security prices. For example, if we are interested in the difference between average values of bar maximums and minimums in a certain historic interval, depending on timeframe this value will be equal to approximately from 0 to 50 points (for example, for M15). It is not difficult to build an indicator line, but in a security window this line will be drawn in the range 0 - 50 points of a security price, i. e. substantially lower than the chart area reflected on the screen. It is very inconvenient. To draw indicator lines in a separate window (which is in the lower part of a security window), in the directive property (at the program beginning) parameter indicatorseparatewindow must be specified: At the moment when such an indicator is attached to a security window, client terminal creates a separate window below a chart, in which indicator lines calculated in the indicator will be drawn. Depending on color settings and types of indicator lines they will be drawn in this or that style. Limiting Calculation History In most cases indicator lines contain useful information only in the most recent history. The part of indicator lines built upon old bars (for example, 1 month old minute timeframe) can hardly be considered useful for making trade decisions. Besides, if there are a lot of bars in a chart window, time invested into the calculation and drawing of indicator lines is unreasonably large. This may be critical in program debugging, when a program is often compiled and then started. That is why it is necessary to conduct calculations not for the whole history, but for the limited part of the most recent bar history. For this purpose an external variable history is used in the following program. Value of this variable is taken into account when calculating index of the first (leftmost) bar, starting from which elements of indicator arrays must be calculated. Further calculations in while() loop will be conducted for the number of recent history bars not larger than History value. Note, the analyzed method of limiting a calculation history concerns only the part of calculations that are conducted in the first start of the special function start(). Further, when new bars appear, new parts of indicator lines will be added in the right part, while the image in the left part will be preserved. Thus the indicator line length will be increased during the whole indicator operation time. Common value of History parameter is considered approximately 5000 bars. Example of a simple custom indicator separatewindow. mq4. Indicator lines are drawn in a separate window. Similar calculation of an indicator line is performed in the technical indicator AverageTrue Range. FIG. 122 shows an indicator line constructed by the custom indicator separatewindow. mq4 in a separate window and an indicator line constructed by ATR in another window. In this case lines are fully identical because period of averaging is the same for both indicators - 5. If this parameter is changed in any of the indicators, the corresponding indicator line will also change. FIG. 122. drawing a custom indicator line in a separate window. Identical lines of a technical indicator (ATR) and a custom indicator (separatewindow. mq4 ). It is also evident that custom indicator line is constructed not for the whole screen width, but for 50 latest bars as specified in the external variable History. If a trader needs to use larger history interval, value of the external variable can be easily changed via the custom indicator settings window. FIG. 123 shows a security window, in which the indicator line us drawn in another style - as a histogram. For getting such a result one line was changed in the program code separatewindow. mq4 - other line styles are indicated: All other code parts are unchanged. FIG. 123. Drawing custom indicator line in a separate window (histogram). Similarity of drawings of a technical indicator (ATR) and a custom indicator (separatewindow. mq4 ). Shifting Indicator Lines Vertically and Horizontally In some cases it is necessary to shift an indicator line. It can be easily done by MQL4 means. Lets analyze an example, in which position of indicator lines in a security window are calculated in accordance with values specified by a user. Example of a custom indicator displacement. mq4. Shifting indicator lines horizontally and vertically. For adjusting lines shift in a chart, there are two external variables - LeftRight for horizontal shift of all lines and UpDown for shifting two dotted lines vertically. The algorithm used for calculating values of corresponding array elements is based on very simple rules: for shifting a line horizontally, assign the calculated value to an array element, the index of which is larger by LeftRight (for shifting to the right and less for shifting to the right) than the index of a bar, for which calculations are conducted for shifting a line vertically, UpDownPoint must be added (for shifting upwards or detracted for shifting downwards) to each value of an indicator array characterizing initial line position In the analyzed example indexes are calculated in the line: Here i is the index of a bar, for which calculations are performed, k is an index of an indicator array element. Red indicator line displayed by the client terminal based on the indicator array Line0 is shifted to the left by 5 bars (according to custom settings, see Fig. 124) from the initial line. In this case the initial line is a Moving Average with the period of averaging equal to 5 the formula of MA calculation is (HighiLowi)/2 . In this example the position of the red line is the basis for the calculation of indicator array values for two other lines, i. e. their position on the chart. Dotted lines are calculated this way: Use of index k for elements of all indicator arrays allows to perform calculations for elements of arrays Line1, Line2 on the same bar as used for calculating values of the corresponding basic array Line0. As a result dotted lines are shifted relative to the red line by the value specified in the indicator settings window, in this case by 30 points (Fig. 124). FIG. 124. Red indicator line is shifted to the left by 5 bars. Dotted indicator lines are shifted relative to the red line by 30 points. Limitations of Custom Indicators There are some limitations in MQL4 that should be taken into account in the programming of custom indicators. There is a group of functions that can be used only in custom indicators and cannot be used in Expert Advisors and scripts: IndicatorBuffers(), IndicatorCounted (), IndicatorDigits(), IndicatorShortName(), SetIndexArrow(), SetIndexBuffer(), SetIndexDrawBegin(), SetIndexEmptyValue(), SetIndexLabel(), SetIndexShift(), SetIndexStyle(), SetLevelStyle(), SetLevelValue(). On the other hand, trade functions cannot be used in indicators: OrderSend(), OrderClose(), OrderCloseBy(), OrderDelete() and OrderModify(). This is because indicators operate in the interface flow (as distinct from Expert Advisors and scripts that operate in their own flow). This is also why algorithms based on looping cannot be used in custom indicators. Start of a custom indicator containing an endless loop (in terms of actual execution time) can result in client terminal hanging up with further necessity to restart a computer. The general comparative characteristics of Expert Advisors, scripts and indicators is contained in Table 2.Moving averages in its own indicator window Joined Apr 2006 Status: Member 29 Posts I was wondering if anyone knows a way to get 2 moving averages to be in their own seperate window and not over top the price on the charts. I know on most indicators you can go into metaeditor and change the first line to seperatewindow and it will work but I cant seem to do it with moving averages. Basically, I was just trying to get 2 seperate movings, one a pair of emas, the other a pair of wmas, in two seperate windows at the bottom of the chart. Just wondering if anyone has ever found anything that would let you do that. Any response will be appreciated. Thanks Joined Apr 2005 Status: Cruising The Outer Rim. 2,176 Posts Im pretty sure that if you go throught the tutorial here on FF about MQL that the very first excercise is to plot a moving average in its own window below the chart. I dont recall what the MA was but all you would have to do is change the formula. The statements for plotting indicators in their own windows is very straightforward. Im still learning myself. I was wondering if anyone knows a way to get 2 moving averages to be in their own seperate window and not over top the price on the charts. I know on most indicators you can go into metaeditor and change the first line to seperatewindow and it will work but I cant seem to do it with moving averages. Basically, I was just trying to get 2 seperate movings, one a pair of emas, the other a pair of wmas, in two seperate windows at the bottom of the chart. Just wondering if anyone has ever found anything that would let you do that. Any response will be appreciated. Thanks Want an easy way Open a RSI indicator. Under color, put quot none quot Drag the Moving Average onto the RSI window. Then choose whatever settings you want for your MA. Personally I keep the RSI. If the MAs are crossing at the RSI 50 level, it signals a trade for me. Good luck highway Joined Jan 2006 Status: Pips Ahoy 1,132 Posts Hi all, i was looking for a home for this seperate-window-indicator and instead of creating a new thread saw this one and think the below indicator that i hacked into yesterday to test some ideas out fits well in this thread. Long intro, but you know i get paid by the word here in FF. grin. OK i posted some of this over at the trading naked thread just as a silly, here is that post: Hehe. I was bored. Today i was thinking about ways to get the clutter off my candles and remembered an indicator that plotted price, in the form of a line-chart, against two moving averages. So i did some tweaking and took it a step further. here is the result (and you can download it if you wish from here ): Anywoo, What you see is a naked chart. then this pretty little indicator below. It is comprised of three moving averages that have quotTrendquot indicators attachted to their code, plus another four moving averages. all set against price (shown here as the thick black line). All moving averages can have Period, Type, PriceMode changed per user. All colors can be changed. And the three trends can be any Period. Type. Mode you choose. Once price goes above below the mini, there is a signal given, then once the Mini is above/below the Main, and signal is given, then lastly, once the Main is above/below the Major, another signal is given. This is all open code, so with a choice of any 7MAs, and 3 trends, this should be a happy addition to many models out there. As you can see this is an interesting way of showing simple price-action as it plays off various moving averages, which is a concept that i follow as taught by the James16group/PF. I hope this is a help to someone out there, i had fun tweaking an already fine indicator by a fellow trader over at forex-tsd forum.

No comments:

Post a Comment