Discussão do artigo "Criando indicadores multicoloridos no MQL5"

 

Novo artigo Criando indicadores multicoloridos no MQL5 foi publicado:

Neste artigo, consideraremos como criar indicadores multicoloridos ou converter os existentes para multicor. O MQL5 permite representar as informações de forma conveniente. Agora, não é necessário ver uma dúzia de gráficos com indicadores e realizar análises dos níveis RSI ou estocásticos, é melhor apenas pintar as velas com cores diferentes dependendo dos valores dos indicadores.

Cor RSI

Autor: Дмитрий Александрович

 
Muito bem detalhado, muito obrigado. Achei muito útil.
 
Entendo que, no mql4, o gradiente nas velas não pode ser representado?
 

omg, obrigado por essa linha:

A ordem dos buffers deve ser especial: primeiro, os buffers de dados do indicador, depois os buffers de índice de cores.

Achei que estava ficando um pouco louco ao tentar desenhar gráficos de duas cores (ordenei os buffers e funcionou sem problemas!).

Obrigado!

 
Muito bom , estou enfrentando uma dificuldade imensa em criar uma regra de coloração com Estocástico. Teria algum exemplo ?
 
Os comentários que não estão relacionados a este tópico foram movidos para "Posts fora do tópico".
 

Boa tarde!

Encontrei um problema ao usar váriosestilos de desenho ao mesmo tempo . Por exemplo, é necessário desenhar um canal pintado como bolingjder e, no meio dele, há uma linha central. Aqui está um exemplo:

SetIndexBuffer(0, Buf1, INDICATOR_DATA);
SetIndexBuffer(1, Buf2, INDICATOR_DATA);

SetIndexBuffer(2, Buf3, INDICATOR_DATA);

PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_FILLING);

PlotIndexSetInteger(2, PLOT_DRAW_TYPE, DRAW_LINE);

Com essa construção, somente o canal pintado é exibido. Se você alterar a ordem - primeiro use a linha do meio e depois o canal pintado -, tudo estará ok. Mas precisamos dessa ordem, pois ela é apenas uma parte do indicador.

Se você usar DRAW_LINE em vez de DRAW_FILLING, tudo estará OK também - ele desenha apenas três linhas - um canal não pintado e uma linha no meio.

Tentei diferentes combinações, sequências e número de buffers, pontos de desenho e outras coisas, mas nada funciona. Ou seja, se, por exemplo, houver um buffer com o tipo de desenho DRAW_FILLING, tudo o que vier depois dele não será exibido ou será desenhado incorretamente. Ficarei grato por qualquer ajuda, pois não acredito que seja impossível desenhar indicadores complexos de estilos diferentes ao mesmo tempo.


 
Ruslan Piraliyev SetIndexBuffer(1, Buf2, INDICATOR_DATA);

SetIndexBuffer(2, Buf3, INDICATOR_DATA);

PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_FILLING);

PlotIndexSetInteger(2, PLOT_DRAW_TYPE, DRAW_LINE);

Com essa construção, somente o canal pintado é exibido. Se você alterar a ordem - primeiro use a linha do meio e depois o canal pintado -, tudo estará bem. Mas precisamos dessa ordem, pois ela é apenas uma parte do indicador.

Se você usar DRAW_LINE em vez de DRAW_FILLING, tudo estará OK também - ele desenha apenas três linhas - um canal não pintado e uma linha no meio.

Tentei diferentes combinações, sequências e número de buffers, pontos de desenho e outras coisas, mas nada funciona. Ou seja, se, por exemplo, houver um buffer com o tipo de desenho DRAW_FILLING, tudo o que vier depois dele não será exibido ou será desenhado incorretamente. Ficarei grato por qualquer ajuda, pois não acredito que seja impossível desenhar indicadores complexos de estilos diferentes ao mesmo tempo.


O índice do buffer não deve coincidir com o índice de construção. Eles têm sua própria indicação. Tente PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_LINE);

 
Alexey Viktorov #:

O índice do buffer não deve ser o mesmo que o índice de construção. Eles têm sua própria indicação. Tente PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_LINE);

Obrigado!!! Funcionou e tudo se encaixou imediatamente).

Eu não achava que eles tinham indexação diferente. Acontece que a vinculação de buffers ao ponto de desenho ocorre como parece.

 
Alexey Viktorov #:

O índice do buffer não deve ser o mesmo que o índice de construção. Eles têm sua própria indicação. Tente PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_LINE);

Você poderia me dizer mais uma coisa: posso alterar a ordem das linhas para que a desejada fique no topo? Ou é apenas pela ordem de declaração dos buffers? Por exemplo, eu queria que o 0º buffer correspondesse à linha principal, e o canal de preenchimento estivesse no final, mas ele se sobrepõe a todos). Isso é conveniente porque planejo usar o indicador no Expert Advisor para recuperar dados de forma conveniente.

 
Ruslan Piraliyev #:

Você poderia me dizer mais uma coisa: é possível alterar a ordem das linhas para que a necessária fique no topo? Ou é apenas pela ordem de declaração do buffer? Por exemplo, eu queria que o 0º buffer correspondesse à linha principal, e o canal de preenchimento estava no final, mas ele se sobrepõe a todos). Isso é conveniente porque planejo usar o indicador no Expert Advisor para recuperar dados de forma conveniente.

Não estou entendendo nada. E que diferença faz o número do buffer a ser puxado para o Expert Advisor?