Netting MT5, как отловить момент закрытия по стоп лосс. - страница 2

 
Andrey Barinov:

А Вы первый пост ветки читали?

Хорошо. Я чуток невнимательно прочёл в первый раз. А вы сколько раз невнимательно прочли? Где там о разнонаправленных ордерах говорится?

По сути ответ был дан сразу самый правильный. Всё это отлавливается при обработке события OnTradeTransaction() где в случае закрытия позиции по стопу и активация отложенного ордера будут разделены, даже если произошли эти события одновременно.

А тот факт что vvebus совсем не разобрался с возможностями OnTradeTransaction() очевидны.

 
Alexey Viktorov:

Хорошо. Я чуток невнимательно прочёл в первый раз. А вы сколько раз невнимательно прочли? Где там о разнонаправленных ордерах говорится?

Не важно однонаправлены они или разнонаправлены.

Если по логике они исполняются на одном тике, как описано в первом посте, то порядок исполнения не гарантирован. Значит отложка может сработать раньше чем стоп и это приведет к нежелательным последствиям. 

Ваши извинения приняты.

 
Andrey Barinov:

Не важно однонаправлены они или разнонаправлены.

Если по логике они исполняются на одном тике, как описано в первом посте, то порядок исполнения не гарантирован. Значит отложка может сработать раньше чем стоп и это приведет к нежелательным последствиям. 

Ваши извинения приняты.

Как это не важно? Если однонаправленные, то размер позиции увеличится, в противном случае уменьшится вплоть до нуля и даже до изменения направления.

Только вот я никогда не проверял как будет отработан стоплосс на неттинге, если стоп установлен тогда когда размер позиции был, путь 0.1 а в момент срабатывания стопа размер позиции стал 0.2, 0.5 или ещё больше. Закроется вся позиция или только начальный размер, тот размер лота который был в момент установки стоплосса?

Вот для предотвращения таких непонятных случаев на счетах netting, я-бы предпочёл ставить вместо стопов, ордера противоположной направленности.

Я и не собирался извиняться.

 
Alexey Viktorov:

Хорошо. Я чуток невнимательно прочёл в первый раз. А вы сколько раз невнимательно прочли? Где там о разнонаправленных ордерах говорится?

По сути ответ был дан сразу самый правильный. Всё это отлавливается при обработке события OnTradeTransaction() где в случае закрытия позиции по стопу и активация отложенного ордера будут разделены, даже если произошли эти события одновременно.

Да, я не упоминал разнонаправленные ордера, но они есть.. Но не суть.

Alexey Viktorov:

А тот факт что vvebus совсем не разобрался с возможностями OnTradeTransaction() очевидны. 

Может намекнете как по этому событию решить мой вопрос (проверка закрылась ли позиция, причина не важна)? 

Все сведется к ENUM_DEAL_ENTRY?

 
vvebus:

Да, я не упоминал разнонаправленные ордера, но они есть.. Но не суть.

Может намекнете как по этому событию решить мой вопрос (проверка закрылась ли позиция, причина не важна)? 

Все сведется к ENUM_DEAL_ENTRY?

Закрытие ордера - не событие. Происходит не на стороне MQL, а на сервере. MQL не видит. 

 
Почему никто не понимает, что с возрастом наивность переходит в глупость? 
 
vvebus:

технически позиция осталась открытой - но закрытие по SL было и я пока не могу понять как в этом случае отловить это закрытие.

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

Вопросы от начинающих MQL5 MT5 MetaTrader 5

fxsaber, 2018.08.02 17:09

#include <MT4Orders.mqh>      // https://www.mql5.com/ru/code/16006

void OnTrade()
{
  static int PrevTotal = OrdersHistoryTotal();
  const int Total = OrdersHistoryTotal();
  
  for (int i = Total - 1; i >= PrevTotal; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderCloseReason() == DEAL_REASON_SL))
      Alert("Stop!");
    
  PrevTotal = Total;
}


Либо

void OnTradeTransaction( const MqlTradeTransaction &Trans, const MqlTradeRequest&, const MqlTradeResult& )
{
  if (HistoryDealSelect(Trans.deal) && (HistoryDealGetInteger(Trans.deal, DEAL_REASON) == DEAL_REASON_SL))
    Alert("Stop2!");
}
 
vvebus:

Да, я не упоминал разнонаправленные ордера, но они есть.. Но не суть.

Может намекнете как по этому событию решить мой вопрос (проверка закрылась ли позиция, причина не важна)? 

Все сведется к ENUM_DEAL_ENTRY?

Начните с внимательного чтения документации. Там есть такое

Тип торговой транзакции передается в параметре type структуры MqlTradeTransaction. Возможные типы торговых транзакций описываются следующим перечислением:

ENUM_TRADE_TRANSACTION_TYPE

Прочитав таблицу этих типов, можно экспериментировать в отладчике, что ускорит понимание.

Если интересует только открытие или закрытие позиций, можно остановиться только на изучении типа TRADE_TRANSACTION_DEAL_ADD

Закрытие позиции я начинаю анализировать с того, что транзакция есть, её тип TRADE_TRANSACTION_DEAL_ADD, но позицию выбрать уже невозможно.

 if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
  {
   if(!PositionSelectByTicket(trans.position))// && PositionGetInteger(POSITION_MAGIC) == magick) && проверить символ и всё что душа пожелает
    {
     // Здесь уже надо лезть в историю и 
      if(HistoryDealSelect(trans.deal))
       {
        long hdr = HistoryDealGetInteger(trans.deal, DEAL_REASON);
         if(hdr == DEAL_REASON_SL)
          ;// Здесь действия при условии что позиция закрылась по SL
       }
    }
  }

НО! это для работы на hadge счёте и нет проверки ENUM_DEAL_ENTRY вход в рынок или выход из рынка, в моём варианте в данном конкретном советнике это не надо. Это уже самостоятельно принимайте решение, надо или нет.

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