- Estilos de Indicador em Exemplos
- Conexão entre Propriedades do Indicador e Funções
- SetIndexBuffer
- IndicatorSetDouble
- IndicatorSetInteger
- IndicatorSetString
- PlotIndexSetDouble
- PlotIndexSetInteger
- PlotIndexSetString
- PlotIndexGetInteger
Indicadores Customizados
Este é o grupo de funções utilizadas na criação dos indicadores personalizados. Estas funções não podem ser usadas para escrever Expert Advisors e Scripts.
Função |
Ação |
---|---|
Vincula-se o buffer de indicador especificado com dinâmica unidimensional array do tipo double |
|
Define o valor da propriedade de um indicador do tipo double |
|
Define o valor da propriedade de um indicador do tipo int |
|
Define o valor da propriedade de um indicador do tipo string |
|
Define o valor da propriedade de linha de um indicador do tipo double |
|
Define o valor da propriedade de linha de um indicador do tipo int |
|
Define o valor da propriedade de linha de um indicador do tipo string |
|
Retorna o valor da propriedade de linha de um indicador do tipo inteiro |
Propriedades de indicador podem ser definidas utilizando as diretivas de compilador ou o uso de funções. Para entender melhor isso, é recomendável que você estude estilos de indicador como exemplos.
Todos os cálculos necessários de um indicador personalizado devem ser colocados na função predeterminada OnCalculate(). Se você usar uma forma abreviada da função chamada OnCalculate(), como
int OnCalculate (const int rates_total, const int prev_calculated, const int begin, const double& price[]) |
então a variável rates_total contém o valor do número total de elementos da ordem de price[], passados como um parâmetro de entrada para calcular os valores do indicador.
Parâmetro prev_calculated é o resultado da execução de OnCalculate() na chamada anterior, que permite organizar um algoritmo salvo para calcular os valores do indicador. Por exemplo, se o valor corrente de rates_total = 1000, prev_calculated = 999, então talvez seja bastante para fazer os cálculos apenas para um valor de cada buffer indicador.
Se a informação sobre o tamanho da entrada da ordem de preço fosse disponibilizado, então isso levaria à necessidade de fazer cálculos para 1000 valores de cada buffer de indicador. Na primeira chamada do OnCalculate(), o valor prev_calculated = 0. Se a ordem de price[] foi alterado de alguma forma, então neste caso prev_calculated também é igual a 0 (zero).
O parâmetro begin mostra o número de valores iniciais da ordem de preço, que não contêm dados para o cálculo. Por exemplo, se o valor de Accelerator Oscillator (para os quais os primeiros 37 valores não são calculados) foram utilizados como um parâmetro de entrada, então begin = 37. Por exemplo, vamos considerar um simples indicador:
#property indicator_chart_window
|
Arrastá-lo a partir da janela do "Navegador" para a janela do indicador Accelerator Oscillator e nós indicamos que os cálculos devem ser feitos com base nos valores do indicador anterior:
Como um resultado, a primeira chamada do valor OnCalculate() de prev_calculated será igual a zero, e em outras chamadas será igual ao valor rates_total (até que o número de barras no gráfico de preço aumenta).
O valor do parâmetro begin será exatamente igual ao número das barras iniciais, para os quais os valores do indicador Accelerator não são calculados de acordo com a lógica do indicador. Se nós olharmos para o código fonte do indicador personalizado Accelerator.mq5, nós veremos as linha seguintes na função OnInit():
//--- define a primeira barra a partir do qual o índice será desenhado
|
Usando a função PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, empty_first_values), nós definimos o número não-existente dos primeiros valores no array zero de um indicador personalizado, o qual não precisamos aceitar para o cálculo (empty_first_values). Assim, temos mecanismos para:
- definir o número de valores iniciais de um indicador, o qual não deverá ser usado para os cálculos de outro indicador personalizado;
- obter informações sobre o número dos primeiros valores a serem ignorados quando você chamar um outro indicador personalizado , sem entrar na lógica de seus cálculos.