Можно ли обойтись без цикла подсчета / пересчета ордеров имея оригинальные тикеты ордеров? - страница 4

 
Valeriy Yastremskiy:

Вроде о том же и написал. Копирует в окружение терминала пользователя (вопрос откуда). А прямого доступа к полям, откуда копирует, нет. Так же нет штатных полей времени изменения параметров по ходу жизни ордера, только начало и конец жизни ордера. Если бы это можно было прочитать в доках жизнь была бы легче.))))

Я цитату из доков привел)))

 
Artyom Trishkin:

Как это нет аргументов? Я их давно написал, и они работают. Описал, разжевал и выложил.

На личности не перехожу - задаюсь вопросом для чего обязательно оспаривать сказанное.

Код был полезен. Ваши решения - респект, но без данных обсуждений достаточной оценки правильности решений не получается.

Оспаривания не было, (другое решение не есть оспаривание), так как нет единого решения.  

В любом раскладе / кластеризации спасибо всем))))))))

 
Valeriy Yastremskiy:

Я правильно понял  OrderCloseTime()!=0 для отложенных ордеров тоже работает? Этого нет в документации.

Да вот как раз в документации (не смог найти где точно, но сам брал этот подход оттуда) приводится такой код для определения факта нахождения ордера среди рабочих:

if (OrderSelect(nTicket, SELECT_BY_TICKET) && OrderCloseTime() == 0)
{
 // Ордер в пуле рабочих ордеров
}

Это решение понятно. Вопрос в другом. Как имея тикет и структура ордера заполнена по этому тикету узнать состояние ордера? Вернее тогда что можно узнать, а что нельзя узнать. В документации не нашел.

Не понял. Какое именно состояние интересует?

И повторюсь)

Так правильно, с флагом по тикету или ошибка будет? В документации написано что зона выбора рыночные / исторические ордера указывается только для флага по номеру.

При выборе по тикету третий аргумент игнорируется. Ошибки не будет.

Закроется ордер через час или нет? В доках не нашел.

Не закроется. Будет отменен и перемещен в историю счета. Но не факт, что конкретный ДЦ поддерживает время истечения. Я натыкался на такие ДЦ.

 
Artyom Trishkin:
 

Ой, прошу пардону ))) Просто уже неоднократно просил сделать пометки в рассылке к какому разделу форума относится конкретная тема. В идеале, чтобы рассылкой можно было бы управлять.

Тем не менее, было бы не плохо.

 
Vladimir Simakov:

Я цитату из доков привел)))

Вообще могу только предположить конечно что структуры ордеров где то хранятся. и то что к ним нет штатного доступа по полям, а только по копированию структуры в терминал пользователя через селект ордера...

Вроде соответствует цитате из доков.))))

 
Ihor Herasko:

Да вот как раз в документации (не смог найти где точно, но сам брал этот подход оттуда) приводится такой код для определения факта нахождения ордера среди рабочих:

Не понял. Какое именно состояние интересует?

При выборе по тикету третий аргумент игнорируется. Ошибки не будет.

Не закроется. Будет отменен и перемещен в историю счета. Но не факт, что конкретный ДЦ поддерживает время истечения. Я натыкался на такие ДЦ.

Понял.

все понятно, кроме как есть ли поле в структуре ордера Время когда ордер сменил тип с отложенного на рыночный.

Ошибки не будет и если тикет есть то будет Истина всегда? 

Странно что этого нет в доках. Что значит отменен? Рыночный ордер можно только закрыть вроде. Если ДЦ не поддерживает время истечения рыночного ордера то должна существовать проверка на возможность применения параметра. Компиляция в маркете поздна)))

 
Valeriy Yastremskiy:

Понял.

все понятно, кроме как есть ли поле в структуре ордера Время когда ордер сменил тип с отложенного на рыночный.

Тикет у ордера остается на все время его жизни. Выбрать ордер по тикету и запросить тип. 

Ошибки не будет и если тикет есть то будет Истина всегда? 

Если ордер есть хоть в каком-то пуле, то OrderSelect вернет true. Но в МТ4 есть одна неприятная фича. Если пользователь настроил отображение истории не "Вся история", а за какой-то период, то и программный доступ будет  только к видимой пользователю истории. То есть ордер когда-то существовал, но обращение к нему приведет к false.

Странно что этого нет в доках. Что значит отменен?

Отложенный ордер отменяется (cancel) или удаляется (delete). В разных источниках можно встретить обе формулировки.

Рыночный ордер можно только закрыть вроде. Если ДЦ не поддерживает время истечения рыночного ордера то должна существовать проверка на возможность применения параметра. Компиляция в маркете поздна)))

К сожалению, нет такой проверки (и еще много, каких нет; например, нельзя узнать, разрешено ли встречное закрытие). Это можно узнать только по коду ошибки после выполнения OrderSend().

 
Ihor Herasko:

Тикет у ордера остается на все время его жизни. Выбрать ордер по тикету и запросить тип. 


Вопрос про время смены типа с отложенного на рыночный. Есть ли поле этого времени в структуре параметров ордера. 

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

 
Valeriy Yastremskiy:

Вопрос про время смены типа с отложенного на рыночный. Есть ли поле этого времени в структуре параметров ордера.

нет таких данных

все, что есть это:

- предыдущий тик и тип ордера OP_BUYLIMIT и на текущем тике тип ордера стал OP_BUY - открылся ордер

- предыдущий тик и тип ордера OP_BUYLIMIT и OrderCloseTime() > 0 - удалили отложенный ордер, он теперь в истории ордеров


видимо для этой цели и сделан OrderSelect(ticket, SELECT_BY_TICKET ) с доступом в общий пул ордеров, чтобы удобнее было сделать OrderSelect() и сразу же проверить тип и время закрытия ордера


не бойтесь циклов с OrderSelect() и решайте свою задачу, нет там потери производительности, а вот "головную боль" Вы сами себе нажили

задача, скорее у Вас в другом - как между тиками состояние ордеров передавать - тогда нужно со структурами, классами или списками уметь хоть немного работать https://www.mql5.com/ru/docs/standardlibrary/datastructures

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

 
Valeriy Yastremskiy:

Я правильно понял  OrderCloseTime()!=0 для отложенных ордеров тоже работает? Этого нет в документации.

...

Не ищите в истории отложенные ордера, их там нет.