Цикл!

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Maksim Neimerik
31755
Maksim Neimerik  

Привет! Скажите почему пишут for(int i=OrdersTotal()-1; i>=0; i--)? Разве так не проще: for(int i=OrdersTotal(); i>0; i--)? Зачем там -1? Или есть какая-то разница?

Да, и еще вопрос: может для OrderDelete() быть ошибка 145 (Модификация запрещена, так как ордер слишком близок к рынку)? У меня случилась такая фигня, и я чесно говоря подофигел, здесь же нет никакой модификации, просто удаление отложки...

Dmitry Fedoseev
57631
Dmitry Fedoseev  

Как нужно, так и пишут, а нужно от OrdersTotal()-1 до 0 включительно. Потому-что отсчет с нуля, а количество OrdersTotal().

Удаление ордера. Есть такой уровень заморозки - MODE_FREEZELEVEL.

Konstantin Erin
2161
Konstantin Erin  
Maksim Neimerik:  почему пишут for(int i=OrdersTotal()-1; i>=0; i--)? Разве так не проще: for(int i=OrdersTotal(); i>0; i--)? Зачем там -1?

Если нужно проще - можно писать так for(int i=OrdersTotal(); i-->0;)             Проверил в скрипте:

#property strict

void OnStart()
{
  int Total=5;
  for(int i=Total; i-->0;)   Alert(i);
}

    i--  > 0;   означает, что сначала производится сравнение, потом i уменьшается на 1  и потом выполняется тело цикла

А индексация с нуля в С++ и основанных на нем языках потому, что указываем смещение от начала. Первый элемент находится со смещением = 0 от начала. Чтобы добраться до последнего элемента нужно сместиться или пропустить (количество - 1) элементов

Alexey Busygin
6414
Alexey Busygin  

думают что функция работает с массивом, а у массива первый индекс 0, обычно так создают сдвиг, то есть делают контрольный выстрел, чтоб отсчет начинался точно с нуля, а не единицы. -1 ставят в основном на тайм сериях и при пересчете баров при создании индикаторов, там иногда нужно потому что нулевой бар может оказаться первым и параметры не сойдутся

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий