CHistoryPositionInfo Class – library MetaTrader 5

CHistoryPositionInfo class provides an easy access to the closed position properties.

The class has a similar interface to CPositionInfo class of the standard library.

class CHistoryPositionInfo : public CObject
  {
public:
                     CHistoryPositionInfo(void);
                    ~CHistoryPositionInfo(void);
   //--- methods of access to protected data
   ulong             Ticket(void)           const { return(m_curr_ticket); }
   //--- fast access methods to the integer position properties
   datetime          TimeOpen(void);
   ulong             TimeOpenMsc(void);
   datetime          TimeClose(void);
   ulong             TimeCloseMsc(void);
   ENUM_POSITION_TYPE PositionType(void);
   string            TypeDescription(void);
   long              Magic(void);
   long              Identifier(void);
   ENUM_DEAL_REASON  OpenReason(void);
   ENUM_DEAL_REASON  CloseReason(void);
   //--- fast access methods to the double position properties
   double            Volume(void);
   double            PriceOpen(void);
   double            StopLoss(void) const;
   double            TakeProfit(void) const;
   double            PriceClose(void);
   double            Commission(void);
   double            Swap(void);
   double            Profit(void);
   //--- fast access methods to the string position properties
   string            Symbol(void);
   string            OpenComment(void);
   string            CloseComment(void);
   string            OpenReasonDescription(void);
   string            CloseReasonDescription(void);
   string            DealTickets(const string separator = " ");
   //--- info methods
   string            FormatType(string &str,const uint type) const;
   string            FormatReason(string &str,const uint reason) const;
   //--- methods for select position
   bool              HistorySelect(datetime from_date,datetime to_date);
   int               PositionsTotal(void) const;
   bool              SelectByTicket(const ulong ticket);
   bool              SelectByIndex(const int index);
  };

Here is a sample code showing how to use the class in your code

Alternative:  Complex Common - indicator MetaTrader 4
#include <CHistoryPositionInfo.mqh>
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- variable to hold the history position info
   CHistoryPositionInfo hist_position;

//--- Retrieve the history of closed positions for the specified period
   if(!hist_position.HistorySelect(0,TimeCurrent()))
     {
      Alert("CHistoryPositionInfo::HistorySelect() failed!");
      return;
     }

//--- now process the list of closed positions
   int total = hist_position.PositionsTotal();
   for(int i = 0; i < total; i++)
     {
      //--- Select a closed position by its index in the list
      if(hist_position.SelectByIndex(i))
        {
         ulong    ticket            = hist_position.Ticket();
         datetime time_open         = hist_position.TimeOpen();
         ulong    time_open_msc     = hist_position.TimeOpenMsc();
         datetime time_close        = hist_position.TimeClose();
         ulong    time_close_msc    = hist_position.TimeCloseMsc();
         long     type              = hist_position.PositionType();
         string   type_desc         = hist_position.TypeDescription();
         long     magic             = hist_position.Magic();
         long     pos_id            = hist_position.Identifier();
         double   volume            = hist_position.Volume();
         double   price_open        = hist_position.PriceOpen();
         double   price_sl          = hist_position.StopLoss();
         double   price_tp          = hist_position.TakeProfit();
         double   price_close       = hist_position.PriceClose();
         double   commission        = hist_position.Commission();
         double   swap              = hist_position.Swap();
         double   profit            = hist_position.Profit();
         string   symbol            = hist_position.Symbol();
         string   open_comment      = hist_position.OpenComment();
         string   close_comment     = hist_position.CloseComment();
         string   open_reason_desc  = hist_position.OpenReasonDescription();
         string   close_reason_desc = hist_position.CloseReasonDescription();
         string   deal_tickets      = hist_position.DealTickets(",");
         //---
         int      deals_count       = HistoryDealsTotal();   // of the selected position
         int      orders_count      = HistoryOrdersTotal();  // of the selected position
        }
     }
//---
   Print("Total closed positions = ",hist_position.PositionsTotal());
  }
//+------------------------------------------------------------------+

Note: when using the methods HistorySelect() and SelectByIndex(), the list of positions is ordered by time of closing (not by the opening times).

This means the history of closed positions (data rows) is ordered by Close Time to help calculate the running  Balance, correctly.

Alternative:  cluser indicator CC and CCFp updated - indicator MetaTrader 4

📈 ROBOTFX MetaTrader Expert Advisors and Indicators to maximize profits and minimize the risks