| //+------------------------------------------------------------------+
|
| //| DealInfo.mqh |
|
| //| Copyright 2000-2025, MetaQuotes Ltd. |
|
| //| https://www.mql5.com |
|
| //+------------------------------------------------------------------+
|
| #include <Object.mqh>
|
| //+------------------------------------------------------------------+
|
| //| Class CDealInfo. |
|
| //| Appointment: Class for access to history deal info. |
|
| //| Derives from class CObject. |
|
| //+------------------------------------------------------------------+
|
| class CDealInfo : public CObject
|
| {
|
| protected:
|
| ulong m_ticket; // ticket of history order
|
|
|
| public:
|
| CDealInfo(void);
|
| ~CDealInfo(void);
|
| //--- methods of access to protected data
|
| void Ticket(const ulong ticket) { m_ticket=ticket; }
|
| ulong Ticket(void) const { return(m_ticket); }
|
| //--- fast access methods to the integer position propertyes
|
| long Order(void) const;
|
| datetime Time(void) const;
|
| ulong TimeMsc(void) const;
|
| ENUM_DEAL_TYPE DealType(void) const;
|
| string TypeDescription(void) const;
|
| ENUM_DEAL_ENTRY Entry(void) const;
|
| string EntryDescription(void) const;
|
| long Magic(void) const;
|
| long PositionId(void) const;
|
| //--- fast access methods to the double position propertyes
|
| double Volume(void) const;
|
| double Price(void) const;
|
| double Commission(void) const;
|
| double Swap(void) const;
|
| double Profit(void) const;
|
| //--- fast access methods to the string position propertyes
|
| string Symbol(void) const;
|
| string Comment(void) const;
|
| string ExternalId(void) const;
|
| //--- access methods to the API MQL5 functions
|
| bool InfoInteger(ENUM_DEAL_PROPERTY_INTEGER prop_id,long &var) const;
|
| bool InfoDouble(ENUM_DEAL_PROPERTY_DOUBLE prop_id,double &var) const;
|
| bool InfoString(ENUM_DEAL_PROPERTY_STRING prop_id,string &var) const;
|
| //--- info methods
|
| string FormatAction(string &str,const uint action) const;
|
| string FormatEntry(string &str,const uint entry) const;
|
| string FormatDeal(string &str) const;
|
| //--- method for select deal
|
| bool SelectByIndex(const int index);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CDealInfo::CDealInfo(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CDealInfo::~CDealInfo(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_ORDER" |
|
| //+------------------------------------------------------------------+
|
| long CDealInfo::Order(void) const
|
| {
|
| return(HistoryDealGetInteger(m_ticket,DEAL_ORDER));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_TIME" |
|
| //+------------------------------------------------------------------+
|
| datetime CDealInfo::Time(void) const
|
| {
|
| return((datetime)HistoryDealGetInteger(m_ticket,DEAL_TIME));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_TIME_MSC" |
|
| //+------------------------------------------------------------------+
|
| ulong CDealInfo::TimeMsc(void) const
|
| {
|
| return(HistoryDealGetInteger(m_ticket,DEAL_TIME_MSC));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_TYPE" |
|
| //+------------------------------------------------------------------+
|
| ENUM_DEAL_TYPE CDealInfo::DealType(void) const
|
| {
|
| return((ENUM_DEAL_TYPE)HistoryDealGetInteger(m_ticket,DEAL_TYPE));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_TYPE" as string |
|
| //+------------------------------------------------------------------+
|
| string CDealInfo::TypeDescription(void) const
|
| {
|
| string str;
|
| //---
|
| switch(DealType())
|
| {
|
| case DEAL_TYPE_BUY:
|
| str="Buy type";
|
| break;
|
| case DEAL_TYPE_SELL:
|
| str="Sell type";
|
| break;
|
| case DEAL_TYPE_BALANCE:
|
| str="Balance type";
|
| break;
|
| case DEAL_TYPE_CREDIT:
|
| str="Credit type";
|
| break;
|
| case DEAL_TYPE_CHARGE:
|
| str="Charge type";
|
| break;
|
| case DEAL_TYPE_CORRECTION:
|
| str="Correction type";
|
| break;
|
| case DEAL_TYPE_BONUS:
|
| str="Bonus type";
|
| break;
|
| case DEAL_TYPE_COMMISSION:
|
| str="Commission type";
|
| break;
|
| case DEAL_TYPE_COMMISSION_DAILY:
|
| str="Daily Commission type";
|
| break;
|
| case DEAL_TYPE_COMMISSION_MONTHLY:
|
| str="Monthly Commission type";
|
| break;
|
| case DEAL_TYPE_COMMISSION_AGENT_DAILY:
|
| str="Daily Agent Commission type";
|
| break;
|
| case DEAL_TYPE_COMMISSION_AGENT_MONTHLY:
|
| str="Monthly Agent Commission type";
|
| break;
|
| case DEAL_TYPE_INTEREST:
|
| str="Interest Rate type";
|
| break;
|
| case DEAL_TYPE_BUY_CANCELED:
|
| str="Canceled Buy type";
|
| break;
|
| case DEAL_TYPE_SELL_CANCELED:
|
| str="Canceled Sell type";
|
| break;
|
| default:
|
| str="Unknown type";
|
| }
|
| //---
|
| return(str);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_ENTRY" |
|
| //+------------------------------------------------------------------+
|
| ENUM_DEAL_ENTRY CDealInfo::Entry(void) const
|
| {
|
| return((ENUM_DEAL_ENTRY)HistoryDealGetInteger(m_ticket,DEAL_ENTRY));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_ENTRY" as string |
|
| //+------------------------------------------------------------------+
|
| string CDealInfo::EntryDescription(void) const
|
| {
|
| string str;
|
| //---
|
| switch(CDealInfo::Entry())
|
| {
|
| case DEAL_ENTRY_IN:
|
| str="In entry";
|
| break;
|
| case DEAL_ENTRY_OUT:
|
| str="Out entry";
|
| break;
|
| case DEAL_ENTRY_INOUT:
|
| str="InOut entry";
|
| break;
|
| case DEAL_ENTRY_STATE:
|
| str="Status record";
|
| break;
|
| case DEAL_ENTRY_OUT_BY:
|
| str="Out By entry";
|
| break;
|
| default:
|
| str="Unknown entry";
|
| }
|
| //---
|
| return(str);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_MAGIC" |
|
| //+------------------------------------------------------------------+
|
| long CDealInfo::Magic(void) const
|
| {
|
| return(HistoryDealGetInteger(m_ticket,DEAL_MAGIC));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_POSITION_ID" |
|
| //+------------------------------------------------------------------+
|
| long CDealInfo::PositionId(void) const
|
| {
|
| return(HistoryDealGetInteger(m_ticket,DEAL_POSITION_ID));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_VOLUME" |
|
| //+------------------------------------------------------------------+
|
| double CDealInfo::Volume(void) const
|
| {
|
| return(HistoryDealGetDouble(m_ticket,DEAL_VOLUME));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_PRICE_OPEN" |
|
| //+------------------------------------------------------------------+
|
| double CDealInfo::Price(void) const
|
| {
|
| return(HistoryDealGetDouble(m_ticket,DEAL_PRICE));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_COMMISSION" |
|
| //+------------------------------------------------------------------+
|
| double CDealInfo::Commission(void) const
|
| {
|
| return(HistoryDealGetDouble(m_ticket,DEAL_COMMISSION));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_SWAP" |
|
| //+------------------------------------------------------------------+
|
| double CDealInfo::Swap(void) const
|
| {
|
| return(HistoryDealGetDouble(m_ticket,DEAL_SWAP));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_PROFIT" |
|
| //+------------------------------------------------------------------+
|
| double CDealInfo::Profit(void) const
|
| {
|
| return(HistoryDealGetDouble(m_ticket,DEAL_PROFIT));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_SYMBOL" |
|
| //+------------------------------------------------------------------+
|
| string CDealInfo::Symbol(void) const
|
| {
|
| return(HistoryDealGetString(m_ticket,DEAL_SYMBOL));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_COMMENT" |
|
| //+------------------------------------------------------------------+
|
| string CDealInfo::Comment(void) const
|
| {
|
| return(HistoryDealGetString(m_ticket,DEAL_COMMENT));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Get the property value "DEAL_EXTERNAL_ID" |
|
| //+------------------------------------------------------------------+
|
| string CDealInfo::ExternalId(void) const
|
| {
|
| return(HistoryDealGetString(m_ticket,DEAL_EXTERNAL_ID));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access functions HistoryDealGetInteger(...) |
|
| //+------------------------------------------------------------------+
|
| bool CDealInfo::InfoInteger(ENUM_DEAL_PROPERTY_INTEGER prop_id,long &var) const
|
| {
|
| return(HistoryDealGetInteger(m_ticket,prop_id,var));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access functions HistoryDealGetDouble(...) |
|
| //+------------------------------------------------------------------+
|
| bool CDealInfo::InfoDouble(ENUM_DEAL_PROPERTY_DOUBLE prop_id,double &var) const
|
| {
|
| return(HistoryDealGetDouble(m_ticket,prop_id,var));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access functions HistoryDealGetString(...) |
|
| //+------------------------------------------------------------------+
|
| bool CDealInfo::InfoString(ENUM_DEAL_PROPERTY_STRING prop_id,string &var) const
|
| {
|
| return(HistoryDealGetString(m_ticket,prop_id,var));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Converths the type of a deal to text |
|
| //+------------------------------------------------------------------+
|
| string CDealInfo::FormatAction(string &str,const uint action) const
|
| {
|
| //--- see the type
|
| switch(action)
|
| {
|
| case DEAL_TYPE_BUY:
|
| str="buy";
|
| break;
|
| case DEAL_TYPE_SELL:
|
| str="sell";
|
| break;
|
| case DEAL_TYPE_BALANCE:
|
| str="balance";
|
| break;
|
| case DEAL_TYPE_CREDIT:
|
| str="credit";
|
| break;
|
| case DEAL_TYPE_CHARGE:
|
| str="charge";
|
| break;
|
| case DEAL_TYPE_CORRECTION:
|
| str="correction";
|
| break;
|
| case DEAL_TYPE_BONUS:
|
| str="bonus";
|
| break;
|
| case DEAL_TYPE_COMMISSION:
|
| str="commission";
|
| break;
|
| case DEAL_TYPE_COMMISSION_DAILY:
|
| str="daily commission";
|
| break;
|
| case DEAL_TYPE_COMMISSION_MONTHLY:
|
| str="monthly commission";
|
| break;
|
| case DEAL_TYPE_COMMISSION_AGENT_DAILY:
|
| str="daily agent commission";
|
| break;
|
| case DEAL_TYPE_COMMISSION_AGENT_MONTHLY:
|
| str="monthly agent commission";
|
| break;
|
| case DEAL_TYPE_INTEREST:
|
| str="interest rate";
|
| break;
|
| case DEAL_TYPE_BUY_CANCELED:
|
| str="canceled buy";
|
| break;
|
| case DEAL_TYPE_SELL_CANCELED:
|
| str="canceled sell";
|
| break;
|
| default:
|
| str="unknown deal type "+(string)action;
|
| }
|
| //--- return the result
|
| return(str);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Converts the deal direction to text |
|
| //+------------------------------------------------------------------+
|
| string CDealInfo::FormatEntry(string &str,const uint entry) const
|
| {
|
| //--- see the type
|
| switch(entry)
|
| {
|
| case DEAL_ENTRY_IN:
|
| str="in";
|
| break;
|
| case DEAL_ENTRY_OUT:
|
| str="out";
|
| break;
|
| case DEAL_ENTRY_INOUT:
|
| str="in/out";
|
| break;
|
| case DEAL_ENTRY_OUT_BY:
|
| str="out by";
|
| break;
|
| default:
|
| str="unknown deal entry "+(string)entry;
|
| }
|
| //--- return the result
|
| return(str);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Converts the deal parameters to text |
|
| //+------------------------------------------------------------------+
|
| string CDealInfo::FormatDeal(string &str) const
|
| {
|
| string type;
|
| long tmp_long;
|
| //--- set up
|
| string symbol_name=this.Symbol();
|
| int digits=_Digits;
|
| if(SymbolInfoInteger(symbol_name,SYMBOL_DIGITS,tmp_long))
|
| digits=(int)tmp_long;
|
| //--- form the description of the deal
|
| switch(DealType())
|
| {
|
| //--- Buy-Sell
|
| case DEAL_TYPE_BUY:
|
| case DEAL_TYPE_SELL:
|
| str=StringFormat("#%I64u %s %s %s at %s",
|
| Ticket(),
|
| FormatAction(type,DealType()),
|
| DoubleToString(Volume(),2),
|
| symbol_name,
|
| DoubleToString(Price(),digits));
|
| break;
|
|
|
| //--- balance operations
|
| case DEAL_TYPE_BALANCE:
|
| case DEAL_TYPE_CREDIT:
|
| case DEAL_TYPE_CHARGE:
|
| case DEAL_TYPE_CORRECTION:
|
| case DEAL_TYPE_BONUS:
|
| case DEAL_TYPE_COMMISSION:
|
| case DEAL_TYPE_COMMISSION_DAILY:
|
| case DEAL_TYPE_COMMISSION_MONTHLY:
|
| case DEAL_TYPE_COMMISSION_AGENT_DAILY:
|
| case DEAL_TYPE_COMMISSION_AGENT_MONTHLY:
|
| case DEAL_TYPE_INTEREST:
|
| str=StringFormat("#%I64u %s %s [%s]",
|
| Ticket(),
|
| FormatAction(type,DealType()),
|
| DoubleToString(Profit(),2),
|
| this.Comment());
|
| break;
|
|
|
| default:
|
| str="unknown deal type "+(string)DealType();
|
| }
|
| //--- return the result
|
| return(str);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Select a deal on the index |
|
| //+------------------------------------------------------------------+
|
| bool CDealInfo::SelectByIndex(const int index)
|
| {
|
| ulong ticket=HistoryDealGetTicket(index);
|
| if(ticket==0)
|
| return(false);
|
| Ticket(ticket);
|
| //---
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|