# Need favour understanding how to loop through candles - how cycles work in MQL4

#### Jixo man

Good morning mql4 programers . Please I have read mql4 documentation on custom indicator and the use conditional operator: "for".... I understand that , we initialise the counter and if a condition is true a set of code is run. But I don't still don't understand. Please help.

#### Enivid

Staff member
Operator `for` initiates a cycle. For example, you want to print all numbers from 1 to 10. The straightforward way to do that is to just put 10 lines of `Print()` functions:
MQL4:
```Print("1");
Print("2");
// And so on...
Print("10");```
But it is blunt and inefficient. Imagine if you wanted to print all numbers from 1 to 1,000,000? So in programming, you have cycles to repeat actions multiple times. Using a cycle with a `for` operator, you can print the numbers from 1 to 10 much easier:
MQL4:
`for (int i = 1; i <= 10; i++) Print(i);`
When the cycle starts, the variable `i` is assigned the value of "1". On each iteration of the cycle, the command `Print(i)` is executed. At the end of each iteration, the command `i++` is executed (`i++` is the same as `i = i + 1`). When i gets to "11", the cycle is finished - before it gets to `Print("11")`.

I hope this helps.

#### Jixo man

Operator `for` initiates a cycle. For example, you want to print all numbers from 1 to 10. The straightforward way to do that is to just put 10 lines of `Print()` functions:
MQL4:
```Print("1");
Print("2");
// And so on...
Print("10");```
But it is blunt and inefficient. Imagine if you wanted to print all numbers from 1 to 1,000,000? So in programming, you have cycles to repeat actions multiple times. Using a cycle with a `for` operator, you can print the numbers from 1 to 10 much easier:
MQL4:
`for (int i = 1; i <= 10; i++) Print(i);`
When the cycle starts, the variable `i` is assigned the value of "1". On each iteration of the cycle, the command `Print(i)` is executed. At the end of each iteration, the command `i++` is executed (`i++` is the same as `i = i + 1`). When i gets to "11", the cycle is finished - before it gets to `Print("11")`.

I hope this helps.

Firstly, this is really like a family here. Thanks for the quick responses. Just like checking for total orders in an instrument. I understand that. But I just want to
wrap it from Indicator_counted .
That's if there are 1000bars on a chart, I know On_calculate is 1000bars and previously_calculated is 9990 after the first tick. But do I loop from that 1000bars to the last candle checking for a moving average cross. Although I do copy paste code . I just wait to understand

#### Jixo man

So
Firstly, this is really like a family here. Thanks for the quick responses. Just like checking for total orders in an instrument. I understand that. But I just want to
wrap it from Indicator_counted .
That's if there are 1000bars on a chart, I know On_calculate is 1000bars and previously_calculated is 9990 after the first tick. But do I loop from that 1000bars to the last candle checking for a moving average cross. Although I do copy paste code . I just wait to understand

Some typo errors there. What I am saying is in the one dimensional array say MacdBuffer holding all the close of a slow moving average, how do you look for information on that array with the "for" operator. Or Maybe I am not asking the correct questions. Well one thing is certain in three months I must process in Mql4

#### Enivid

Staff member
This will print all values for `MacdBuffer` array inside `OnCalculate()` function in MQL4 from the oldest value to the newest value:
MQL4:
```for (int i = rates_total - 1; i >= 0; i--)
{
Print(MacdBuffer[i]);
}```

This will skip previously calculated bars but will always recalculate the latest (current) bar:
MQL4:
```int counted_bars = prev_calculated > 0 ? prev_calculated - 1 : 0;
int limit = rates_total - 1 - counted_bars ;
for (int i = limit - 1; i >= 0; i--)
{
Print(MacdBuffer[i]);
}```

This will also work correctly in MQL5 if the array is set as series.

• Jixo man

#### Jixo man

This will print all values for `MacdBuffer` array inside `OnCalculate()` function in MQL4 from the oldest value to the newest value:
MQL4:
```for (int i = rates_total - 1; i >= 0; i--)
{
Print(MacdBuffer[i]);
}```

This will skip previously calculated bars but will always recalculate the latest (current) bar:
MQL4:
```int counted_bars = prev_calculated > 0 ? prev_calculated - 1 : 0;
int limit = rates_total - 1 - counted_bars ;
for (int i = limit - 1; i >= 0; i--)
{
Print(MacdBuffer[i]);
}```

This will also work correctly in MQL5 if the array is set as series.
Thanks sir. I am beginning to get the login. Thank you . I am greatful.