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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Fedor Kokhanov
362
Fedor Kokhanov  

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

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

Alexey Volchanskiy
30055
Alexey Volchanskiy  
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;
    }
Fedor Kokhanov
362
Fedor Kokhanov  
Если открыта поза и срабатывает стол-лосс, это значит сработал лимитный ордер выставленный по цене стопа?
Ihor Herasko
25933
Ihor Herasko  
mfedora:
Если открыта поза и срабатывает стол-лосс, это значит сработал лимитный ордер выставленный по цене стопа?

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

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

Yuriy Zaytsev
18189
Yuriy Zaytsev  
mfedora:

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

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

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

OnTrade()

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

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

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


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

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

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

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

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

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

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

...
724
...  
я правильно понял, за 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
                );
            }
        }
    }
}
Alexander Bereznyak
29801
Alexander Bereznyak  
"[sl]" или "[tp]" это в МТ4, в МТ5 "sl" или "tp"
Evgeny Belyaev
129793
Evgeny Belyaev  
Dmytro Zelenskyy:

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

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

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

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

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

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

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий