Событие закрытия позиции по тейку

 

Добрый вечер. Как отследить событие закрытия рыночной позиции по тейку? Только не просто сработка тейка, а уточнение какой тип позиции закрылся (покупка или продажа).

Я пользуюсь своими классами для написания кода. В общем, прилагаю метод из своего класса, чтобы пояснить что у меня написано:

//=======================================================================================================================================================================================================
// Возвращает true, если позиция согласно данных в реализованной сделке закрылась по Take-Profit, иначе false. ==========================================================================================
   bool Event :: isPositionAcquireTP(const MqlTradeTransaction& transaction,    // Транзакция
                                     const SymbolInstance *ptrSymbol,           // Указатель на класс свойств торгового инструмента
                                     const ulong magic) {                       // Magic number позиции
//---
  if (transaction.type == TRADE_TRANSACTION_DEAL_ADD) {
    if (!historyDeals.choiceDealPrimary(ptrSymbol.getName(), magic, transaction.deal))
      return false;
    if (historyDeals.selectedHistoryDealEntry(transaction.deal) == DEAL_ENTRY_OUT) {
      if (historyDeals.selectedHistoryDealReason(transaction.deal) == DEAL_REASON_TP)
        return true;
    }
  }
//---
  return false;
}

По сути, реализацию choiceDealPrimary() можно не смотреть. Он лишь отсеивает "НЕ СВОИ" позиции.

Остальное и так понятно для тех, кто видит с чем я сравниваю.

Если его вызвать в OnTradeTransaction() вот так:

  if (prEvent.isPositionAcquireTP(transaction, sym, g_magic)) {
}

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

Как узнать позиция какого типа закрыта по тейку в событии?

 
Viktar Dzemikhau:

Добрый вечер. Как отследить событие закрытия рыночной позиции по тейку? Только не просто сработка тейка, а уточнение какой тип позиции закрылся (покупка или продажа).

Я пользуюсь своими классами для написания кода. В общем, прилагаю метод из своего класса, чтобы пояснить что у меня написано:

По сути, реализацию choiceDealPrimary() можно не смотреть. Он лишь отсеивает "НЕ СВОИ" позиции.

Остальное и так понятно для тех, кто видит с чем я сравниваю.

Если его вызвать в OnTradeTransaction() вот так:

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

Как узнать позиция какого типа закрыта по тейку в событии?

Так ведь позиция BUY всегда закрывается сделкой SELL хоть по тейку, хоть по стопу или руками закрыта…

 
Alexey Viktorov #:

Так ведь позиция BUY всегда закрывается сделкой SELL хоть по тейку, хоть по стопу или руками закрыта…

Я понимаю нужно задать условия вот такие?

    if (transaction.deal_type == DEAL_TYPE_BUY) {
    // ЗАКРЫЛАСЬ SELL-ПОЗИЦИЯ
    } else if (transaction.deal_type == DEAL_TYPE_SELL) {
    // ЗАКРЫЛАСЬ BUY-ПОЗИЦИЯ
    }
 
Viktar Dzemikhau #:

Я понимаю нужно задать условия вот такие?

А почему так неуверенно?

 
Alexey Viktorov #:

А почему так неуверенно?

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

 
Viktar Dzemikhau #:

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

Так их всего две, на север и на йух. Если закрывающая BUY значит закрываемая SELL и наоборот. Других вариантов нет.

Отложенный ордер не закрывается, а удаляется. Это другой тип транзакции.

 
Alexey Viktorov #:

Отложенный ордер не закрывается, а удаляется. Это другой тип транзакции.

Согласен. Я это всё прекрасно понимаю, но корни со времён 4-ки ещё где-то внутри имеются..))

 

Я бы, например, для начала, собрал бы все открытые позиции в структуру или в массив.

И сравнивая количество записей в структуре/массиве со списком открытых позиций в терминале, нашел бы все необходимое, и не только ответ на вопрос ветки, не заморачиваясь стандартными функциями.

 
Viktar Dzemikhau #:

Согласен. Я это всё прекрасно понимаю, но корни со времён 4-ки ещё где-то внутри имеются..))

Тогда я не знаю чем помочь… Как-то надо выплюнуть всё что мешает освоению MQL5

 
Renat Akhtyamov #:

Я бы, например, для начала, собрал бы все открытые позиции в структуру или в массив.

И сравнивая количество записей в структуре/массиве со списком открытых позиций в терминале, нашел бы все необходимое, и не только ответ на вопрос ветки, не заморачиваясь стандартными функциями.

Ренат, это самый плохой вариант. Если в mql4 есть только ордер и его тикет по которому в истории можно найти всё что надо, то в mql5 есть ордер открывающий позицию, сделка открывающая позицию, сама позиция, ордер закрывающий и сделка закрывающая. Позиции в истории нет. Ни тикета её нет, ни цены, ни времени. И что даст изменение количества открытых позиций? Только головную боль и гемор…

 
Alexey Viktorov #:

Ренат, это самый плохой вариант. Если в mql4 есть только ордер и его тикет по которому в истории можно найти всё что надо, то в mql5 есть ордер открывающий позицию, сделка открывающая позицию, сама позиция, ордер закрывающий и сделка закрывающая. Позиции в истории нет. Ни тикета её нет, ни цены, ни времени. И что даст изменение количества открытых позиций? Только головную боль и гемор…

вот епт... беда, реально

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