Отслеживание статуса ордера

 
Добрый день.

Помогите, пожалуйста, с проблемой отслеживания статуса ордера. Есть ли возможность быстро по ticket_id узнать открыт ордер или нет.
Вариант поиска в списке открытых ордеров не солидно выглядит. Или другого пути нет?

Спасибо.
 

Открытый/закрытый ордер - это не всё об ордерах. Они ещё меняют номер при частичном закрытии и переоткрытии ночью (в банках). Посмотрите Учёт ордеров в большой программе.

 
johngull писал (а):
Вариант поиска в списке открытых ордеров не солидно выглядит.
Эк, Вас занесло! Не подумавши, наверно... А что же тогда солидно?
 
SK. писал (а):

Открытый/закрытый ордер - это не всё об ордерах. Они ещё меняют номер при частичном закрытии и переоткрытии ночью (в банках). Посмотрите Учёт ордеров в большой программе.

Спасибо, почитал.
Не совсем то что ожидал, но ситуация сильно прояснилась :)

KimIV:
johngull писал (а):
Вариант поиска в списке открытых ордеров не солидно выглядит.
Эк, Вас занесло! Не подумавши, наверно... А что же тогда солидно?
Ну, почему же, не подумавши. Всегда ведь хочется сократить время выполнения.
Солидней, как мне кажется, было бы что-то в духе IsOrderOpenedbyMagic(magic_code).
 
johngull:
солидней, как мне кажется, было бы что-то в духе IsOrderOpenedbyMagic(magic_code).

На запуске советника один раз проходим по всем ордерам, если находим свой ордер - запоминаем в переменную, а дальше пользуемся этой переменной. После открытия ордера тоже запоминаем. Лучше не на запуске, а при увеличении значения OrdersTotal() и флаг поставить, чтобы больше не выполнять этот цикл, а то эксперт может сработать по первому тику, а список ордеров еще не загрузился (наверно). ... Однако очевидно, что работа ведется одним ордером - в тестере цикл с одним повторением - такая большая потеря времени)). А в реальном времени быстродействие вообще не проблема.

 
Integer, спасибо за ответ.

Однако очевидно, что работа ведется одним ордером - в тестере цикл с одним повторением - такая большая потеря времени)). А в реальном времени быстродействие вообще не проблема.


Ну не так и очевидно :) Система многоордерная, или как это правильно сформулировать.

А по быстродействию. Это просто дело привычки - С++, знаете ли, прививает желание все соптимизировать :)
 
johngull:
Всегда ведь хочется сократить время выполнения.
Солидней, как мне кажется, было бы что-то в духе IsOrderOpenedbyMagic(magic_code).
А если ордер установлен с руки (без магика)? Без учёта не обойтись. По-моему, программа без блока учёта ордеров может быть полезна только для оптимизации при тестировани стратегии (т.е. когда речь не о программе и использовании её на реальном счёте в режиме реального времени), с целью оптимизации алгорима для ускорения.
 
SK. писал (а):
А если ордер установлен с руки (без магика)? Без учёта не обойтись. По-моему, программа без блока учёта ордеров может быть полезна только для оптимизации при тестировани стратегии (т.е. когда речь не о программе и использовании её на реальном счёте в режиме реального времени), с целью оптимизации алгорима для ускорения.
Это я просто плохо объяснил, уж простите :)
Цель именно обрабатывать лишь свои ордеры. Просто у меня была идея обращатся к ордерам по своей индексации, но это уже не важно.
Теперь я понял что в рамках MQL это и не возможно, да и не нужно :)

Всем спасибо за советы.
 
Integer писал (а):
Лучше не на запуске, а при увеличении значения OrdersTotal()
Вы, наверно, хотели сказать "при изменении"? Но даже такая трактовка Вашего предложения не поймает ситуацию одновременного открытия и закрытия позиции. Значение OrdersTotal() не изменилось, а "рокировка" позиций произошла.
 
johngull писал (а):
Солидней, как мне кажется, было бы что-то в духе IsOrderOpenedbyMagic(magic_code).
Это из области мечт... Реалии другие...
 
KimIV:
Integer писал (а):
Лучше не на запуске, а при увеличении значения OrdersTotal()
Вы, наверно, хотели сказать "при изменении"? Но даже такая трактовка Вашего предложения не поймает ситуацию одновременного открытия и закрытия позиции. Значение OrdersTotal() не изменилось, а "рокировка" позиций произошла.

Я имел в виду пользовательскую переменную PrevOrdersTotal, и если вдруг OrdersTotal()>PrevOrdersTotal, значит есть доступ к списку ордеров. Это для отслеживания того, что список открытх ордеров загрузился на запуске терминала.
Причина обращения: