Plotar Somente no ùltimo Candle

 

Bom dia, estou com esse código abaixo e a única coisa que gostaria, é de que a cada candle, o meu indicador faça a plotagem da máxima e mínima do candle já fechado com a diferença de 1 tick. Consegui fazer a plotagem de forma bem simples, mas está aparecendo em todos os candles e gostaria que essa plotagem sempre mostrasse no candle anterior ao aberto, cada novo candle, quero deslocar a plotagem e limpar os anteriores. Tem como fazer?



#property version   "1.00"
#property indicator_chart_window

#property indicator_buffers 2
#property indicator_plots 2

#property indicator_label1 "Max"
#property indicator_type1  DRAW_ARROW
#property indicator_style1 STYLE_DASHDOT
#property indicator_color1 clrGreen
#property indicator_width1 1

#property indicator_label2 "Min"
#property indicator_type2  DRAW_ARROW
#property indicator_style2 STYLE_DASHDOT
#property indicator_color2 clrRed
#property indicator_width2 1

double   maxbuffer[];
double   minbuffer[];


int OnInit()
  {

SetIndexBuffer(0,maxbuffer,INDICATOR_DATA);
SetIndexBuffer(1,minbuffer,INDICATOR_DATA);

ArrayInitialize(maxbuffer,EMPTY_VALUE);
ArrayInitialize(minbuffer,EMPTY_VALUE);

return(INIT_SUCCEEDED);
  
  }



int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

   if(prev_calculated==0)
   {
      for(int i=0;i<rates_total;i++)
      {
         maxbuffer[i] = high[i]+5;
         minbuffer[i]  = low[i]-5;
      }
   }
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
  • www.mql5.com
Tire dúvidas sobre análise técnica, fale com outros traders sobre sistemas de negociação e melhore suas habilidades de programação de estratégias em linguagem MQL5. Participe do fórum, compartilhe ideias com traders de todo o mundo e ajude com feedback os novatos — nossa comunidade está crescendo junto com você. Colocar visualmente ordens...
 
wildermellotto:

Bom dia, estou com esse código abaixo e a única coisa que gostaria, é de que a cada candle, o meu indicador faça a plotagem da máxima e mínima do candle já fechado com a diferença de 1 tick. Consegui fazer a plotagem de forma bem simples, mas está aparecendo em todos os candles e gostaria que essa plotagem sempre mostrasse no candle anterior ao aberto, cada novo candle, quero deslocar a plotagem e limpar os anteriores. Tem como fazer?



#property version   "1.00"
#property indicator_chart_window

#property indicator_buffers 2
#property indicator_plots 2

#property indicator_label1 "Max"
#property indicator_type1  DRAW_ARROW
#property indicator_style1 STYLE_DASHDOT
#property indicator_color1 clrGreen
#property indicator_width1 1

#property indicator_label2 "Min"
#property indicator_type2  DRAW_ARROW
#property indicator_style2 STYLE_DASHDOT
#property indicator_color2 clrRed
#property indicator_width2 1

double   maxbuffer[];
double   minbuffer[];


int OnInit()
  {

SetIndexBuffer(0,maxbuffer,INDICATOR_DATA);
SetIndexBuffer(1,minbuffer,INDICATOR_DATA);

ArrayInitialize(maxbuffer,EMPTY_VALUE);
ArrayInitialize(minbuffer,EMPTY_VALUE);

return(INIT_SUCCEEDED);
  
  }



int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

   if(prev_calculated==0)
   {
      for(int i=0;i<rates_total;i++)
      {
         maxbuffer[i] = high[i]+5;
         minbuffer[i]  = low[i]-5;
      }
   }
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Use a funcao ArraySetAsSeries. Veja a documentacao no link. 

[ ]'s

Documentação sobre MQL5: Funções para Array / ArraySetAsSeries
Documentação sobre MQL5: Funções para Array / ArraySetAsSeries
  • www.mql5.com
//| Função de inicialização do indicador customizado                 | //| Função de iteração do indicador customizado                      | //
 
Joscelino Celso de Oliveira:

Use a funcao ArraySetAsSeries. Veja a documentacao no link. 

[ ]'s

Caramba, na mosca, muito obrigado. Resposta certeira, funcionou aqui de primeira na mudança de série e na hora do indicador, coloquei o valor [1] e isso foi o suficiente, show de bola mesmo....


Será que posso incomodar mais um pouco? Eu consegui deixar no formato da imagem abaixo, mas queria ver como posso desenhar uma linha reta com as cores do ponto que deixei, tentei usar o DRAW_LINE mas não rolou.


 
wildermellotto:

Caramba, na mosca, muito obrigado. Resposta certeira, funcionou aqui de primeira na mudança de série e na hora do indicador, coloquei o valor [1] e isso foi o suficiente, show de bola mesmo....


Será que posso incomodar mais um pouco? Eu consegui deixar no formato da imagem abaixo, mas queria ver como posso desenhar uma linha reta com as cores do ponto que deixei, tentei usar o DRAW_LINE mas não rolou.


Amigo, boa tarde. 

Poderia postar como ficou o código para plotagem da máxima? Estou tentando e não consigo.

Razão: