Как в языке MQL4 определить тикет ордера, который возникает в результате закрытия встречных ордеров функцией OrderCloseBy() ?
Вопрос сформулирован в сабже. Чтобы было понятнее - привожу пример.
Имеются два ордера:
#1: Buy, Lots = 3;
#2: Sell, Lots = 5.
Если применить функцию OrderCloseBy(#1,#2), то оба ордера #1 и #2 будут закрыты, а вместо них будет открыт ордер #3:
#3: Sell, Lots=2.
Так вот, вопрос: как внутри программы узнать тикет ордера #3 ?
В справке по MQL4 для функции OrderCloseBy() об этом ничего не сказано.
Работайте с комментарием к ордеру (OrderComment), в нем содержится тикет ордера оставшегося после закрытия по OrderCloseBy().
А OrderTicket() не работает для него?
Новый ордер появляется немедленно, после этой операции,
а потому из существующих ордеров выбирайте ордер с наибольшим тикетом,
это и будет тот самый ордер, появившийся после этой опреации...
т.е. выбираете из существующих ордеров ордер с максимальным OrderTicket() ...
Таки да, OrderCloseBy() написана криворуко - по логике функция должна возвращать тикет так же как и OrderSend()...
А OrderTicket() не работает для него?
перед использованием OrderTicket() надо выбрать ордер с помощью функции ОрдерСелект(). Для этого хорошо бы тикет иметь
int CheckTiket() { int l_Tiket = 0; datetime l_ticket_1 = 0; datetime l_ticket_2 = 0; if (OrdersHistoryTotal() == 0) return (0); else{ for (int l_pos = OrdersHistoryTotal(); l_pos >= 0; l_pos --) { if (OrderSelect(l_pos, SELECT_BY_POS, MODE_HISTORY)==false)continue; if (OrderSymbol() == Symbol()) { l_ticket_1 = OrderOpenTime(); if (l_ticket_1 > l_ticket_2) { l_ticket_2 = l_ticket_1; l_Tiket = OrderTicket(); } } } } return (l_Tiket); }
это поиск последнего в истории ордера по времени с возвратом его тикета...
на основе этого можно найти ордер по OrderType() OrderLots() OrderProfit() OrderCommission() OrderSwap() и так далее ... удачи ....
- www.metatrader5.com
это поиск последнего в истории ордера по времени с возвратом его тикета...
на основе этого можно найти ордер по OrderType() OrderLots() OrderProfit() OrderCommission() OrderSwap() и так далее ... удачи ....
ага, только вот тут что-то не так:
l_ticket_1 = OrderOpenTime();
ага, только вот тут что-то не так:
это у тебя в стране что то не так ... а это работает ....
это у тебя в стране что то не так ... а это работает ....
ну и что же не так?
время открытия у ордера #3 будет то же, что и у ордера #2 - ведь это его часть.
Поэтому лучше проверять OrderComment() - там будет текст: from # 1 Хотя ожидал увидеть from # 2 - ведь это его часть.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вопрос сформулирован в сабже. Чтобы было понятнее - привожу пример.
Имеются два ордера:
#1: Buy, Lots = 3;
#2: Sell, Lots = 5.
Если применить функцию OrderCloseBy(#1,#2), то оба ордера #1 и #2 будут закрыты, а вместо них будет открыт ордер #3:
#3: Sell, Lots=2.
Так вот, вопрос: как внутри программы узнать тикет ордера #3 ?
В справке по MQL4 для функции OrderCloseBy() об этом ничего не сказано.