PositionSelectByTicket

 
Подходит ли эта функция для проверки закрыт ли ордер?
 
Алексей Ал:
Подходит ли эта функция для проверки закрыт ли ордер?

Это не самый лучший вариант. Даже самый плохой вариант. Изучите работу 

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)

там можете получить не только факт закрытия позиции, но и причину. По стопу, по тейку или советником, или руками… И много чего ещё полезного…

 
Alexey Viktorov #:

Это не самый лучший вариант. Даже самый плохой вариант. Изучите работу 

там можете получить не только факт закрытия позиции, но и причину. По стопу, по тейку или советником, или руками… И много чего ещё полезного…

if(trans.type==TRADE_TRANSACTION_ORDER_DELETE)

Пойдёт?

 
Алексей Ал #:

if(trans.type==TRADE_TRANSACTION_ORDER_DELETE)

Пойдёт?

Нет. TRADE_TRANSACTION_ORDER_DELETE срабатывает во многих случаях.

Пример реакции на SL/TP:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

DEAL_REASON_TP

Edgar Akhmadeev, 2024.11.12 23:02

Я Вам советовал поработать с отладчиком внутри OnTradeTransaction. Узнали бы наглядно последовательность процессов.

        if (trans.type == TRADE_TRANSACTION_DEAL_ADD && trans.order_state == ORDER_STATE_STARTED) {
                HistoryDealSelect(trans.deal);
                ENUM_DEAL_ENTRY entry = (ENUM_DEAL_ENTRY)HistoryDealGetInteger(trans.deal, DEAL_ENTRY);
                ENUM_DEAL_REASON reason = (ENUM_DEAL_REASON)HistoryDealGetInteger(trans.deal, DEAL_REASON);
                if (entry == DEAL_ENTRY_OUT && (reason == DEAL_REASON_SL || reason == DEAL_REASON_TP)) {
                        // Closed on SL/TP
                }
        }

 
Алексей Ал #:

if(trans.type==TRADE_TRANSACTION_ORDER_DELETE)

Пойдёт?

Я предложил изучить самостоятельно. А вы даже начальных знаний не получили… Вы даже не понимаете разницы между ордером и позицией.