Download MetaTrader 5

Bar Index Help

To add comments, please log in or register
Mimi
507
Mimi  

Hello Members, 

Need little bit help on coding logic. Here is the details:

if Bar creates higher higher, higher low

1st Bar from where it created higher higher, I want to store it index number. Then finally when market no more creates higher higher, I use iLowest() with that index & current index to find the lowest point. I mean as long as market creates higher higher higher low, the lowest point will be fixed until it reverses.

That's the work need to be done. I tried coding with following but its not working. 

for(int i=20;  i>= 0; i--)
{
 if((iHigh(Symbol(),0,i-1) >= iHigh(Symbol(),0,i) && iLow(Symbol(),0,i-1) >= iLow(Symbol(),0,i)))
 { 

  if(C1 == 0) C1 = i;

  
   UB = iLow(Symbol(),0,iLowest(Symbol(),0,MODE_LOW,C1,i));
 
   buffer[i] = UB;
 }
 
 C1 = 0;
 
 if((iHigh(Symbol(),0,i-1) <= iHigh(Symbol(),0,i) && iLow(Symbol(),0,i-1) <= iLow(Symbol(),0,i)))
 { 
   

   if(C2 == 0) C2 = i;
   
   LB = iHigh(Symbol(),0,iHighest(Symbol(),0,MODE_HIGH,C2,i));
   buffer[i] = LB;
 
 }
 C2 = 0;
 
 }

 Please help.

JC
1498
JC  
cashcube:

1st Bar from where it created higher higher, I want to store it index number. Then finally when market no more creates higher higher, I use iLowest() with that index & current index to find the lowest point. I mean as long as market creates higher higher higher low, the lowest point will be fixed until it reverses.

It's not 100% clear what you want and are trying to do, but I suspect your problem is the fourth parameter for iLowest:

if(C1 == 0) C1 = i;
UB = iLow(Symbol(), 0, iLowest(Symbol(), 0, MODE_LOW, C1, i));

That parameter is a count; a number of bars. Your code is looking back C1 bars from i. For example, if C1 is 20 and i is 10, then the code will examine bars 10 to 29.

I suspect that what you want to do is MODE_LOW, C1 - i, i or MODE_LOW, C1 - i + 1, i  (depending on whether you want the low since C1, or since-and-including C1). 

whroeder1
15303
whroeder1  
cashcube: , I want to store it index number.
No you don't. As soon as a new bar forms your index is useless. Save the date of the bar and find the shift.
Mimi
507
Mimi  
jjc:

It's not 100% clear what you want and are trying to do, but I suspect your problem is the fourth parameter for iLowest:

That parameter is a count; a number of bars. Your code is looking back C1 bars from i. For example, if C1 is 20 and i is 10, then the code will examine bars 10 to 29.

I suspect that what you want to do is MODE_LOW, C1 - i, i or MODE_LOW, C1 - i + 1, i  (depending on whether you want the low since C1, or since-and-including C1). 

Hello thank you for your post,

You spotted right, 4th parameter is the problem.

With MODE_LOW,C1-i+1 I get the followings: But I want to do something which are draw in black thick line. With C1-i+1 that is not happening. I need to keep C1 fixed. Any idea?

Regards 

Mimi
507
Mimi  
WHRoeder:
cashcube: , I want to store it index number.
No you don't. As soon as a new bar forms your index is useless. Save the date of the bar and find the shift.

Tried it but didn't worked. Result is same.

 if(C1 == 0) C1 = iBarShift(Symbol(),0,iTime(Symbol(),0,i));
whroeder1
15303
whroeder1  
What do you expect that to return? It will always return i!
iBarShift(Symbol(),0,iTime(Symbol(),0,i));
Mimi
507
Mimi  
WHRoeder:
What do you expect that to return? It will always return i!

Then how can I do it, If I Store i's Time & Then find iBarshift, it will keep changing as long as the loop moves forward. Look at my picture.
Fernando Carreiro
2202
Fernando Carreiro  
cashcube:
Then how can I do it, If I Store i's Time & Then find iBarshift, it will keep changing as long as the loop moves forward. Look at my picture.

It is an Indicator, so use your buffers. Keep track of running values in extra support buffers (that don't display). In other words, instead of storing the Bar Index, keep track of the Bar shift in relative terms to the current bar (1 bar back, 2 bars back, 3 bars back, etc.).

You also don't need to keep looping back or using the iLowest() or iHighest() in every new bar. Just keep that information also as running values in extra support buffers.

Mimi
507
Mimi  
FMIC:

It is an Indicator, so use your buffers. Keep track of running values in extra support buffers (that don't display). In other words, instead of storing the Bar Index, keep track of the Bar shift in relative terms to the current bar (1 bar back, 2 bars back, 3 bars back, etc.).

You also don't need to keep looping back or using the iLowest() or iHighest() in every new bar. Just keep that information also as running values in extra support buffers.

Inside the loop of i, it will keep changing, then how can I use ibarshift here? Do I need to run another loop inside?

I got following coding but it produce same results as before:

for(int i=limit;  i>= 0; i--)
{
 if((iHigh(Symbol(),0,i-1) >= iHigh(Symbol(),0,i) && iLow(Symbol(),0,i-1) >= iLow(Symbol(),0,i)))
 { 

   Supportbuffer[i] = iLow(Symbol(),0,i);
   
   if(Supportbuffer[i] < Supportbuffer[i-1])
   
   buffer[i] = Supportbuffer[i];
 }

}
Mimi
507
Mimi  

any correction on my coding or any coding example?

Thanks. 

Mimi
507
Mimi  
for(int i=limit;  i>= 0; i--)
{
 if((iHigh(Symbol(),0,i-1) <= iHigh(Symbol(),0,i) && iLow(Symbol(),0,i-1) <= iLow(Symbol(),0,i)))
 { 
   
   Supportbuffer[i] = iHigh(Symbol(),0,i);
   
   if(Supportbuffer[i] < Supportbuffer[i-1])
   { 
    Supportbuffer2[i] = Supportbuffer2[i] + MathAbs(i-(i-1));
    
    buffer[i] = iHigh(Symbol(),0,Supportbuffer2[i]);
    }
 
 }

 
}

I updated the code more, declaring 3 buffer at initialization. Supportbuffer2 is integer type. But its showing, array out of range error.

Any idea? 

123
To add comments, please log in or register