Daily High Low timing for last day bar

Back to topics list To post a new topic, please log in or register
avatar
161
cashcube 2016.05.31 07:54
 

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:

 
   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);
   datetime LowT   = iTime(Symbol(),PERIOD_M1,Index);
   datetime HighT  = iTime(Symbol(),PERIOD_M1,Index2);

Thanks in advance.

Regards

 

avatar
161
cashcube 2016.05.31 08:20 #
 

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? 

 

 

avatar
13009
WHRoeder 2016.05.31 14:52 #
 
  1.          Count  = iBarShift(Symbol(),PERIOD_M1,TimeCurrent()),
    Count will be zero always.
  2.           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.
  3. 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),

avatar
161
cashcube 2016.05.31 16:35 #
 

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

 

 

avatar
13009
WHRoeder 2016.05.31 20:22 #
 
cashcube: 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?
Index  = iLowest(Symbol(),PERIOD_M1,MODE_LOW,Start,Count)
Yes and that is not what you are doing
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.
avatar
161
cashcube 2016.06.02 09:12 #
 
WHRoeder:
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.


avatar
161
cashcube 2016.06.03 14:26 #
 
//------------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.

 

 


avatar
Moderator
3427
GumRai 2016.06.03 14:43 #
 
 //-----------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


avatar
161
cashcube 2016.06.04 09:27 #
 
GumRai:

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?

 

 

 

 

 

avatar
Moderator
3427
GumRai 2016.06.04 14:01 #
 

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


avatar
161
cashcube 2016.06.06 16:02 #
 
GumRai:

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! 

Back to topics list  

To add comments, please log in or register