если ордер с этим тикетом существует, то не важно где он, режимы моде надо применять для SELECT_BUY_POS
вы не поняли, зачем такое название темы давать, никакого бага нет, по тикету ордер можно достать в любом месте, модификатор не нужен
Примечание
Параметр pool игнорируется, если ордер выбирается по номеру тикета. Номер тикета является уникальным идентификатором ордера.
пс: Ну не первый раз уже в специфику документации врубаюсь.... сверху одно, снизу другое.... сейчас попробую с проверкой по тайм клозе, В любом случае спасибо!
if(OrderSelect(tiket,SELECT_BY_TICKET)) { if(StringFind(OrderComment(),"sl")>=0) { Print("Ордер закрыт по стоп лоссу"); } }
а если ордер закрылся по рынку или TakeProfit, надо определять по времени закрытия, у рыночного ордера время закрытия всегда равно нулю, а затем по необходимости
определять как ордер закрылся, а если используете отложенные ордера и их удаление, то надо проверить еще и тип ордера, может он удален
Аллилуя! Спасибо всем кто принял участие =)
Александр, Ваши комментарии учту.
if(OrderSelect(currOrder.ticket, SELECT_BY_TICKET))
{
if(OrderCloseTime()==0)
{
Alert("OPENED");
}
else
{
Alert("CLOSED");
}
}
Самый простой способ определять закрылся ордер по стоплоссу или нет проверка комментария к ордеру, анологично проверяется закрытие по тейкпрофиту
А не факт, что так будет на всех ДЦ. Я вот так определяю
// возвращает причину закрытия ордера OrderCloseReason GetOrderCloseReason(int ticket) { if (!OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY)) return crNotFound; if (OrderType() == OP_BUY) { if (OrderTakeProfit() > 0 && OrderTakeProfit() <= OrderClosePrice()) return crByTakeProfit; if (OrderStopLoss() > 0 && OrderStopLoss() >= OrderClosePrice()) return crByStopLoss; } if (OrderType() == OP_SELL) { if (OrderTakeProfit() > 0 && OrderTakeProfit() >= OrderClosePrice()) return crByTakeProfit; if (OrderStopLoss() > 0 && OrderStopLoss() <= OrderClosePrice()) return crByStopLoss; } return crUnknown; }
А не факт, что так будет на всех ДЦ. Я вот так определяю
Согласен в вами, так как на разных ДЦ в коммент добавят [sl] [SL] [tp] [TP] и ещё множество вариаций, а возможно и ни чего не добавят.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вобщем помогите определить, закрытие оредера по стоп лоссу =) но жучище на лицо!
-- Log
2016.02.14 07:40:34.014 2016.02.01 01:15 vicEA_00.04 GE30,H1: Alert: PROFIT = ACCOUNT BALANCE; CURR ORDER TICKET: 1
2016.02.14 07:40:33.981 2016.02.01 01:15 vicEA_00.04 GE30,H1: Alert: PROFIT = ACCOUNT BALANCE; CURR ORDER TICKET: 1
2016.02.14 07:40:33.981 2016.02.01 01:15 Tester: stop loss #1 at 9799.0 (9798.9 / 9799.9)
2016.02.14 07:40:33.949 2016.02.01 01:15 vicEA_00.04 GE30,H1: Alert: PROFIT = ACCOUNT BALANCE; CURR ORDER TICKET: 1
2016.02.14 07:39:37.526 2016.02.01 01:07 vicEA_00.04 GE30,H1: Alert: PROFIT = ACCOUNT BALANCE; CURR ORDER TICKET: 1
2016.02.14 07:39:37.493 2016.02.01 01:07 vicEA_00.04 GE30,H1: open #1 buy 1.00 GE30 at 9810.0 sl: 9799.0 ok
2016.02.14 07:39:37.493 2016.02.01 01:07 vicEA_00.04 GE30,H1: Alert: CLOSED PROFIT += PROFIT, ORDER TICKET: -1
2016.02.14 07:39:37.461 2016.02.01 01:07 vicEA_00.04 GE30,H1: Alert: CLOSED PROFIT += PROFIT, ORDER TICKET: -1
-- Code
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
if(OrderSelect(currOrder.ticket, SELECT_BY_TICKET, MODE_TRADES))
{
Alert("PROFIT = ACCOUNT BALANCE; CURR ORDER TICKET: "+currOrder.ticket);
}
else
{
Alert("CLOSED PROFIT += PROFIT, ORDER TICKET: "+currOrder.ticket);
}
}