В mql4 не работает MODE_HISTORY и MODE_TRADES при выборе флага SELECT_BY_TICKET - страница 2

 
Sergey Gritsay:

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

Строки:

 if(StringFind(OrderComment(),"sl")>=0)return(1);
 if(StringFind(OrderComment(),"tp")>=0)return(2);

если только в качестве примера. У меня бывают комментарии:

[sl] from #146875821

[tp] from #146941877


И было бы логично следующее:

OrderSelect(tiket,SELECT_BY_TICKET)               // тикет выбирается везде
OrderSelect(tiket,SELECT_BY_TICKET, MODE_HISTORY) // тикет выбирается только на истории
OrderSelect(tiket,SELECT_BY_TICKET, MODE_TRADES)  // тикет выбирается среди открытых и отложенных ордеров
 
Oksana Berenko:

Строки:

если только в качестве примера. У меня бывают комментарии:

[sl] from #146875821

[tp] from #146941877

И в вашем комментарии будут найдены подстроки "sl" и "tp", а значит и определится как они закрыты - по стопу или по тейку. Ведь StringFind() ищет вхождение, и возвращает номер позиции в строке, с которой начинается искомая подстрока, либо -1, если подстрока не найдена.
 
Artyom Trishkin:
И в вашем комментарии будут найдены подстроки "sl" и "tp", а значит и определится как они закрыты - по стопу или по тейку. Ведь StringFind() ищет вхождение, и возвращает номер позиции в строке, с которой начинается искомая подстрока, либо -1, если подстрока не найдена.
Точно! не обратила внимание на StringFind
 
Oksana Berenko:



И было бы логично следующее:

может быть пример приведете, как это использовать можно тогда
 
Sergey Gritsay:
может быть пример приведете, как это использовать можно тогда

Сейчас приведу примеры на вот эти гипотетические три случая, если бы они работали:

OrderSelect(tiket,SELECT_BY_TICKET)               // тикет выбирается везде
OrderSelect(tiket,SELECT_BY_TICKET, MODE_HISTORY) // тикет выбирается только на истории
OrderSelect(tiket,SELECT_BY_TICKET, MODE_TRADES)  // тикет выбирается среди открытых и отложенных ордеров

1) Была как то пол года назад задача, просто проверить, а существовал/существует ордер, который во входящие переменные вбил пользователь. Здесь подойдет:

OrderSelect(tiket,SELECT_BY_TICKET)

2) Если конкретный ордер уже попал в историю, неважно по какой причине, то советник поступает так то... Здесь подошло бы:

OrderSelect(tiket,SELECT_BY_TICKET, MODE_HISTORY)

И как-то мне надо было просто по тикету понять, сохранилась ли история по данному ордеру, или её брокер уже стёр.

3) Недавно стояла задача: у меня стоит отложенный ордер (тикет 2), и стоять он должен до тех пор, пока или не сработает, или пока есть другой открытый ордер (sell/buy) в рынке, тикет которого мы знаем (тикет 1). Если тикет 1 закрылся по любой причине, то тикет 2 надо удалить.

Если бы MODE_TRADES работал бы, то проверка тикета 1 ограничилась бы:

OrderSelect(tiket,SELECT_BY_TICKET, MODE_TRADES)

~~~

Конечно, я все задачи решила и без MODE_HISTORY/MODE_TRADES. К примеру:

if(OrderSelect(tiket,SELECT_BY_TICKET)) {
  if(OrderCloseTime()>0) {}
}
Просто описываю, что могло бы быть логичнее. Программирование же строится на логике!
Причина обращения: