найти последнюю позицию закрытую по Тейкупрофиту

 

Народ. Че та заработался. 
Надо найти последнюю позицию Закрытую по ТП. 
Где искать ? В ордерах или в сделках или еще где. 

У кого есть готовый код ? 

 

MT4-вариант не предлагаю...

Бежать с конца списка сделок и смотреть ту, что DEAL_REASON_TP.

 
fxsaber:

MT4-вариант не предлагаю...

Бежать с конца списка сделок и смотреть ту, что DEAL_REASON_TP.

DEAL_REASON_TP.

в момент сделковая вроде? в истории она есть?

 
Fast235:

DEAL_REASON_TP.

в момент сделковая вроде? в истории она есть?

Не понял вопроса.

 
fxsaber:

Не понял вопроса.

ерунда, если не мешается онтрейды в главном окне,  DEAL_REASON_TP. подойдет

 
Fast235:

ерунда, если не мешается онтрейды в главном окне,  DEAL_REASON_TP. подойдет

DEAL_REASON_TP можно поискать барабашки, сохранял его проверку скрипт, не могу найти где у себя

 
Dmitiry Ananiev:

Народ. Че та заработался. 
Надо найти последнюю позицию Закрытую по ТП. 
Где искать ? В ордерах или в сделках или еще где. 

У кого есть готовый код ? 

Пример онлайн работы (через OnTradeTransaction).

  • Ловим транзакцию 'TRADE_TRANSACTION_DEAL_ADD' (добавление сделки в историю)
  • Пытаемся найти сделку (которая породила эту транзакцию) в торговой истории
  • Если тип сделки BUY или SELL ('DEAL_TYPE_BUY' || 'DEAL_TYPE_SELL')
  • Если эта сделка - сделка выход из рынка ('DEAL_ENTRY_OUT')
  • Если эта сделка произошла в результате срабатывания Тейк профит ('DEAL_REASON_TP')
  • Получаем в торговой истории все сделки принадлежащие к позиции и распечатываем небольшую информацию по каждой сделке

//+------------------------------------------------------------------+
//|                             Last Deal Take Profit activation.mq5 |
//|                              Copyright © 2020, Vladimir Karputov |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020, Vladimir Karputov"
/*
   barabashkakvn Trading engine 3.143
*/
#include <Trade\DealInfo.mqh>
//---
CDealInfo      m_deal;                       // object of CDealInfo class
//--- input parameters
input int      Input1=9;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      ResetLastError();
      if(HistoryDealSelect(trans.deal))
         m_deal.Ticket(trans.deal);
      else
        {
         Print(__FILE__," ",__FUNCTION__,", ERROR: ","HistoryDealSelect(",trans.deal,") error: ",GetLastError());
         return;
        }
      if(m_deal.DealType()==DEAL_TYPE_BUY || m_deal.DealType()==DEAL_TYPE_SELL)
        {
         if(m_deal.Entry()==DEAL_ENTRY_OUT)
           {
            long deal_reason=-1;
            if(m_deal.InfoInteger(DEAL_REASON,deal_reason)==DEAL_REASON_TP)
              {
               long position_id=m_deal.PositionId();
               if(HistorySelectByPosition(position_id))
                 {
                  uint     total = HistoryDealsTotal();
                  ulong    ticket= 0;
                  //--- for all deals
                  for(uint i=0; i<total; i++)
                    {
                     //--- try to get deals ticket
                     if((ticket=HistoryDealGetTicket(i))>0)
                       {
                        //--- get deals properties
                        long     lng_time=HistoryDealGetInteger(ticket,DEAL_TIME);
                        datetime dat_time=(datetime)lng_time;
                        long     entry    = HistoryDealGetInteger(ticket,DEAL_ENTRY);
                        //long     type     = HistoryDealGetInteger(ticket,DEAL_TYPE);
                        double   volume   =HistoryDealGetDouble(ticket,DEAL_VOLUME);
                        double   price    = HistoryDealGetDouble(ticket,DEAL_PRICE);
                        Print(dat_time,", ",DoubleToString(price,8));
                       }
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
 

Лишнее.

Вообще, Reason-схема подходит не всегда. На том же RannForex после первого реджекта тейка логика становится совсем другой. Т.е. реализация тейка зависит от софта брокера.

 
Vladimir Karputov:

Пример онлайн работы (через OnTradeTransaction).

  • Ловим транзакцию 'TRADE_TRANSACTION_DEAL_ADD' (добавление сделки в историю)
  • Пытаемся найти сделку (которая породила эту транзакцию) в торговой истории
  • Если тип сделки BUY или SELL ('DEAL_TYPE_BUY' || 'DEAL_TYPE_SELL')
  • Если эта сделка - сделка выход из рынка ('DEAL_ENTRY_OUT')
  • Если эта сделка произошла в результате срабатывания Тейк профит ('DEAL_REASON_TP')
  • Получаем в торговой истории все сделки принадлежащие к позиции и распечатываем небольшую информацию по каждой сделке

Спасибо за пример кода. как раз то что нужно, хотя уже и решил свою проблему как отдохнул и подумал.