Tuesday 13 June 2017

Mql4 Icustom Moving Average


Eu imagino que isso teria algo a ver com reescrever um indicador de MA personalizado que analise os valores médios do indicador que você deseja. Deveria ser apenas um caso de substituir os valores de preço no indicador MA atual por valores iStochastic, então você pode usar iCustom () para chamar o indicador personalizado. Eu acho que. Heres o código de média móvel simples do indicador de MA que vem com MT4, deve ser apenas um caso de substituição dos valores de Closepos com iStochastic (. Pos). Eu acho que o sma vazio () double sum0 int i, posBars-ExtCountedBars-1 --- - acumulação inicial se (posltMAPeriod) posMAPeriod para (i1iltMAPeriodi, pos--) sumClosepos ---- loop de cálculo principal enquanto (posgt0) sumClosepos ExtMapBufferpossumMAPeriod soma-CloseposMAPeriod-1 pos-- ---- zero barras iniciais se (ExtCountedBarslt1) para (I1iltMAPeriodi) ExtMapBufferBars-i0 Eu imagino que isso teria algo a ver com a reescrever um indicador de MA personalizado que analisa os valores médios do indicador desejado. Deveria ser apenas um caso de substituir os valores de preço no indicador MA atual por valores iStochastic, então você pode usar iCustom () para chamar o indicador personalizado. Eu acho que. Heres o código de média móvel simples do indicador de MA que vem com MT4, deve ser apenas um caso de substituição dos valores de Closepos com iStochastic (. Pos). Eu acho que o sma vazio () double sum0 int i, posBars-ExtCountedBars-1 --- - acumulação inicial se (posltMAPeriod) posMAPeriod para (i1iltMAPeriodi, pos--) sumClosepos ---- loop de cálculo principal enquanto (posgt0) sumClosepos ExtMapBufferpossumMAPeriod soma-CloseposMAPeriod-1 pos-- ---- zero barras iniciais se (ExtCountedBarslt1) para (I1iltMAPeriodi) ExtMapBufferBars-i0 Obrigado pela sua ajuda, mrwobbles, mas não me ajudou ainda. Imagine simplesmente que eu gostaria de calcular a média móvel de x períodos em volumes, você obteve o código para isso? Eu fiz uma MA simples do volume, se você olhar para o indicador de médias móveis que vem com MT4 você pode ver o que fiz . É bastante simples. O problema com o MA Estocástico é que os estocásticos retornam valores positivos e negativos, de modo que os somas não sejam precisos. Uso de Indicadores Técnicos De acordo com a pertença ao sistema de negociação on-line MetaTrader 4 existem dois tipos de indicadores em MQL4 - técnicos e personalizados. O indicador técnico é parte integrante do sistema de negociação on-line MetaTrader, função incorporada que permite desenhar na tela uma certa dependência. Propriedades dos Indicadores Técnicos Desenho na Janela de Segurança Cada indicador técnico calcula uma certa dependência predefinida. Para desenhar esta dependência graficamente na tela, um indicador técnico deve ser anexado a um gráfico. Isso pode ser feito através do menu do sistema Inserir indicadores de gtgt ou via janela Navegador de um terminal de cliente. Para anexar um indicador técnico a um gráfico da janela do Navegador, um método muito simples é usado - arraste-amp-drop do nome do indicador técnico da janela do Navegador para uma janela do gráfico. Como resultado, uma ou várias linhas calculadas neste indicador aparecerão na janela do gráfico. As linhas de indicadores de um indicador técnico podem ser desenhadas tanto na janela principal do gráfico como em uma janela separada na parte inferior de uma janela de segurança. Na Fig. 104 indicador técnico Alligator é desenhado em uma janela de gráfico. Código Unchangeability Todos os indicadores técnicos são incorporados, seu código não está disponível para fazer modificações. Portanto, um usuário é protegido de uma modificação errônea de indicadores técnicos incorporados. No entanto, o código-fonte, no qual um indicador técnico é calculado, está disponível no site do desenvolvedor de software (MetaQuotes Software Corp.) na seção Indicadores Técnicos. Se necessário, um programador pode usar o código completo ou parte dele para criar indicadores personalizados (consulte Criação de indicadores personalizados). Funções de chamada de indicadores técnicos A representação gráfica visível para um usuário é exibida por um terminal de cliente. Além disso, por conveniência, chamaremos essas linhas de indicadores de desenhos. Indicator Line é uma exibição gráfica de uma determinada dependência com base em valores numéricos incluídos em uma matriz de indicadores. O tipo de linha do indicador é configurado por um usuário. A linha do indicador pode ser exibida na forma de uma linha sólida ou tracejada, de uma cor especificada, bem como na forma de uma cadeia de certos sinais (pontos, quadrados, anéis, etc.). Durante os cálculos dos indicadores, os conjuntos de valores numéricos são calculados, e as linhas indicadoras serão desenhadas de acordo com esses cálculos. Esses conjuntos de valores são armazenados em matrizes de indicadores. Indicador Array é uma matriz unidimensional contendo valores numéricos, de acordo com quais linhas de indicadores são construídas. Os valores numéricos dos elementos da matriz do indicador são coordenadas de pontos, sobre os quais é desenhada uma linha de indicador. A coordenada Y de cada ponto é o valor de um elemento da matriz do indicador, a coordenada X é o valor do índice do elemento da matriz do indicador. A tecnologia de armazenamento de dados em matrizes de indicadores é a base para a construção de indicadores técnicos e personalizados. Os valores dos elementos da matriz de indicadores de indicadores técnicos estão disponíveis em todos os programas de aplicativos, incluindo consultores especializados, scripts e indicadores personalizados. Para obter um valor de um elemento de matriz de indicador com um determinado índice em um programa de aplicativo, é necessário chamar uma função incorporada, cujo nome é definido de acordo com um nome de indicador técnico. Para a execução de uma função de indicador técnico, o indicador correspondente não deve estar necessariamente ligado a uma janela de segurança. Também a chamada de função de indicador técnico de um programa de aplicativo não leva à conexão de um indicador correspondente a uma janela de segurança. A anexação de um indicador técnico a uma janela de segurança também não resulta em uma chamada de indicador técnico em um programa de aplicação. Uma série de indicadores técnicos está incluído no terminal do cliente do sistema de negociação on-line MetaTrader 4. Vamos analisar alguns deles. Média móvel, MA Indicador técnico Média móvel, MA mostra o valor médio do preço do instrumento por um determinado período de tempo. O indicador reflete a tendência geral do mercado - pode aumentar, diminuir ou mostrar algumas flutuações perto de algum preço. Para obter valores de linha de indicador MA em um determinado momento, use a função padrão: símbolo - símbolo nome de uma segurança, nos dados dos quais o indicador será calculado. NULL significa o símbolo atual. Período de tempo - período. Pode ser um dos períodos de gráfico. 0 significa o período do gráfico atual. Período - período de média para cálculos MA. Deslocamento - deslocamento do indicador em relação a um gráfico de preços. Mamethod - método de média. Pode ser um dos métodos MA métodos. Preço aplicado - preço usado. Pode ser qualquer uma das constantes de preços. Índice de valor de deslocamento adquirido a partir de uma matriz de indicadores (retroceder em relação a uma barra atual por um número especificado de barras). Abaixo está um exemplo de chamar uma função de indicador técnico do Expert Advisor callindicator. mq4: Na chamada de EA callindicator. mq4 iMA () é usada (função do indicador técnico de Média de Movimento). Vamos analisar esta parte do programa em detalhes: NULL denota que o cálculo de uma média móvel é feito para uma janela de segurança, à qual a EA está anexada (neste caso é EA, em geral, pode ser qualquer programa de aplicação) 0 - é Calculado para o período definido na janela de segurança, ao qual a EA está anexada PeriodMA - o valor do período de média é definido em uma variável externa se depois de anexar EA a uma janela de segurança, um usuário não altera esse valor nas configurações das variáveis ​​externas de EA , O valor é igual a 5 0 - a matriz de indicadores não é deslocada em relação a um gráfico, ou seja, os valores dos elementos de matriz de indicadores contêm valores de MA calculados para barras, nas quais a linha de indicador é desenhada MODESMA - método de uma média móvel simples é usado para Cálculos PRICECLOSE - preço de fechamento do bar é usado para os cálculos 0 - índice do elemento da matriz do indicador, para o qual o valor é adquirido - neste caso é elemento zero. Levando em consideração que a matriz de indicadores não é deslocada em relação ao gráfico, o valor MA é obtido para a barra de zero. A função iMA () retorna um valor atribuído à variável MA. Em outras linhas de programa, esse valor é comparado com o preço atual da Licitação. Se o preço atual for maior ou menor que o valor MA obtido, um alerta será exibido. O uso das variáveis ​​FactUp e FactDn permite mostrar o alerta somente após o primeiro cruzamento da linha MA (nota, a linha de indicador azul em uma janela de segurança é desenhada não porque a função de indicador técnico foi chamada do programa, mas porque um usuário se anexou O indicador para o gráfico, Fig. 104). Deve notar-se aqui que com a aparência de novos índices de barras de barras de histórico aumentam, a barra atualmente sendo formada sempre tem o índice 0. No indagador de especialistas callindicator. mq4, a função de indicador técnico iMA () retorna o valor calculado para a barra de zero. Embora o valor do índice nunca seja alterado durante a execução de EA (isto é, os cálculos são sempre realizados na barra atual), o valor retornado pelo iMA () corresponderá sempre ao último calculado, isto é, calculado para a barra de zero atual. Se, para alguns cálculos no programa, precisamos obter o valor de um valor de indicador técnico não para a barra atual, para um histórico, o índice de matriz de indicador necessário deve ser especificado na chamada de função. Permite ver um exemplo de EA historybars. mq4. Em que o MA é calculado na quarta barra: nos valores de EA historybars. mq4 são calculados para a barra atual (índice 0) e para a quarta barra (índice 4). Os índices indicados 0 e 4 não mudam durante esta operação do programa e o programa pode operar infinitamente longo a cada vez que calcula valores de MA para zero e quarta barras. Lembre-se, embora os cálculos sejam feitos para MA em barras com os mesmos índices, MA será alterado, ou seja, corresponderá aos valores MA atuais na barra zero atual e na quarta barra atual. Na Fig. 106 é claro que à medida que os preços crescem nas barras de las, MA aumenta. A diferença entre os valores de MA no zero e na quarta barra também cresce, o que é refletido nos alertas exibidos. Os indicadores técnicos podem refletir não apenas um, mas também duas ou mais linhas de indicadores. O indicador técnico Stochastic Oscillator compara o preço de fechamento atual com o intervalo de preços por um período de tempo selecionado. O indicador é geralmente representado por duas linhas de indicador. O principal é chamado K. A segunda linha de sinal D é a média móvel de K. Normalmente, K é desenhado como uma linha contínua, D - tracejada. De acordo com uma das variantes da explicação do indicador, devemos comprar se K é maior do que D e vender se K for inferior a D. O momento mais favorável para a execução de uma operação comercial é considerado o momento de concordância das linhas. Símbolo símbolo nome de uma segurança, nos dados dos quais o indicador será calculado. NULL significa o símbolo atual. Período de tempo - período. Pode ser um dos períodos de gráfico. 0 significa o período do gráfico atual. Kperiod - período (número de barras) para calcular K. Dperiod - período de média de D. desaceleração - valor da desaceleração. Método - método de média. Pode ser um dos métodos MA métodos. Pricefield - parâmetro de escolha de preços para cálculos. Pode ser um dos seguintes valores: 0 - LowHigh ou 1 - Close Close. Modo - índice de linhas de indicadores. Pode ser um dos seguintes valores: MODEMAIN ou MODESIGNAL. Shift - índice do valor obtido a partir de um buffer de indicador (mudar de volta em relação a uma barra atual por um número especificado de barras). O uso do Oscilador Estocástico oferece a necessidade de analisar as posições de linhas relativas. Para calcular qual a decisão comercial deve ser realizada, o valor de cada linha nas barras atual e anterior deve ser levado em consideração (ver Fig. 107). Quando as linhas cruzam no ponto A (a linha verde cruza o vermelho para cima), a ordem de venda deve ser fechada e a ordem de compra deve ser aberta. Durante a parte A - B (sem cruzamento de linhas, a linha verde é maior do que a linha vermelha) A ordem de compra deve ser aberta. No ponto B (linha verde cruza o vermelho para baixo) A compra deve ser fechada e a venda deve ser aberta. Em seguida, Sell deve permanecer aberto até o próximo cruzamento (sem cruzamento, linha verde abaixo da linha vermelha). FIG. 107. Concorrência das linhas principal e de sinal do Oscilador Estocástico. O próximo exemplo contém a implementação de um algoritmo simples que demonstra como os valores necessários de cada linha podem ser obtidos e os critérios comerciais podem ser formados. Para isso, os valores das funções de indicadores técnicos iStochastic () são usados ​​nas chamadas EA para astic. mq4: para obter o valor de linha K (verde sólido) na barra de zero, a seguinte linha de cálculo é usada: Aqui o parâmetro MODEMAIN indica a linha, o valor Do que é solicitado, o último parâmetro 0 é o índice da barra, para o qual o valor da linha deve ser calculado. Nas três linhas de programa a seguir, outras variáveis ​​são calculadas por analogia - para a linha D (linha tracejada vermelha, parâmetro MODESIGNAL) para o zero e a primeira barra. No próximo bloco, a correlação dos valores obtidos é analisada e a EA relata o estado atual em cada marca. Por exemplo, em linhas: o fato de uma linha vermelha ser cruzada pelo verde para cima é detectado. Se na barra anterior a linha verde estava abaixo do vermelho (ou seja, a expressão M1 lt S1 é verdadeira) e na barra atual a linha verde sobe acima da vermelha ou os seus valores são iguais (ou seja, a expressão M0 gt S0 é Verdadeiro), isso significa que, da formação anterior da barra para o momento atual, o solitário verde cruzou o vermelho para cima. Assim, a condição calculada em se o operador é verdade, é por isso que o controle é passado para o corpo do operador, como resultado Alert () é executado para mostrar a mensagem correspondente. Em um consultor especialista destinado a negociar se o corpo do operador, uma função de negociação para abrir uma ordem de compra deve ser indicada. Neste caso, a variante analisada do cruzamento de linhas de indicadores conduzirá à formação de uma ordem comercial e, finalmente, à execução de uma operação comercial. Para a variante quando a linha verde cruza o vermelho para baixo, em se for indicado um corpo para abrir uma ordem de Venda. FIG. 108 mostra o resultado das chamadas para a operação hmtica. mq4. O uso de funções de indicadores técnicos para a criação de consultores especializados e scripts é muito conveniente. A quantidade de funções de indicadores técnicos usadas em um consultor especialista é ilimitada. Um desenvolvedor de estratégia de negociação pode decidir definir diferentes critérios de negociação com base na combinação de valores de indicadores técnicos. Exemplo de um consultor de especialistas de negociação simples, cujos critérios de negociação são baseados em indicadores técnicos, são analisados ​​na seção Consultor de especialistas simples. Criação de indicadores personalizados Ao criar uma estratégia de negociação, um desenvolvedor geralmente enfrenta a necessidade de desenhar graficamente em uma janela de segurança. Determinada dependência calculada por um usuário (programador). Para o efeito, o MQL4 oferece a possibilidade de criar indicadores personalizados. O Indicador personalizado é um programa de aplicativo codificado no MQL4, que é basicamente destinado a exibição gráfica de dependências calculadas preliminarmente. Necessidade da estrutura do indicador personalizado dos buffers O principal princípio subjacente aos indicadores personalizados é passar os valores das matrizes de indicadores para um terminal de cliente (para linhas de indicadores de desenho) através de buffers de troca. O buffer é uma área de memória contendo valores numéricos de uma matriz de indicadores. O padrão MQL4 implica a possibilidade de elaborar até oito linhas de indicadores usando um indicador personalizado. Uma matriz de indicadores e um buffer são trazidos para 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 possui o índice 7. Fig. 115 mostra como as informações de um indicador personalizado são passadas através de buffers para um terminal de cliente para desenhar linhas de indicadores. FIG. 115. Passando valores das matrizes de indicadores através de um buffer para um terminal de cliente. A ordem geral das linhas de indicadores de construção é a seguinte: 1. Os cálculos são realizados em um indicador personalizado, pois os valores numéricos são atribuídos aos elementos da matriz de indicadores. 2. Os valores dos elementos da matriz do indicador são enviados para um terminal do cliente por meio de buffers. 3. Nas bases de matrizes de valores recebidas de buffers, um terminal de cliente exibe linhas de indicadores. Componentes de um indicador personalizado Permite analisar um indicador personalizado simples que mostra duas linhas - uma linha é construída com base nos preços máximos da barra, a segunda usa preços mínimos. Exemplo de um indicador personalizado simples userindicator. mq4 Vamos analisar em detalhes as peças do indicador. Em qualquer programa de aplicação escrito no MQL4, você pode indicar parâmetros de configuração que fornecem a manutenção correta do programa por um terminal de cliente. Neste exemplo, a parte do programa principal (veja Estrutura do programa) contém várias linhas com propriedade de diretrizes. A primeira diretiva indica em qual janela o terminal do cliente deve desenhar as linhas de indicadores: no MQL4 existem duas variantes de linhas de indicadores de desenho: 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 de cliente deve desenhar linhas de indicador na janela principal. A próxima linha mostra o número de buffers usados ​​no indicador: no exemplo analisado são desenhadas duas linhas de indicadores. Um buffer é atribuído a cada buffer, de modo que o número total de buffers é dois. As próximas linhas descrevem as cores das linhas indicadoras. Os parâmetros indicatorcolor1 e indicatorcolor2 definem a configuração de cor para buffers correspondentes - neste caso para buffers com índices 0 (Azul) e 1 (Vermelho). Observe que as figuras em nomes de parâmetro indicatorcolor1 e indicatorcolor2 não são índices de buffer. Essas figuras são partes de nomes constantes que são configurados de acordo com os buffers. Para cada cor constante pode ser configurada a critério de um usuário. Na próxima linha, os arrays de indicadores são declarados: o indicador destina-se a desenhar duas linhas de indicadores, por isso precisamos declarar dois arrays globais de uma dimensão, um para cada linha. Os nomes das matrizes de indicadores são até usuários. Neste caso, os nomes das matrizes Buf0 e Buf1 são usados, em outros casos, outros nomes podem ser usados, por exemplo, Line1, Alfa, Integral etc. É necessário declarar arrays em um nível global, porque os valores dos elementos da matriz devem ser preservados entre as chamadas Do início da função especial (). O indicador 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 usado no programa apenas uma vez (consulte 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 uma matriz (neste caso Buf0). Significa para a construção da primeira linha de indicação, um terminal cliente aceitará os dados contidos na matriz Buf0 usando o buffer zero para isso. Além disso, o estilo de linha é definido: Para o buffer de zero (0), um terminal de cliente deve usar os seguintes estilos de desenho: linha simples (DRAWLINE), linha contínua (STYLESOLID), largura da linha 2. As próximas duas linhas contêm configurações para a segunda linha : Assim, de acordo com o código da função especial init () ambas as linhas do indicador serão desenhadas na janela de segurança principal. O primeiro será uma linha azul sólida com a largura 2, a segunda é uma linha pontilhada vermelha (STYLEDOT) de uma largura usual. As linhas de indicadores podem ser desenhadas por outros estilos também (veja Estilos de linhas de indicadores). Cálculo de valores dos elementos de matrizes de indicadores (Seja atento) Os valores dos arrays dos indicadores são calculados no início da função especial (). 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 da barra começa a partir de zero. A barra zero é uma barra atual ainda não formada. O índice de barras 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 das barras já formadas (histórico) são alterados. A barra nova (atual, apenas formada, mais à direita) obtém o índice zero, o que está à esquerda dele (que acabou de se formar completamente) obtém o índice 1 e os valores dos índices de todas as barras de histórico 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 consideração ao desenhar linhas usando indicadores técnicos e personalizados. Foi dito anteriormente que as linhas de indicadores são construídas com base em informações numéricas contidas nas matrizes de indicadores. Uma matriz de indicadores contém informações sobre coordenadas de pontos em que uma linha de indicadores é desenhada. E a coordenada Y de cada ponto é o valor de um elemento de matriz de indicadores. E a coordenada X é o valor de um índice de elemento de matriz de indicadores. No exemplo analisado, a primeira linha do indicador é desenhada usando valores máximos de barras. Fig. 116 mostra esta linha de indicador (de cor azul) em uma janela de segurança, é construída com base na matriz de indicadores Buf0. FIG. 116. Correspondência de coordenadas de uma linha de indicadores para valores de uma matriz de indicadores. O valor do índice de uma matriz de indicadores está fora por um terminal de cliente em correspondência com um índice de barras - esses valores de índice são iguais. Também deve ser levado em consideração que o processo de construção de linhas de indicadores continua no modo em 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órico são deslocadas para a esquerda. Para que a linha indicadora seja desenhada corretamente (cada ponto de linha acima da barra), ela também deve ser deslocada junto com barras. Portanto, há necessidade (necessidade técnica) para re-indexar uma matriz 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 de matriz de indicadores é aumentado por Um e o tamanho da matriz do indicador são aumentados por um elemento (com um índice zero). Por exemplo, a barra zero na Fig. 116 (horário H1) tem o horário de funcionamento 6:00. Às 7:00, um novo bar aparecerá na janela de segurança. O bar aberto às 6:00 irá obter automaticamente o índice 1. Para que a linha indicada seja desenhada 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, o terminal do cliente aumentará por um. Um índice do elemento de matriz correspondente à barra aberta às 6:00 receberá o valor 1 (antes que fosse igual a 0). A matriz do indicador se tornará maior por um elemento. O índice de um novo elemento adicionado será igual a 0, o valor desse elemento será um novo valor que reflete a coordenada da linha do indicador em uma barra zero. Esse valor é calculado no início da função especial () em cada marca. Os cálculos no início da função especial () devem ser realizados de modo que nenhuma ação extra seja realizada. Antes que o indicador seja anexado a um gráfico, ele não reflete nenhuma linha de indicador (porque os valores das matrizes de indicadores ainda não estão definidos). É por isso que, no primeiro início da função especial, os valores da matriz de indicadores de início () devem ser calculados para todas as barras, nas quais a linha indicadora 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, durante a última parte do histórico, é descrito em outros exemplos). Ar todos os outros começos do início da função especial () não há necessidade de calcular os valores da matriz de indicadores para todas as barras novamente. Esses valores já estão calculados e estão contidos na matriz de indicadores. É necessário calcular o valor atual da linha indicadora somente em cada novo tico da barra zero. Para a implementação da tecnologia descrita, existe uma função padrão muito útil em MQL4 - IndicatorCounted (). Function IndicatorCounted () Esta função retorna o número de barras que não foram alteradas desde o último indicador de chamada. Se o indicador nunca foi anexado a um gráfico, na primeira execução 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 que toda a matriz de indicadores Deve ser calculado do começo ao fim. A matriz de indicadores é calculada da barra mais antiga para zero. O índice da barra mais antiga, a partir do qual os cálculos devem ser iniciados, é calculado da seguinte maneira: Suponha que, no momento da conexão do indicador, existam 300 barras na janela do gráfico. Este é o valor das barras de variáveis ​​predefinidas. Conforme definido anteriormente, o Countedbars é igual a 0. Assim, como resultado, obtemos o índice i da primeira barra não contabilizada (o último, a partir do qual os cálculos devem ser conduzidos) é igual a 299. Todos os valores dos elementos da matriz do indicador são Calculado no loop enquanto (): enquanto eu está dentro do intervalo desde a primeira barra não contada (299) até a corrente (0) inclusive, os valores dos elementos da matriz do indicador são calculados para ambas as linhas do indicador. Nota: os valores em falta dos elementos da matriz de indicadores são calculados durante um (o primeiro) início do início da função especial (). Durante os cálculos, o terminal do cliente lembra elementos, para os quais os valores foram calculados. A última iteração em while () é executada quando i é igual a 0, isto é, os valores das matrizes de indicadores são calculados para a barra de zero. Quando o loop acabou, a função especial start () termina sua execução e o controle é passado para o terminal do cliente. O terminal do cliente, por sua vez, desenhará todas as linhas de indicadores (neste caso, duas) de acordo com os valores calculados dos elementos da matriz. No próximo início do tiquetaque () será iniciado novamente pelo terminal do cliente. Outras ações dependerão da situação (continuaremos analisando o exemplo por 300 bar). Variante 1. Um novo tiquetaque vem durante a formação da barra de zero atual (a situação mais comum). FIG. 117 mostra dois carrapatos recebidos pelo terminal nos momentos do tempo t 1 e t 2. A situação analisada será a mesma para ambos os carrapatos. Permite traçar a execução do início () que foi lançado no momento t 2. Durante a execução do início da função (), a seguinte linha será executada: IndicatorCounted () retornará o valor 299, ou seja, desde a última chamada de início () 299 barras anteriores não foram alteradas. Como resultado, o valor do índice i será igual a 0 (300-299-1): significa que no próximo ciclo while () os valores dos elementos da matriz com o índice zero serão calculados. Em outras palavras, a nova posição de uma linha de indicadores na barra zero será calculada. Quando o ciclo estiver concluído, start () parará de executar e passará o controle para o terminal do cliente. Variante 2. Um novo tic é o primeiro tiquete de uma barra zero (acontece de vez em quando). Neste caso, o fato da aparência de uma nova barra é importante. Antes que o controle seja passado para o início da função especial (), o terminal do cliente irá desenhar novamente todas as barras presentes na janela de segurança e re-indexar todos os arrays de indicadores declarados (configurado em correspondência com buffers). Além disso, o terminal do cliente lembrará que já existem 301 barras, e não 300 na janela do gráfico. FIG. 118 contém situação quando no último tic da barra anterior (no momento t 2) a função start () foi iniciada e executada com sucesso. É por isso que, no entanto, agora a primeira barra (com índice 1) terminou no momento em que t 2 foi calculado pelo indicador, a função IndicatorCounted () retornará o valor que estava na barra anterior. Ou seja, 299: no próximo índice de linha, será calculado, neste caso, para o primeiro tiquete de uma nova barra, será igual a 1 (301-299-1): significa cálculo de valores de matriz de indicadores no loop while () Na aparência de uma nova barra serão executados tanto para a última barra quanto para a nova barra de zero. Um pouco mais cedo durante a re-indexação das matrizes de indicadores, o terminal do cliente aumentou os tamanhos desses arrays. 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 no início () acabaram, o controle é retornado ao terminal do cliente. Depois disso, o terminal do cliente irá desenhar linhas de indicadores na barra zero, com base apenas em valores calculados de elementos de matriz com zero índices. Variante 3. Um novo tiquetaque é o primeiro tiqueteque de uma nova barra zero, mas o último mas um tiquetaque não é processado (caso raro). FIG. 119 mostra a situação quando o início () foi iniciado no primeiro tiqueteque de uma nova barra no momento t 5. Tempo anterior em que esta função foi iniciada no momento t 2. Marque o que chegou ao terminal no momento t 3 (seta vermelha ) Não foi processado pelo indicador. Isso aconteceu porque o tempo de execução de início () t 2 - t 4 é maior do que o intervalo entre tiques t 2 - t 3. Esse fato será detectado pelo terminal do cliente durante a execução do início () iniciado no momento t 5. Durante Cálculos na linha: IndicatorCounted () retornará o valor 299 (). Este valor é verdadeiro - a partir do momento da última ligação do indicador, 299 barras não foram alteradas após (agora já) 301. É por isso que o índice calculado da primeira barra (mais à esquerda), a partir da qual os cálculos dos valores dos elementos da matriz devem ser iniciados, Será igual a 1 (301-299-1): significa durante a execução while () duas iterações serão realizadas. Durante os primeiros valores de elementos de matriz com o índice i 1 serão calculados, isto é Buf01 e Buf11. Não, no momento em que os cálculos começam, as barras e matrizes de indicadores já foram re-indexadas pelo terminal do cliente (porque uma nova barra começou, entre as iniciações do início da função especial (). É por isso que os cálculos para elementos de arrays com índice 1 serão calculados com base em matrizes temporárias (valores máximos e mínimos de um preço de barra) também com o índice 1: durante a segunda iteração dos valores while () para elementos com zero Os índices, ou seja, para a barra zero, são calculados com base nos últimos valores conhecidos dos arrays-timeseries. O uso da tecnologia descrita para o cálculo de indicadores personalizados permite, em primeiro lugar, garantir o cálculo de valores de todos os elementos da matriz de indicadores, independentemente da natureza específica do histórico de tiques e, em segundo lugar, realizar cálculos apenas para barras não incluídas, ou seja, usar recursos economicamente calculados . Não, uma barra é considerada não contabilizada se o cálculo dos valores dos elementos de um arrays de indicadores, pelo menos, para um último tic da barra não for realizado. Iniciando o indicador personalizado userindicator. mq4 em uma janela de gráfico, você verá duas linhas - uma linha azul grossa construída com os máximos da barra e uma linha vermelha pontilhada baseada em seus mínimos (Fig. 120). Note-se que pode-se construir um indicador personalizado, cujas linhas indicadoras coincidirem com as linhas de um indicador técnico análogo. Pode ser feito facilmente se, como fórmulas de cálculo no indicador personalizado, forem utilizadas as mesmas fórmulas do indicador técnico. Para ilustrar isso, podemos melhorar o código do programa analisado no exemplo anterior. Deixe o indicador desenhar linhas em 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, a coordenada da linha indicadora 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 realizados Para uma linha de indicadores baseada em mínimos. Exemplo de um indicador personalizado simples averagevalue. mq4. As linhas de indicadores são construídas com valores médios mínimos e máximos de barras N. Neste exemplo, existe uma variável externa AverBars. Usando esta variável, um usuário pode indicar o número de barras, para o qual um valor médio é calculado. No início () este valor é usado para o cálculo de um valor médio. No ciclo, a soma de valores máximos e mínimos é calculada para o número de barras correspondente ao valor da variável AverBars. Nas próximas duas linhas de programa, 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 utilizado aqui também é aplicado para cálculos no indicador técnico de média móvel. Se nós anexarmos o indicador personalizado personalizado analógico medido. mq4 e o indicador técnico de Média Mover, 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 este propósito, os parâmetros descritos na figura 121 devem ser especificados nas configurações técnicas do indicador). 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 o reflexo de quaisquer regularidades necessárias no trabalho prático. Opções de Indicador Personalizado Linhas de Indicadores de Desenho em Windows Separado O MQL4 oferece um grande serviço para a construção de indicadores personalizados que os torna muito convenientes. Em particular, as linhas de indicadores podem ser desenhadas em uma janela separada. Isso é conveniente quando os valores absolutos da amplitude da linha indicadora são substancialmente menores (ou maiores) do que os preços de segurança. Por exemplo, se estamos interessados ​​na diferença entre valores médios de máximos de barras e mínimos em um determinado intervalo histórico, dependendo do prazo, esse valor será igual a aproximadamente 0 a 50 pontos (por exemplo, para M15). Não é difícil construir uma linha de indicador, mas em uma janela de segurança, essa linha será desenhada no intervalo de 0 a 50 pontos de um preço de segurança, ou seja, substancialmente menor do que a área do gráfico refletida na tela. É muito inconveniente. Para desenhar linhas de indicador em uma janela separada (que está na parte inferior de uma janela de segurança), na propriedade da diretiva (no início do programa), o indicador de parâmetro, uma janela separada deve ser especificado: no momento em que esse indicador é anexado a uma janela de segurança , O terminal do cliente cria uma janela separada abaixo de um gráfico, no qual as linhas de indicador calculadas no indicador serão desenhadas. Dependendo das configurações de cor e dos tipos de linhas de indicadores, eles serão desenhados nesse ou nesse estilo. Limitando o Histórico de Cálculo Na maioria dos casos, as linhas de indicadores contêm informações úteis apenas no histórico mais recente. A parte das linhas de indicadores construídas sobre barras antigas (por exemplo, período de tempo minimo de 1 mês) dificilmente pode ser considerada útil para tomar decisões comerciais. Além disso, se houver muitos bares 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 é muitas vezes compilado e então iniciado. É por isso que é necessário realizar cálculos não para todo o histórico, mas para a parte limitada do histórico de barras mais recente. Para este propósito, um histórico de variáveis ​​externo é usado no seguinte programa. O valor dessa variável é levado em consideração ao calcular o índice da primeira barra (mais à esquerda), a partir da qual os elementos das matrizes de indicadores devem ser calculados. Mais cálculos no loop while () serão conduzidos para o número de barras de histórico recentes não maiores do que o valor History. Note-se que o método analisado de limitar um histórico de cálculo diz respeito apenas à parte dos cálculos que é realizada no primeiro início do início da função especial (). Além disso, quando novas barras aparecem, novas partes das linhas indicadoras serão adicionadas na parte direita, enquanto a imagem na parte esquerda será preservada. Assim, o comprimento da linha indicadora será aumentado durante todo o tempo de operação do indicador. O valor comum do parâmetro History é considerado aproximadamente 5000 bar. Exemplo de um indicador personalizado simples separewindow. mq4. As linhas de indicadores são desenhadas em uma janela separada. O cálculo semelhante de uma linha de indicador é realizado no intervalo de faixa de média Average Range. FIG. 122 mostra uma linha de indicador construída pelo indicador personalizado, separar a janela. mq4 em uma janela separada e uma linha de indicadores construída por ATR em outra 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 esse parâmetro for alterado em qualquer um dos indicadores, a linha indicadora correspondente também mudará. FIG. 122. desenhando uma linha de indicador personalizada 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 indicadora personalizada é construída não para toda a largura da tela, mas para as 50 barras mais recentes conforme especificado na variável externa Histórico. 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 de indicadores personalizados. FIG. 123 mostra uma janela de segurança, na qual o indicador nos liga em outro estilo - como um histograma. Para obter esse resultado, uma linha foi alterada no código do programa separadamente. mq4 - outros estilos de linha são indicados: todas as outras partes do código são inalteradas. FIG. 123. Desenho de linha de indicador personalizado em uma janela separada (histograma). Similaridade de desenhos de um indicador técnico (ATR) e um indicador personalizado (separatewindow. mq4). Mudando linhas de indicadores verticalmente e horizontalmente Em alguns casos, é necessário mudar uma linha de indicador. Pode ser feito facilmente por meios MQL4. Vamos analisar um exemplo, em que a posição das linhas de indicador em uma janela de segurança é calculada de acordo com os valores especificados por um usuário. Exemplo de um deslocamento de indicador personalizado. mq4. Mudando as linhas indicadoras horizontal e verticalmente. Para ajustar o deslocamento de linhas em um gráfico, existem duas variáveis ​​externas - LeftRight para deslocamento horizontal de todas as linhas e UpDown para mudar duas linhas pontilhadas verticalmente. O algoritmo usado para calcular valores de elementos de matriz correspondentes é baseado em regras muito simples: para deslocar uma linha horizontalmente, atribua o valor calculado a um elemento de matriz, cujo índice é maior por LeftRight (para deslocamento para a direita e menos para deslocamento À direita) do que o índice de uma barra, para o qual os cálculos são conduzidos para mudar uma linha verticalmente, UpDownPoint deve ser adicionado (para deslocar para cima ou para fora para deslocar para baixo) para cada valor de uma matriz de indicadores que caracteriza a posição inicial da linha. Os índices de exemplo são calculados na linha: Aqui é o índice de uma barra, para o 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 do indicador Line0 é deslocada para a esquerda em 5 barras (de acordo com as configurações personalizadas, veja a figura 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, ou seja, sua posição no gráfico. As linhas pontilhadas são calculadas dessa maneira: o uso do índice k para elementos de todas as matrizes de indicadores permite realizar cálculos para os elementos das matrizes Line1, Line2 na mesma barra usada para calcular os valores da matriz básica correspondente Line0. Como resultado, as linhas pontilhadas são deslocadas em relação à linha vermelha pelo valor especificado na janela de configurações do indicador, neste caso por 30 pontos (Fig. 124). FIG. 124. A linha indicadora vermelha é deslocada para a esquerda em 5 barras. As linhas indicadoras pontilhadas são deslocadas em relação à linha vermelha por 30 pontos. Limitações dos indicadores personalizados Existem algumas limitações no MQL4 que devem ser consideradas na programação de indicadores personalizados. Existe um grupo de funções que podem ser usadas apenas em indicadores personalizados e não podem ser usados ​​em Expert Advisors e scripts: IndicatorBuffers (), IndicatorCounted (), IndicatorDigits (), IndicatorShortName (), SetIndexArrow (), SetIndexBuffer (), SetIndexDrawBegin ( ), SetIndexEmptyValue (), SetIndexLabel (), SetIndexShift (), SetIndexStyle (), SetLevelStyle (), SetLevelValue (). Por outro lado, as funções de comércio não podem ser usadas em indicadores: OrderSend (), OrderClose (), OrderCloseBy (), OrderDelete () e OrderModify (). Isso ocorre porque os indicadores operam no fluxo da interface (diferente dos Expert Advisors e scripts que operam em seu próprio fluxo). É também por isso que os algoritmos baseados em looping não podem ser usados ​​em indicadores personalizados. O início de um indicador personalizado que contém um ciclo infinito (em termos de tempo de execução real) pode resultar no encerramento do cliente com necessidade adicional de reiniciar um computador. As características comparativas gerais de Expert Advisors, scripts e indicadores estão contidas na Tabela 2.

No comments:

Post a Comment