MQL5:在历史中计算本EA的所做单的收益
上篇博客有提到历史交易中 出场对应的进场(DEAL_POSITION_ID和DEAL_TICKET的对应关系)
根据这两者的关系,在加上本EA设置的magic号,就可以在历史处理订单中找到本EA做的单子。
其中外层循环找到的是DEAL_POSITION_ID,然后内层循环做一个对比。
经过正确调试,代码如下:
double time_profit(datetime &start, datetime &end)
{
double ret=0.0;
HistorySelect(start,end);
int deals=HistoryDealsTotal();
double profit;
long ticket;
int count=0;
for(int i=HistoryDealsTotal()-1; i>=0; i--)//遍历历史订单
{
ticket = HistoryDealGetTicket(i);
if(HistoryDealGetInteger(ticket,DEAL_ENTRY)==1)
{
ulong a=HistoryDealGetInteger(ticket,DEAL_POSITION_ID);
//Print(HistoryDealGetInteger(ticket,DEAL_POSITION_ID)) ;//进场单的订单ID
//Print(HistoryDealGetInteger(ticket,DEAL_TICKET)) ; //出场单的成交ID
long temp=HistoryDealGetInteger(ticket,DEAL_POSITION_ID);
for(int i=0; i<deals; i++)
{
ulong deal_ticket=HistoryDealGetTicket(i);
if(deal_ticket)
{
string symbol =HistoryDealGetString(deal_ticket,DEAL_SYMBOL);
datetime time =HistoryDealGetInteger(deal_ticket,DEAL_TIME);
ulong order =HistoryDealGetInteger(deal_ticket,DEAL_ORDER);
long order_magic =HistoryDealGetInteger(deal_ticket,DEAL_MAGIC);
long pos_ID =HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);
ENUM_DEAL_ENTRY entry_type=(ENUM_DEAL_ENTRY)HistoryDealGetInteger(deal_ticket,DEAL_ENTRY);
//--- 根据指定的 DEAL_MAGIC 处理交易
if(order_magic == 2020 && pos_ID == temp)//2020是我设置的EA订单的magic号
{
ret+=HistoryDealGetDouble(ticket,DEAL_PROFIT);
}
}
}
}
}
return(NormalizeDouble(ret,2));
}