How to handle candlestick formation in real time

To add comments, please log in or register
vaeVictis
35
vaeVictis  
Hi.

I am writing my very first EA.

I need to use open, close, high, and low values of candlesticks in a one minute timeframe.

I have no problem handling the candlesticks already formed when the EA starts.

Yet I do not know how to handle the new candlesticks while they are incoming in real time.
Is there any function which monitors the updating candlesticks?

Any suggestion will be appreciated.
paul selvan
588
paul selvan  

Did you check candle 0 which is the current candle ?

double current_open  =  iOpen(_Symbol,PERIOD_M1,0),
       current_high  =  iHigh(_Symbol,PERIOD_M1,0),
       current_low   =  iOpen(_Symbol,PERIOD_M1,0),
       current_close = iClose(_Symbol,PERIOD_M1,0);

or

double current_open  =  Open[0],
       current_high  =  High[0],
       current_low   =  Open[0],
       current_close = Close[0];
andrew4789
277
andrew4789  
vaeVictis:
Hi.

I am writing my very first EA.

I need to use open, close, high, and low values of candlesticks in a one minute timeframe.

I have no problem handling the candlesticks already formed when the EA starts.

Yet I do not know how to handle the new candlesticks while they are incoming in real time.
Is there any function which monitors the updating candlesticks?

Any suggestion will be appreciated.
If your main code is running inside OnTick() or OnTimer() events (which I think it needs to) the job is done for you. 
As real time changes, iClose(....,1) will be the close of the previous bar, whatever the time is.
vaeVictis
35
vaeVictis  
Thank you all for your answers.

@paul selvan
Of course I check candle 0.
What I need is to grab the exact moment when the last candle is completly formed.
I do not know how to do this.

@andrew4789
I am not sure I understood what you said :(
paul selvan
588
paul selvan  
vaeVictis:
What I need is to grab the exact moment when the last candle is completly formed.

The right moment when  new 1-minute candle is formed  can be obtained by :

void OnTick(){
   static datetime oldTime;
        
   datetime newTime = iTime(_Symbol,PERIOD_M1,0);    
   
    if (newTime!=oldTime) {
        oldTime=newTime;
        
        //...codes
   }
      
}
vaeVictis
35
vaeVictis  
Thank you for the code snippet.

Just one last question.
How can I make "PERIOD_M1" dependent on the chart timeframe?

Thank you in advance.
Benjamin Theriault
523
Benjamin Theriault  
vaeVictis:
Thank you for the code snippet.

Just one last question.
How can I make "PERIOD_M1" dependent on the chart timeframe?

Thank you in advance.

Just use PERIOD_CURRENT instead of PERIOD_M1

(If I understood your question correctly) 
vaeVictis
35
vaeVictis  
I think you understood.

I'll update you when I have a computer at hand.

Many thanks you all

vaeVictis
35
vaeVictis  

HI!

I've tried the code and I have a problem

The code is:


void OnTick()
  {
//---
   static datetime oldTime;
   string new_prices;
   datetime newTime = iTime(_Symbol,PERIOD_CURRENT,0);    
   if(newTime!=oldTime){
      oldTime=newTime;
      new_prices = StringFormat("Open:%g, Close:%g, High:%g, Low:%g, Volume:%g, Time:%s", iOpen(_Symbol,PERIOD_CURRENT,0), 
                                                                                          iClose(_Symbol,PERIOD_CURRENT,0), 
                                                                                          iHigh(_Symbol,PERIOD_CURRENT,0),
                                                                                          iLow(_Symbol,PERIOD_CURRENT,0),
                                                                                          iVolume(_Symbol,PERIOD_CURRENT,0),
                                                                                          TimeToStr(iTime(_Symbol,PERIOD_CURRENT,0)));
      Print(new_prices);
  }
  }


The timing is ok. The information is printed once the candlestick is completly formed.

The problem is that the information about the candlestick are not correct. The Volume is always 1. The other values are always the same.

Any hints?


edit:

I solved shifting by 1 al the values.

To add comments, please log in or register