Как ускорить работу получения списка закрытых ордеров? - страница 3

 
Alexander Puzanov:

Создавать дубликат всей истории в каждом экземпляре бота нет необходимости, раз уж вам так дороги ресурсы. Достаточно запомнить тикет родителя при его открытии и каждого наследника находить через OrderSelect + OrderComment, без прочёсывания OrdersHistoryTotal. Хранить инфо всей цепочки, или только заменять тикет более актуальным - по вкусу

Запомнить где? А перезапуск? А 20 частично закрытых позиций? А 200 ?
 
Artyom Trishkin:
Запомнить где? А перезапуск? А 20 частично закрытых позиций? А 200 ?

Это всё о чём?


Artyom Trishkin:

Пункт 5 - это работа со своим списком, который один раз на каждом изменении сохраняется.

Где будет сохраняться этот 'свой список'? А перезапуск? А итд?

 
Alexander Puzanov:

Это всё о чём?


Где будет сохраняться этот 'свой список'? А перезапуск? А итд?

У меня при перезапуске считывается в список объектов нужная история, и далее всё там уже есть.
А вы предложили запоминать тикеты вновь закрытых позиций. Напрашивается вопрос - где?
 
Artyom Trishkin:
У меня при перезапуске считывается в список объектов нужная история

При перезапуске вы прочёсываете всю историю, при изменении в истории - опять прочёсываете. Да?

Если при открытии ордера-'папы' записать, напр в глобальные переменные, его тикет, прочёсывать всю историю при перезапуске или при изменении будет не нужно. При запуске нужно будет прочесть тикет из переменной и выбрать ордер по тикету  (не прочесать историю циклом, а выбрать конкретный тикет одним оператором), из коммента извлечь тикет следующего, выбрать его (не прочесать историю циклом, а выбрать конкретный тикет одним оператором) итд

При изменении истории тоже не нужно прочёсывать её всю, достаточно выбрать уже известный последний тикет, проверить закрыт/открыт. Итд

Так понятнее? Суть в том чтобы не обслуживать действующую модель вселенной в каждом экземпляре бота методом перебора истории по индексу, а отслеживать конкретный тикет

PS У модераторов здесь повышенная чувствительность к ООП, дак на всякий случай - хранить информацию в структурах очень очень очень удобно :)

---

Artyom Trishkin:
А вы предложили запоминать тикеты вновь закрытых позиций.
Alexander Puzanov:

Достаточно запомнить тикет родителя при его открытии и каждого наследника находить через OrderSelect + OrderComment, без прочёсывания OrdersHistoryTotal.

 
Alexander Puzanov:

При перезапуске вы прочёсываете всю историю, при изменении в истории - опять прочёсываете. Да?

Если при открытии ордера-'папы' записать, напр в глобальные переменные, его тикет, прочёсывать всю историю при перезапуске или при изменении будет не нужно. При запуске нужно будет прочесть тикет из переменной и выбрать ордер по тикету  (не прочесать историю циклом, а выбрать конкретный тикет одним оператором), из коммента извлечь тикет следующего, выбрать его (не прочесать историю циклом, а выбрать конкретный тикет одним оператором) итд

При изменении истории тоже не нужно прочёсывать её всю, достаточно выбрать уже известный последний тикет, проверить закрыт/открыт. Итд

Так понятнее? Суть в том чтобы не обслуживать действующую модель вселенной в каждом экземпляре бота методом перебора истории по индексу, а отслеживать конкретный тикет

PS У модераторов здесь повышенная чувствительность к ООП, дак на всякий случай - хранить информацию в структурах очень очень очень удобно :)

---

Вы не поняли. Только при перезапуске цикл. При изменении истории вносится в список объектов только новый. Нет цикла вообще.
 
Artyom Trishkin:
Только при перезапуске цикл.

Если тикет начального ордера сохранён в глобальных, цикл не нужен и при перезапуске

---

Можно обойтись без разбора комментов - присваивать каждому начальному ордеру цепочки персональный MagicNumber, он передаётся наследникам без изменений. Отпадёт необходимость ходить по цепочке родителей/потомков

---

Обычно закрываемая доля лота задаётся настройками - почему не рассчитать кол-во закрытий исходя из незакрытого лота и настроек? История в этом разе не нужна

---

Artyom Trishkin:
При изменении истории вносится в список объектов только новый. Нет цикла вообще.

Если ТС интересует только кол-во ордеров в цепочке, ему и объекты не нужны, собсно. А если есть необходимость отслеживать свойства открытых позиций (напр изменения TP/SL), как вы будете обходиться без циклов на каждом тике, поделитесь плз

---

 
Alexander Puzanov:

Создавать дубликат всей истории в каждом экземпляре бота нет необходимости, раз уж вам так дороги ресурсы. Достаточно запомнить тикет родителя при его открытии и каждого наследника находить через OrderSelect + OrderComment, без прочёсывания OrdersHistoryTotal. Хранить инфо всей цепочки или только заменять тикет более актуальным - по вкусу

OrderSelect() поднимает всё торговое окружение. Это затратная операция. Выбирать ордер нужно тогда, когда без этого не обойтись - при перезапуске и при изменении в истории. При изменении истории цикла нет - вписываются только изменения. И никакого прочёсывания.

В общем, холивар разводить нет желания.

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