open price for specific bar every day?

To add comments, please log in or register
Johnsen
119
Johnsen  

Hi, does anyone know how to get an Open Price for specific bar everyday?

for example, i want to get the Open Price from the bar that open at 23.00 everyday

can anybody help me?

since i'm still very new to this mql4

thanks before.

Simon Gniadkowski
17213
Simon Gniadkowski  

Yes, very straight forward, use iOpen : https://docs.mql4.com/series/iOpen with iBarShift : https://docs.mql4.com/series/iBarShift for example . . .

iOpen(NULL, 0, iBarShift(NULL, 0, TimeCurrent()-(TimeCurrent()&3600)-Hour()-1) )


iBarShift(NULL, 0, TimeCurrent()-(TimeCurrent()&3600)-Hour()-1)  // gives the bar number for 23:00 hour the previous day


TimeCurrent()-(TimeCurrent()%3600)-Hour()-1       // gives the datetime for the 23:00 hour the previous day


Edit: code above is incorrect,  should be . . .

iOpen(NULL, 0, iBarShift(NULL, 0, TimeCurrent()-(TimeCurrent()&3600)-(60 * 60 * (Hour()+1) ) ) );


iBarShift(NULL, 0, TimeCurrent()-(TimeCurrent()&3600)-(60 * 60 * (Hour()+1) ) )  // gives the bar number for 23:00 hour the previous day


TimeCurrent()-(TimeCurrent()&3600)-(60 * 60 * (Hour()+1) )       // gives the datetime for the 23:00 hour the previous day


William Roeder
20210
William Roeder  
lucif:
for example, i want to get the Open Price from the bar that open at 23.00 everyday

Your question is ambiguous.

  1. If you want the last bar hourly for yesterday:
    On H1 or smaller chart
    Any chart period
    #define HR24 86400 // 24 * 3600
    datetime now   = Time[0];
    int      TOD   = now % HR24; // Time of day (date+time)
    datetime BOD   = now - TOD;  // Beginning of day+0000z
    datetime y2300 = BOD - 3600; // Yesterday+2300
    int      i2300 = iBarShift(NULL,0, y2300);
    Print("Yesterday's open at ",
          TimeToStr(Time[yesterday2300]),
          " was ", Open[i2300]);
    #define HR24 86400 // 24*3600
    datetime now = TimeCurrent();
    int      TOD = now % HR24;   // Time of day (date+time)
    datetime BOD = now - TOD;    // Beginning of day+0000z
    datetime y2300 = BOD - 3600; // Yesterday+2300z
    int      i2300H1 = iBarShift(NULL, PERIOD_H1, y2300);
    datetime t2300   = iTime(0, PERIOD_H1, i2300H1);
    double   o2300   = iOpen(0, PERIOD_H1, i2300H1);
    Print("Yesterday's open at ",TimeToStr(t2300),
          " was ", o2300);

    But on Sunday's open that will not be 2300 it will be Friday's 2100z open (market closes at 2159z.) Over market Holidays it will be the last open before the holiday.
  2. If you really meant the last 2300 the market was open, you need to use:
    On H1 or smaller chart Any chart period
    #define HR2300 82800 // 23*3600
    #define HR24   86400 // 24*3600
    for(int i2300=0; i2300 < Bars; i2300++){
       datetime t2300 = Time[i2300];
       int      TOD   = t2300 % HR24;
       if (TOD == HR2300) break;
    }
    Print("Yesterday's open at ",TimeToStr(t2300),
          " was ", Open[i2300]);
    #define HR2300 82800 // 23*3600
    #define HR24   86400 // 24*3600
    int iLimit = iBars(0, PERIOD_H1);
    for(int i2300H1=0; i2300H1 < iLimit; i2300H1++){
       datetime t2300 = iTime(0, PERIOD_H1, i2300H1);
       int      TOD   = t2300 % HR24; // Time of day
       if (TOD == HR2300) break;
    }
    int o2300 = iOpen(0, PERIOD_H1, i2300H1);
    Print("Yesterday's open at ",TimeToStr(t2300),
          " was ", o2300);

  3. You don't have to normally use the iTime/iOpen when you have the simpler Time[]/Open[]
  4. If your broker doesn't run using UTC time then you must adjust 2300 to your brokers time zone.
Johnsen
119
Johnsen  
RaptorUK:

Yes, very straight forward, use iOpen : https://docs.mql4.com/series/iOpen with iBarShift : https://docs.mql4.com/series/iBarShift for example . . .

hi raptor, thanks for your time replying my question. really appreciate it.

how if i use this kind of code?

datetime some_time=D'23:00'; // define the hour (23.00)

int shift=iBarShift("GBPOUSD",PERIOD_H1,some_time); // define the number of the bar that open 23.00

double hargaopen=Open[shift]; // get the open price from the 23.00 bar


can this work?

Simon Gniadkowski
17213
Simon Gniadkowski  
lucif:

can this work?

It might, I'm not sure if datetime some_time=D'23:00'; will give you the correct value, but it might . . try it and see what happens ;-)

Edit: just tried it, it gives an warning: '23:00' - date literal string is incomplete

Simon Gniadkowski
17213
Simon Gniadkowski  
WHRoeder is correct about some of this not working very well after the weekend, you will need to watch out for that.
Simon Gniadkowski
17213
Simon Gniadkowski  

OK, my code above is not quite correct . . . try this instead . . .

int shift=iBarShift("GBPUSD", PERIOD_H1, TimeCurrent()-(TimeCurrent()&3600)-(PERIOD_H1 * 60 * (Hour()+1) ),exact );

if the value for shift is -1 then the 23:00 bar is missing, i.e. during a weekend or holiday . . .

William Roeder
20210
William Roeder  
RaptorUK:

It might, I'm not sure if datetime some_time=D'23:00'; will give you the correct value, but it might . . try it and see what happens ;-)

Edit: just tried it, it gives an warning: '23:00' - date literal string is incomplete

  1. I would have thought that D'23:00' would compile but it might take the seconds D'23:00:00'
  2. D'23:00' is 2300 on the date you COMPILED the EA. not today+2300 if you want today+2300 either use StringToTime("23:00") or the code I posted BOD + 23*3600;
Johnsen
119
Johnsen  
WHRoeder:

Your question is ambiguous.

  1. If you want the last bar hourly for yesterday:
    On H1 or smaller chart
    Any chart period

    But on Sunday's open that will not be 2300 it will be Friday's 2100z open (market closes at 2159z.) Over market Holidays it will be the last open before the holiday.
  2. If you really meant the last 2300 the market was open, you need to use:
    On H1 or smaller chart Any chart period

  3. You don't have to normally use the iTime/iOpen when you have the simpler Time[]/Open[]
  4. If your broker doesn't run using UTC time then you must adjust 2300 to your brokers time zone.

hi everyone,

thanks too for your time.

actually the logic of my EA later will just be simple,

my EA will automatically open position with condition

"buy" if the current price is 20points under the open price of 23.00 bar and "sell" if the current price is 20points above the open price of 23.00 bar

but if either one of the condition is hit, then the other one will be ignored.

ex. today 23.00 open bar is 1.6000, then it goes up 1.620, the EA will open sell, and when the price go down 20 points from open price, it will not open buy anymore cause one condition has been hit. and it will open another position tomorrow with the exact condition though the previous position hasn't closed yet.


Edit : sorry, just read your comment, my connection is really slow here..

Alexander
241
Alexander  

I'll get into this topic

My question:

I'm looking for the High from the 10:00 hour candle from yesterday

and the Low from the 10:00 hour candle from the day before yesterday


Can someone help me there ?

To add comments, please log in or register