I tried doing it in following way, It showing high time correctly but low time is wrong.
datetime HighT,LowT; if(Bar == 0) { datetime ThisD = iTime(Symbol(),PERIOD_D1,Bar); int Start = iBarShift(Symbol(),PERIOD_M1,ThisD), Count = iBarShift(Symbol(),PERIOD_M1,TimeCurrent()), Index = iLowest(Symbol(),PERIOD_M1,MODE_LOW,Start,Count), Index2 = iHighest(Symbol(),PERIOD_M1,MODE_HIGH,Start,Count); LowT = iTime(Symbol(),PERIOD_M1,Index); HighT = iTime(Symbol(),PERIOD_M1,Index2); } //-----------For checking past data---------// else { datetime ThisD = iTime(Symbol(),PERIOD_D1,Bar); int Start = iBarShift(Symbol(),PERIOD_M1,ThisD), Count = iBarShift(Symbol(),PERIOD_M1,(ThisD+86400)), Index = iLowest(Symbol(),PERIOD_M1,MODE_LOW,Start,Count), Index2 = iHighest(Symbol(),PERIOD_M1,MODE_HIGH,Start,Count); LowT = iTime(Symbol(),PERIOD_M1,Index); HighT = iTime(Symbol(),PERIOD_M1,Index2); }
High showing 9:30 Low time 15:43
But in reality High time is 9:30 & low time is 0:18
I tested with another example, there it showing low time correct but high time wrong. Why its happening like this?
Count = iBarShift(Symbol(),PERIOD_M1,TimeCurrent()),
Count will be zero always.Index = iLowest(Symbol(),PERIOD_M1,MODE_LOW,Start,Count)
The number of bars between Start and Count including both is Start - Count + 1. You never look at the first bar of the day.Count = iBarShift(Symbol(),PERIOD_M1,(ThisD+86400)),
This assumes there are no gaps in time, like on the weekend and market holidays. Get the time of the second daily bar and don't count the first bar of today.datetime Today = iTime(Symbol(),PERIOD_D1,Bar); datetime Yesterday = iTime(Symbol(),PERIOD_D1,Bar+1); int StartToday = iBarShift(Symbol(),PERIOD_M1,Today), StartYesterday = iBarShift(Symbol(),PERIOD_M1,Yesterday), EndYesterday = StartToday - 1, Index = iLowest(Symbol(),PERIOD_M1,MODE_LOW, StartYesterday - EndYesterday + 1, EndYesterday), Index2 = iHighest(Symbol(),PERIOD_M1,MODE_HIGH,StartYesterday - EndYesterday + 1, EndYesterday),
Hi,
Thank you for the correction.
For 1st point, I know its zero. That's what I want to get current day high low on live chart.
About the 2nd point, if a day low forms at 0:00 on current day then I need to look at the 1st bar of the day isn't it ?
I added the 3rd code when Bar>0 (for last day) but it doesn't worked. Still showing one data correct other one wrong.
Regards
Index = iLowest(Symbol(),PERIOD_M1,MODE_LOW,Start,Count)
start count 5 4 3 2 1 0 [ 5 4 3 2 1] iLowest( length=start, begin=count) ^ first bar not scanned. 5 bars scanned 0 through 4.
Yes and that is not what you are doing
Hi
Thank you for posting the explanation.
I tried using your code on both cases for Bar == 0 (Current day)
for Bar >0, its showing wrong data.
In fact for Bar == 0 my previous code is working.
but for Bar>0 nothing is working.
//------------TIming-----------// datetime HighT,LowT; if(Bar == 0) { datetime ThisD = iTime(Symbol(),PERIOD_D1,Bar); int Start = iBarShift(Symbol(),PERIOD_M1,ThisD), Count = iBarShift(Symbol(),PERIOD_M1,TimeCurrent()), Index = iLowest(Symbol(),PERIOD_M1,MODE_LOW,((Start-Count)+1),Count), Index2 = iHighest(Symbol(),PERIOD_M1,MODE_HIGH,((Start-Count)+1),Count); LowT = iTime(Symbol(),PERIOD_M1,Index); HighT = iTime(Symbol(),PERIOD_M1,Index2); } //-----------For checking past data---------// else { datetime Today = iTime(Symbol(),PERIOD_D1,Bar); datetime Yesterday = iTime(Symbol(),PERIOD_D1,Bar+1); int StartToday = iBarShift(Symbol(),PERIOD_M1,Today), StartYesterday = iBarShift(Symbol(),PERIOD_M1,Yesterday), EndYesterday = StartToday - 1, Index = iLowest(Symbol(),PERIOD_M1,MODE_LOW, StartYesterday - EndYesterday + 1, EndYesterday), Index2 = iHighest(Symbol(),PERIOD_M1,MODE_HIGH,StartYesterday - EndYesterday + 1, EndYesterday); LowT = iTime(Symbol(),PERIOD_M1,Index); HighT = iTime(Symbol(),PERIOD_M1,Index2); }
Among this code Bar == 0 is working well but not Bar >0 in 2nd part.
There is a problem with the 2nd code.
//-----------For checking past data---------// else { datetime Today = iTime(Symbol(),PERIOD_D1,Bar);
if Bar !=0, you will not be working with Today, same with Yesterday.
if Bar==1 you will be getting the high and low time of the day before yesterday
if Bar !=0, you will not be working with Today, same with Yesterday.
if Bar==1 you will be getting the high and low time of the day before yesterday
Yes in case of current day its forward checking & in case of Bar>0 its a back ward checking way where high low is already formed.
My current day code is working but I am not sure what i need to do for 2nd part.
I try removing the else part instead added if(Bar>0) or even with if(Bar!=0) then the 2nd code. But its not working. Bar>0 is means always the last day data & so on.
Then is the 2nd code is totally wrong for Bar == 1, Bar==2 or anything above 0?
I'm not sure that we are understanding each other
instead of
datetime Today = iTime(Symbol(),PERIOD_D1,Bar); datetime Yesterday = iTime(Symbol(),PERIOD_D1,Bar+1);
try
datetime Today = iTime(Symbol(),PERIOD_D1,Bar-1); datetime Yesterday = iTime(Symbol(),PERIOD_D1,Bar);
then when Bar==1 it will work with yesterday's data
I'm not sure that we are understanding each other
instead of
try
then when Bar==1 it will work with yesterday's data
Thank you for pointing out.
Now its working!
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi, I have this code for calculating current day High/Low Timing, That works perfectly,
But If change the Bar= 0 to Bar=1
Then for last day High low timing it shows wrong as obviously I counted with TimeCurrent()
Instead of counting it with TimeCurrent() is there any way to show last day high low time in other way?
Here is the code:
Thanks in advance.
Regards