Hi eval, it is correct what you say concerning the behaviour of the asset loop but also remember the behaviour of the run() function: it is called every bar. So, it is correct that the asset loop eventually return zero but it is called again at the next run() call to start with "EUR/USD" again, it is like a c program with main() that is restarted. Concerning the algo loop, it is restarted for each iteration of the outer loop, like in this c script

Code:
for (int i = 0; i < 3; i++)
    for (int j = 0; j < 2; j++)
        printf("%i\n",i+j);



it prints 0 1 1 2 2 3 (0+0 0+1 1+0 1+1 2+0 2+1)

This is what happens in the first two bars:

First bar:

"EUR/USD" with "TRND"
then "EUR/USD" with "CNTR"
then the inner loop exits
then "USD/JPY" with "TRND"
then "USD/JPY"with "CNTR"
then the inner loop exits
then the outer loop exits

Then comes the second bar:

"EUR/USD" with "TRND"
then "EUR/USD" with "CNTR"
then the inner loop exits
then "USD/JPY" with "TRND"
then "USD/JPY"with "CNTR"
then the inner loop exits
then the outer loop exits

Feel free to ask if you have any doubt!