отследить закрытие ИМЕННО позиции по стоп-лоссу?

 

Хэлп, не могу найти пример кода для отслеживания закрытия позиции по стоп-лоссу.

если возможно БЕЗ Стандартных  библиотек(как-то они криво работают, с SendOrder проще)

 
mfedora:

Хэлп, не могу найти пример кода для отслеживания закрытия позиции по стоп-лоссу.

если возможно БЕЗ Стандартных  библиотек(как-то они криво работают, с SendOrder проще)

Во первых, в комментарии должно быть sl или [sl], в общем, надо такую строку поискать. 

У меня в классе управления ордерами есть вот такая функция, можно на нее ориентироваться, хотя это не гарантия закрытия по ТП или СЛ

    // возвращает причину закрытия ордера
    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;
    }
 
Если открыта поза и срабатывает стол-лосс, это значит сработал лимитный ордер выставленный по цене стопа?
 
mfedora:
Если открыта поза и срабатывает стол-лосс, это значит сработал лимитный ордер выставленный по цене стопа?

Если переводить в аналогии, как Вы пишите в этом посте, то нет - Stop Loss является именно стоповым ордером, т. к. для закрытия позиции Buy нужно открыть позицию Sell. При этом имеется в виду, что Sell появляется путем срабатывания отложенного ордера ниже текущей рыночной цены. Sell ниже текущей цены - это Sell Stop. Поэтому то ордер и стоповый. Аналогично со Stop Loss для Sell - это ордер Buy Stop.

Лимитный ордер - это аналог Take Profit. 

 
mfedora:

Хэлп, не могу найти пример кода для отслеживания закрытия позиции по стоп-лоссу.

если возможно БЕЗ Стандартных  библиотек(как-то они криво работают, с SendOrder проще)

В мт5 т е в  mql5 шикарная есть штука

OnTrade()

Вызывается именно по событию при сработках ордеров стопы тейки открытия закрытия модификации ... В общем любые торговые изменения в ордерах 
Вот в ней и надо обрабатывать события.

Судя по всему в мт4  в mql4 такое тоже могут ввести 

Ведь язык 4ки. Mql4  Плавно продвигают в сторону mql5 
 
А если надо отслеживать в mql4 то увы надо на каждом тике просто смотреть уменьшилось ли количество ордеров  по сравнению с предыдущим тиком ..  
И если да,  то запускать цикл на поиск сработавшено ордера ...  Если делать так то это будет более оптимально чем тупо на каждом тике лезть и смотреть историю 


Надо ещё обработать ситуацию если на тике один ордер закрылся а другой на этом же тике  открылся ..  С этим уже чуть сложнее..  Но тоже можно решить оптимально 
 
Alexey Volchanskiy:

Во первых, в комментарии должно быть sl или [sl], в общем, надо такую строку поискать. 

На комментарии не всегда можно надеяться ...
  Есть брокеры которые в комментарии пишут на своё усмотрение что им хочется ...
   
Т е берут и модифицируют комментарий 
 

Запоминаем тикет ордера 

И потом по тикету ордера смотрим есть ли время закрытия ордера.

(Или смотрим историю ордеров по циклу, и ищем самый новый закрытый ордер который имеет свой магик) 

Если есть, то смотрим цену закрытия, для бай ордера, если цена закрытия меньше или равна СтопЛосс то ордер закрылся по стопу.

 
я правильно понял, за 10 лет верного способа определить как закрылась позиция так и не появилась?

до сих пор, самый надежный способ - это проверять коммент на наличие [sl] / [tp] и надеяться что он там будет?

есть ли способ найти эту инфу в сделках, без написания своего собственного Метатрейдера с отслеживанием "примерного" закрытия по цене какого-то призрачного ордера в истории?

void OnTradeTransaction(
    const MqlTradeTransaction& action,
    const MqlTradeRequest& query,
    const MqlTradeResult& status)
{
    switch (action.type)
    {
        case TRADE_TRANSACTION_DEAL_ADD:
        {
            if (HistoryDealSelect(action.deal))
            {
                double volume = HistoryDealGetDouble(action.deal, DEAL_VOLUME);
                int direction = HistoryDealGetInteger(action.deal, DEAL_TYPE) == DEAL_TYPE_BUY ? 1 : -1;
                ENUM_DEAL_ENTRY deal = (ENUM_DEAL_ENTRY) HistoryDealGetInteger(action.deal, DEAL_ENTRY);

                Print(
                    "#################### : " +
                    action.deal + " : " + EnumToString(deal) + " : " + direction + " : " + volume
                );
            }
        }
    }
}
 
"[sl]" или "[tp]" это в МТ4, в МТ5 "sl" или "tp"
 
Dmytro Zelenskyy:

Запоминаем тикет ордера 

И потом по тикету ордера смотрим есть ли время закрытия ордера.

(Или смотрим историю ордеров по циклу, и ищем самый новый закрытый ордер который имеет свой магик) 

Если есть, то смотрим цену закрытия, для бай ордера, если цена закрытия меньше или равна СтопЛосс то ордер закрылся по стопу.

Не факт, стопы можно переносить. Можно перенести вверх или вниз. По коменту самый оптимальный вариант при условии что ордера скользят.

Есть правда брокеры у котрых цена закрытия, всегда равна стоп лоссу.(при закрытии по стопу) 

Причина обращения: