Контроль ордеров

 
Подскажите пожалуйста: вот есть идея создать систему с отложенными ордерами на mql5, и как сделать чтобы советник отслеживал превращение отложенного ордера в реальный, а потом и его закрытие? С помощью теста было установлено, что при смене отложенного ордера на реальный тикет меняется
 

Либо, как в MT4, либо на событийной модели.

Murat Ishakov:
при смене отложенного ордера на реальный тикет меняется

Только на неттинге.

 
fxsaber:

Либо, как в MT4, либо на событийной модели.

Только на неттинге.

А что такое неттинг?
 
Murat Ishakov:
А что такое неттинг?

Это на МТ5, одна совокупная позиция на инструменте, нет отдельных ордеров, как в МТ4 или хеджинге на МТ5

 
Murat Ishakov:
Подскажите пожалуйста: вот есть идея создать систему с отложенными ордерами на mql5, и как сделать чтобы советник отслеживал превращение отложенного ордера в реальный, а потом и его закрытие? С помощью теста было установлено, что при смене отложенного ордера на реальный тикет меняется

Когда отложенный ордер срабатывает - появляется позиция. Этот момент (появление позиции) отслеживается в OnTradeTransaction:

ловим транцакцию с типом TRADE_TRANSACTION_DEAL_ADD

смотрим на направление сделки, которая породила транзакцию (ENUM_DEAL_ENTRY) - отлавливаем вход


Всё. Момент появления позиции мы словили. То есть используется событийная модель и в таком случае не нужны никакие таймеры.
 

Лично я - просто считаю количество отложенных ордеров вначале каждого бара.

Если стало меньше - стало быть, либо ордер сработал, либо его кто-то снял.

 
George Merts:

Лично я - просто считаю количество отложенных ордеров вначале каждого бара.

Если стало меньше - стало быть, либо ордер сработал, либо его кто-то снял.

Частичное исполнение так не поймать.

 

Ловить появление новой сделки в истории сделок.

 
Murat Ishakov:
Подскажите пожалуйста: вот есть идея создать систему с отложенными ордерами на mql5, и как сделать чтобы советник отслеживал превращение отложенного ордера в реальный, а потом и его закрытие? С помощью теста было установлено, что при смене отложенного ордера на реальный тикет меняется


//------  
void OnTrade()
   {
   //определение сработки стопа или профита

      //--- select history for access
      HistorySelect(0,TimeCurrent());
      //---
      int    orders=HistoryDealsTotal();  // total history deals
      ulong ticket=HistoryDealGetTicket(orders-1);        
      double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT); //--- check profit
         if(profit<0.0)//если закрылась по стопу
           {
           
           }
         if(profit>=0.0)//если закрылась по профиту
           {
           
           }
   }
Использую такой способ проверки закрытия позиции, но это для  биржевого(неттингово) счета, проверяется факт закрытия счета и какой результат.
Можно переделать и для проверки открытия позиции, хотя для биржевого хватает и 
void OnTick()
  {
   
    if(PositionSelect(_Symbol))
      {
       
      }
   }
 
0Aleksandr0:


Использую такой способ проверки закрытия позиции, но это для  биржевого(неттингово) счета, проверяется факт закрытия счета и какой результат.
Можно переделать и для проверки открытия позиции, хотя для биржевого хватает и 

Для определния сработал ли stop loss или take profit с недавних пор существует замечательное перечисление ENUM_DEAL_REASON

Идентификатор

Описание

DEAL_REASON_CLIENT

Сделка проведена в результате срабатывания ордера, выставленного из десктопного терминала

DEAL_REASON_MOBILE

Сделка проведена в результате срабатывания ордера, выставленного из мобильного приложения

DEAL_REASON_WEB

Сделка проведена в результате срабатывания ордера, выставленного из веб-платформы

DEAL_REASON_EXPERT

Сделка проведена в результате срабатывания ордера, выставленного из MQL5-программы – советником или скриптом

DEAL_REASON_SL

Сделка проведена в результате срабатывания ордера Stop Loss

DEAL_REASON_TP

Сделка проведена в результате срабатывания ордера Take Profit

DEAL_REASON_SO

Сделка проведена в результате наступления события Stop Out

DEAL_REASON_ROLLOVER

Сделка проведена по причине переноса позиции

DEAL_REASON_VMARGIN

Сделка проведена по причине начисления/списания вариационной маржи

DEAL_REASON_SPLIT

Сделка проведена по причине сплита (понижения цены) инструмента, по которому имелась позиция на момент проведения сплита

 

Хорошее перечисление)
Не знал даже, спасибо.
Этот код пару лет назад где то "дернул", так и пользуюсь без изменений, в нового советника добавлю потом, в работающий сов не полезу править, лучшее враг хорошего)

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