Tentei escrever meu próprio indicador com o código publicado usando a propriedade de desenho DRAW_FILLING.
Mas tenho problemas com a aderência de seções desenhadas vizinhas separadas por valores vazios.
Se duas seções desenhadas aparecerem em uma janela, apesar de estarem separadas por uma seção do indicador com o valor EMPTY_VALUE, essa seção vazia ainda será desenhada com os valores das seções vizinhas.
Peguei esse caso porque os códigos publicados para o indicador de sessões não funcionam para mim, então decidi reescrever tudo.
Aqui está um rascunho.
Só posso oferecer esta opção
Obrigado, mas ainda falta um pouco, talvez eu pare nos objetos gráficos.
Obrigado, mas um pouco não vai adiantar, vou parar nos objetos gráficos.
- www.mql5.com
Como o desenho no estilo DRAW_FILLING é feito com polígonos, infelizmente não é possível obter retângulos bonitos.
Encontrei o mesmo problema (aderência em áreas de valores vazios). Embora pareça ter sido dito acima que é impossível obter retângulos, mas como há um exemplo que desenha esses retângulos(indicador de sessões de negociação), decidi me aprofundar no assunto.
Falando francamente, não consegui entender como obter retângulos no indicador acima. Portanto, ficarei grato por quaisquer explicações (dos desenvolvedores da plataforma, do autor, de desenvolvedores terceirizados).
Por outro lado, no decorrer dos experimentos, descobri que não é tão difícil obter retângulos - basta trocar os buffers de preenchimento após uma seção de valores vazios. Em outras palavras, este código
... //--- for ( int bar = startBar; bar < rates_total && !IsStopped(); bar++ ) { if ( prev_calculated != rates_total && bar == rates_total - 1 ) { _up = up; } if ( bar % 4 == 0 ) { if ( up ) { draw(bar, high[bar], low[bar]); up = false; } else { draw(bar, low[bar], high[bar]); up = true; } } } //--- valor de retorno de prev_calculated para a próxima chamada return(rates_total); } //+------------------------------------------------------------------+ void draw(int bar, double price1, double price2) { //--- int start = bar-2; for ( int i = start; i <= bar; i++ ) { FillingBuffer1[i] = price1; FillingBuffer2[i] = price2; } //--- }
dá esse resultado:

Parece que o problema foi resolvido. Escrevi um indicador que aloca intervalos de tempo especificados pelo usuário diariamente e tive uma nova surpresa:

Não importa o quanto eu o distorça, não consigo remover os "efeitos colaterais". Observe que no primeiro caso (código e imagem acima) nada disso foi observado.
Por isso, as perguntas:
- Por que o indicador de sessões de negociação (link no início da postagem) não tem o problema de aderir às áreas de valores vazios?
- Por que, em alguns casos, os retângulos são desenhados normalmente e, em outros, temos efeitos colaterais? Os códigos estão anexados no final da postagem. (Sim, se esses fenômenos sempre ocorressem, eu concordaria com a afirmação sobre polígonos).
Repito: ficarei grato por todas as explicações.
P.S.1 Ao que me parece, a solução para o problema dos retângulos é uma boa alternativa aos objetos (que, de alguma forma, não quero realmente usar). Afinal, é a mesma seleção de intervalos de tempo, reversão linear, áreas de Darvas, seleção de vários padrões, etc., etc.
P.S.2 Pensei em colocar o indicador TimeZone na base de código, mas será que vale a pena (com essas barras "esquerdas")?
use PlotIndexSetDouble (1,PLOT_EMPTY_VALUE,EMPTY_VALUE); para não preencher o intervalo.
Por que algumas vezes tem efeito e outras vezes não?
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso

DRAW_FILLING:
O estilo de desenho DRAW_FILLING plota uma área preenchida entre os valores de dois buffers de indicador. Na verdade, ele plota duas linhas e preenche a área entre elas com a cor especificada.
Autor: MetaQuotes Software Corp.