AlexeyVik
Программист mql4 mql5
Функция OrdersTotal() возвращает количество рыночных и отложенных ордеров, но нумеруются они от 0 до OrdersTotal()-1Всем Привет!
у меня вопрос относительно функции OrdersTotal(), я верно понимаю что отсчет открытых ордеров идет от 0 , а не от 1, то есть при 1ном открытом ордере, функция OrdersTotal()=0, если это так, то при 10 открытых ордерах, она покажет 9???:facepalm:
отсюда понятна путаница в кодах разных программистов, когда они считают число открытых ордеров или выбирают ордера в цикле
fot(int i=0;i<OrdersTotal();i++) или лучше так?
fot(int i=0;i=OrdersTotal();i++)
еще вопрос - есть ли разница в работе советника если перебирать ордера наоборот, вот так:
fot(int i<OrdersTotal();i=0;i--)
или вот так:
for(int i=OrdersTotal()-1; i>=0; i--)
напишите плиз понятно где ошибки в каких вариантах циклов по выбору ордеров, и в чем именно ошибки, и есть ли разница в работе если ошибок нету, при прямом переборе и обратном???
ЗАРАНЕЕ СПАСИБО!
Направление перебора важно только для закрытия ВСЕХ ордеров. Причины описывать мне сейчас лениво, уже это обсуждалось неоднократно. В остальных случаях не важно.
Только любой вариант должен быть логически правильным:
1. fot(int i=0;i<OrdersTotal();i++) - Логичный вариант от индекса 0 пока индекс меньше количества ордеров. Работать будет безукоризненно, но в скрипте закрытия ВСЕХ ордеров может дать сбой. Из относительно большого количества ордеров пропустит парочку... Конкретно не угадаешь сколько будет пропущено. Но и здесь есть вариант исправления без изменения направления перебора. После закрытия ордера индекс уменьшать на 1.
2. fot(int i=0;i=OrdersTotal();i++) - Не логичный вариант... от индекса 0 пока индекс равен количеству ордеров.?????
3. fot(int i<OrdersTotal();i=0;i--) - Этот вариант тоже не логичен, от индекса меньше количества ордеров, пока индекс равен 0 ??????
4. for(int i=OrdersTotal()-1; i>=0; i--) - А вот этот вариант годен для любого случая.
Итого: Приемлемые, правильные варианты 1 и 4.