CPairedDealInfo is a class to reconstruct closed trades (paired in/out deals) from history sorted by close time.
The class has a similar interface to CDealInfo class of the standard library.
class CPairedDealInfo : public CObject
{
public:
CPairedDealInfo(void);
~CPairedDealInfo(void);
//--- methods of access to protected data
ulong TicketOpen(void) const { return(m_curr_ticket_in); }
ulong TicketClose(void) const { return(m_curr_ticket_out); }
//--- fast access methods to the integer deal properties
datetime TimeOpen(void) const;
ulong TimeOpenMsc(void) const;
datetime TimeClose(void) const;
ulong TimeCloseMsc(void) const;
ENUM_DEAL_TYPE DealType(void) const;
string TypeDescription(void) const;
long Magic(void) const;
long PositionId(void) const;
long OrderOpen(void) const;
long OrderClose(void) const;
ENUM_DEAL_REASON OpenReason(void) const;
ENUM_DEAL_REASON CloseReason(void) const;
//--- fast access methods to the double deal properties
double Volume(void) const;
double PriceOpen(void) const;
double StopLoss(void) const;
double TakeProfit(void) const;
double PriceClose(void) const;
double Commission(void) const;
double Swap(void) const;
double Profit(void) const;
//--- fast access methods to the string deal properties
string Symbol(void) const;
string OpenComment(void) const;
string CloseComment(void) const;
string OpenReasonDescription(void) const;
string CloseReasonDescription(void) const;
//--- info methods
string FormatAction(string &str,const uint action) const;
string FormatReason(string &str,const uint reason) const;
//--- method for select deals
bool HistorySelect(datetime from_date,datetime to_date);
int Total(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
#include <CPairedDealInfo.mqh>
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnStart()
{
//--- variable to hold the paired deals info
CPairedDealInfo trade;
//--- Reconstruct trades from the history of deals
if(!trade.HistorySelect(0,TimeCurrent()))
{
Alert("CPairedDealInfo::HistorySelect() failed!");
return;
}
//--- now process the list of closed trades
int total = trade.Total();
for(int i = 0; i < total; i++)
{
//--- Select a trade by its position in the list
if(trade.SelectByIndex(i))
{
ulong ticket_open = trade.TicketOpen();
ulong ticket_close = trade.TicketClose();
datetime time_open = trade.TimeOpen();
ulong time_open_msc = trade.TimeOpenMsc();
datetime time_close = trade.TimeClose();
ulong time_close_msc = trade.TimeCloseMsc();
long type = trade.DealType();
string type_desc = trade.TypeDescription();
long magic = trade.Magic();
long pos_id = trade.PositionId();
long order_open = trade.OrderOpen();
long order_close = trade.OrderClose();
double volume = trade.Volume();
double price_open = trade.PriceOpen();
double price_sl = trade.StopLoss();
double price_tp = trade.TakeProfit();
double price_close = trade.PriceClose();
double commission = trade.Commission();
double swap = trade.Swap();
double profit = trade.Profit();
string symbol = trade.Symbol();
string open_comment = trade.OpenComment();
string close_comment = trade.CloseComment();
string open_reason_desc = trade.OpenReasonDescription();
string close_reason_desc = trade.CloseReasonDescription();
}
}
//---
Print("Total closed trades = ",trade.Total());
}
//+------------------------------------------------------------------+