- DRAW_NONE
- DRAW_LINE
- DRAW_SECTION
- DRAW_HISTOGRAM
- DRAW_HISTOGRAM2
- DRAW_ARROW
- DRAW_ZIGZAG
- DRAW_FILLING
- DRAW_BARS
- DRAW_CANDLES
- DRAW_COLOR_LINE
- DRAW_COLOR_SECTION
- DRAW_COLOR_HISTOGRAM
- DRAW_COLOR_HISTOGRAM2
- DRAW_COLOR_ARROW
- DRAW_COLOR_ZIGZAG
- DRAW_COLOR_BARS
- DRAW_COLOR_CANDLES
Estilos de Indicador em Exemplos
O MetaTrader 5 Terminal Cliente inclui 38 indicadores técnicos que podem ser usados em MQL5 programas usando funções apropriadas. Mas a principal vantagem da língua MQL5 é a capacidade de criar indicadores personalizados, os quais podem então serem utilizados em Expert Advisors ou simplesmente serem aplicados sobre gráficos de preços para fins de análise técnica.
O conjunto total dos indicadores podem serem derivados a partir de várias bases de estilos de desenhos, conhecidas como plotagem. Plotagem denota uma forma de visualização de dados, que o indicador calcula, armazena e providencia o pedido. Existem sete tipos básicos plotagem:
- Uma linha
- Uma seção (segmento)
- Histograma
- Seta (símbolo)
- Uma área pintada (canal preenchido)
- Bars
- Castiçal (candlesticks) japonês
Cada plotagem requer um para cinco arrays do tipo double, em que os valores dos indicadores são armazenados. Para efeitos de comodidade, estes arrays são associados com os buffers do indicador. O número de buffers em um indicador deve ser declarado com antecedência usando diretivas de compilador, por exemplo:
#property indicator_buffers 3 // Número de buffers
|
O número de buffers no indicador é sempre maior ou igual ao número de plotagem no indicador.
Como cada tipo de plotagem básica pode ter variação de cor ou detalhes de construção, o número real de tipos de plotagem em MQL5 é de 18:
Plotagem |
Descrição |
Buffers de valor |
Buffers de cor |
---|---|---|---|
Não é apresentado visualmente no gráfico, mas os valores do buffer correspondente podem ser vistos na Janela de Dados |
1 |
- |
|
Uma linha é plotada sobre os valores do buffer correspondente (valores vazios no buffer são indesejáveis) |
1 |
- |
|
É desenhado como segmentos de linha entre os valores do buffer correspondente (geralmente tem muitos valores vazios) |
1 |
- |
|
É desenhado como um histograma a partir da linha zero para os valores do buffer correspondente (pode ter valores vazios) |
1 |
- |
|
É desenhado como um histograma sobre dois buffers de indicador (pode ter valores vazios) |
2 |
- |
|
É desenhado como símbolos(pode ter valores vazios) |
1 |
- |
|
Similar ao estilo DRAW_SECTION, mas diferentemente, pode plotar segmentos verticais em uma barra |
2 |
- |
|
Preenchimento de cor entre duas linhas. 2 valores dos buffers correspondentes são mostrados na Janela de Dados |
2 |
- |
|
É desenhado como barras. 2 valores dos buffers correspondentes são mostrados na Janela de Dados |
4 |
- |
|
Desenhado como Castiçais Japoneses (candlesticks). 2 valores dos buffers correspondentes são mostrados na Janela de Dados |
4 |
- |
|
Uma linha para o qual você pode alternar as cores em diferentes barras ou mudar suas cores, a qualquer momento |
1 |
1 |
|
Similar ao estilo DRAW_SECTION, mas a cor de cada seção pode ser ajustada individualmente; cor também pode ser ajustada dinamicamente |
1 |
1 |
|
Similar ao estilo DRAW_HISTOGRAM, mas cada faixa pode ter uma cor diferente, você pode definir a cor dinamicamente |
1 |
1 |
|
Similar ao estilo DRAW_HISTOGRAM2, mas cada faixa pode ter uma cor diferente, você pode definir a cor dinamicamente |
2 |
1 |
|
Similar ao estilo DRAW_ARROW, mas cada símbolo pode ter sua cor. Cor pode ser mudada dinamicamente |
1 |
1 |
|
O estilo DRAW_ZIGZAG com opções de cores individuais das seções e mudança dinâmica das cores |
2 |
1 |
|
O estilo DRAW_BARS com opções de cores individuais das barras e mudança dinâmica das cores |
4 |
1 |
|
O estilo DRAW_CANDLES com opções de cores individuais dos castiçais (candlesticks) e mudança dinâmica das cores |
4 |
1 |
A diferença entre um buffer de indicador e um array
Cada indicador, no seu nível global, você deve declarar uma ou mais arrays do tipo double, o qual então deve ser usado como um buffer de indicador usando a função SetIndexBuffer(). Para desenhar plotagem de indicador, apenas os valores dos buffers do indicador são utilizados, quaisquer outros arrays não podem ser usados para esta finalidade. Além disso, os valores de buffer são exibidos na Janela de Dados.
Um buffer de indicador deve ser dinâmico e não requer especificação de tamanho o tamanho do array usado como buffer de indicador, é definido pelo subsistema do terminal com execução automática.
Após o array estar ligado ao buffer de indicador, a direção de indexação é definida por padrão num arrays comum, mas pode usar a função ArraySetAsSeries() para alterar o modo de acesso aos elementos array. Por padrão, o buffer de indicador é usado para armazenar dados usados para plotagem INDICATOR_DATA).
Se os cálculos dos valores de indicador requerem segurança de cálculos intermediários e armazenamento de valores adicionais para cada barra, então esse array pode ser declarado como um buffer de cálculo durante a ligação (INDICATOR_CALCULATIONS). Para valores intermediários, você também pode usar um array regular, mas neste caso, o programador tem que gerenciar o tamanho do array.
Algumas plotagens permitem definir uma cor para cada barra. Para armazenar a informação sobre cor, buffers de cores são usados (INDICATOR_COLOR_INDEX). A cor é um tipo integer color, mas todos os buffers de indicadores serão do tipo double. Valores de cor e buffers auxiliares (INDICATOR_CALCULATIONS) não podem ser obtidos usando CopyBuffer().
O número de buffers de indicadores devem ser especificados usando a diretiva de compilador #property indicator_buffers number_of_buffers:
#property indicator_buffers 3 // o indicador tem 3 buffers |
O número máximo permitido de buffers em um indicador é 512.
Relevância de Buffers de Indicadores e Plotagem
Cada plotagem é baseada em um ou mais buffers do indicador. Assim, para a exibição de castiçais (candlesticks) simples, quatro valores são obrigatórios - Open (abertura), High (alta), Low (baixa) e Close (fechamento) de preços. Conseqüentemente, para exibir um indicador na forma de castiçais (candlesticks), é necessário declarar 4 buffers de indicadores e 4 arrays do tipo double para eles. Por exemplo:
//--- O indicador tem quatro buffers de indicadores
|
Graficamente, plotagens automáticas usam buffers de indicadores de acordo com o número de plotagem. A numeração da plotagem começa com um, a numeração dos buffers começa com zero. Se a primeira plotagem requer 4 buffers do indicador, então os primeiros quatro buffers do indicador serão utilizados para desenhá-lo. Estes quatro buffers devem estar lincados com os arrays apropriados com a indexação correta usando a função SetIndexBuffer().
//--- Arrays vinculados com buffers de indicador
|
A plotagem dos castiçais (candlesticks), o indicador usará apenas o primeiro dos quatro buffers, porque a plotagem do "candlestick" foi anunciado sobre o primeiro número.
Alterar o exemplo, e adicionar plotagem de uma linha simples - DRAW_LINE. Agora, suponha que a linha é numerada como 1, e os castiçais (candlesticks) são o número 2. O número de buffers e o número plotagem aumentou.
//--- O indicador tem 5 buffers de indicador
|
A ordem das plotagem mudou, e agora a linha vem em primeiro lugar, seguido dos castiçais (candlesticks) Japoneses. Portanto, a ordem dos buffers é apropriado - primeiro anunciamos um buffer para a linha com o índice zero, e então quatro buffers para os castiçais (candlesticks).
SetIndexBuffer(0,LineBuffer,INDICATOR_DATA); // O primeiro buffer corresponde ao índice 0
|
O número de buffers e plotagens serão definidos usando somente diretivas de compilador, é impossível alterar essas propriedades dinamicamente usando funções.
Versões Coloridas de Estilos
Como são vistos na tabela, os estilos são divididos em dois grupos. O primeiro grupo inclui estilos cujo nome não existe a palavra COLOR, nós chamamos de estilos básicos:
- DRAW_LINE
- DRAW_SECTION
- DRAW_HISTOGRAM
- DRAW_HISTOGRAM2
- DRAW_ARROW
- DRAW_ZIGZAG
- DRAW_FILLING
- DRAW_BARS
- DRAW_CANDLES
No segundo grupo, os nomes de estilo contêm a palavra COLOR, vamos chamá-los de versões de cores:
- DRAW_COLOR_LINE
- DRAW_COLOR_SECTION
- DRAW_COLOR_HISTOGRAM
- DRAW_COLOR_HISTOGRAM2
- DRAW_COLOR_ARROW
- DRAW_COLOR_ZIGZAG
- DRAW_COLOR_BARS
- DRAW_COLOR_CANDLES
Todas as versões de cores de estilos diferentes a partir das básicas permitem especificar uma cor para cada parte da plotagem. A parte mínima de plotagem é uma barra, então podemos dizer que as versões de cores permitem definir a cor de cada bar.
As exceções são os estilos DRAW_NONE e DRAW_FILLING, eles não tem versões de cores.
Para definir a plotagem da cor em cada barra, um buffer adicional para armazenar o índice de cor foi adicionada à versão de cor. Estes índices indicam o número de uma cor numa array especial, a qual contém um conjunto predefinido de cores. O tamanho do array das cores é 64. Isto significa que cada versão de cor de um estilo de pintura permite uma plotagem de 64 cores diferentes.
O conjunto e o número de cores na array especial de cores será definido através de uma diretiva de compilação #property indicator_color, onde pode especificar todas as cores necessárias separadas por vírgulas. Por exemplo, como uma entrada de um indicador:
//--- Definir 8 cores para colorir os candlesticks (eles são armazenados na array especial)
|
Ele afirma que para plotar 1, 8 cores são definidas, que serão colocados em um array especial. Além disso o programa não especifica a cor da plotagem, mas apenas o seu índice. Se quisermos definir a cor vermelha para o número de barras K, o valor da cor do índice a partir de array deve ser definido no buffer de cor do indicador. A cor vermelha é especificada pela primeira vez na diretiva, que corresponde ao número de índice 0.
//--- definir a cor clrRed para candlestick
|
O conjunto de cores não é colocado de uma vez por todas, pode ser alterado de forma dinâmica usando PlotIndexSetInteger(). Exemplo:
//--- Definir a cor para cada índice com a propriedade PLOT_LINE_COLOR
|
Propriedades do indicador e plotagem
Para plotagem de indicadores, propriedades podem ser definidas por meio de diretivas de compilador e usando as funções apropriadas. Ler maiores informações sobre isto em Conexão entre Propriedades do Indicador e Funções. Mudança dinâmica de propriedades do indicador usando funções especiais permitem a criação de indicadores personalizados mais flexíveis.
Início do Desenho do Indicador no Gráfico
Em muitos casos, de acordo com as condições do algoritmo, é impossível iniciar o cálculo dos valores do indicador imediatamente com a barra atual, uma vez que é necessário proporcionar um número mínimo de barras anteriores disponíveis no histórico. Por exemplo, muitos tipos de alisamento implicam na utilização de um array de preços sobre N barras anteriores, e com base nestes valores, o valor do indicador na barra atual é calculado.
Nestes casos, não existe qualquer maneira para calcular os valores do indicador para as primeiras N barras, ou estes valores não se destinam a ser apresentados no gráfico e são apenas subsidiadas para calcular novos valores. Para evitar a plotagem do indicador nas primeiras N barras do histórico, defina o valor N para a propriedade PLOT_DRAW_BEGIN para a plotagem correspondente:
//--- Ligando arrays com buffers de indicador para os castiçais (candlesticks)
|
Onde:
- number_of_plot um valor a partir de zero para indicator_plots-1 (numeração dos lotes inicia com zero).
- N - o número da primeira barra no histórico, no qual o indicador não deve ser exibido sobre o gráfico.