Как сделать перебор открытых позиций? - страница 2

 
Vladimir Karputov:

В качестве времени я предлагаю брать TimeCurrent() - последнее известное время торгового сервера. В таком случае обход позиций (по-умолчанию стоит магик "0" - позиции открытые вручную) покажет сколько секунд назад была открыта позиция:


Пример вывода:

 for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of current positions
      if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
А в случае если позиций 1, тогда в функцию передаётся 0, ведь 1 - 1 = 0. Как тогда она выбирает позицию?
 
Раз уж показываете примеры, объясните пожалуйста, а то код у вас скрыт ооп. Может там +1 в этом селектбайиндекс.
 
kaban_:
А в случае если позиций 1, тогда в функцию передаётся 0, ведь 1 - 1 = 0. Как тогда она выбирает позицию?

Все правильно - буде выбрана позиция с индексом '0'.

 
Vladimir Karputov:

Все правильно - буде выбрана позиция с индексом '0'.

Спасибо. Я не знал, что они с нуля считаются. Я пытался это найти, но не смог.
 
kaban_:
Спасибо. Я не знал, что они с нуля считаются. Я пытался это найти, но не смог.

Любой массив начинается с индекса '0'.

 
А почему важно цикл делать к нулю? Я бы тоже интуитивно так написал. Но видел примеры которые вверх считают. Я пытался представить, в каком случае может быть ошибка логики, но не смог придумать пример. Почему важно считать вниз?
 
kaban_:
А почему важно цикл делать к нулю? Я бы тоже интуитивно так написал. Но видел примеры которые вверх считают. Я пытался представить, в каком случае может быть ошибка логики, но не смог придумать пример. Почему важно считать вниз?

Потому что если закроешь 3-ю, то 3-ей станет 4-ая, а ты обратишься к 4-ой а там уже 5-ая, всё сложно как и с женщинами)

 
Aleksey Mavrin:

Потому что если закроешь 3-ю, то 3-ей станет 4-ая, а ты обратишься к 4-ой а там уже 5-ая, всё сложно как и с женщинами)

Спасибо.
 

Вам не нужен тикет позиии. 
Достаточно выбирать позицию по индексу. 
В вашем случае перебор позиций не важно откуда начинать, с начала или с конца. 

НО при закрытии важно перебирать от конца к началу. 
Почему так : 
Допустим у вас есть 4 позиции. 
перебирается позиции по индексу от 0 до 3. 
Если к примеру позиция с индексом 2 (3-я по списку) будет закрыта, то последняя позиция переместится в списке и получит индекс уже закрытой позиции. Цикл дальше перейдет на позицию с индексом 3, а такой позиции уже нет и эта позиция не будет обработана.

 

Dmitiry Ananiev:

……………

НО при закрытии важно перебирать от конца к началу. ……………

Даже при закрытии позиций не обязательно перебирать PositionsTotal() от конца к началу. Программист должен сохранять гибкость, этого… как оно называется?)))

Достаточно закрывать не i-тую позицию, а всегда 0-вую или PositionsTotal()-1 . При этом анализировать ошибку закрытия чтобы не зациклить в бесконечность.))))

Причина обращения: