0

我想在 MetaTrader 5 的“专家”窗口中打印每笔已平仓交易的损益...

void OnTrade()
  {
  HistorySelect(0,TimeCurrent());
  int trades_total = HistoryDealsTotal();
  ulong ticket=HistoryDealGetTicket(trades_total-1);
  long deal_type=HistoryDealGetInteger(ticket,DEAL_ENTRY);
  long deal_direction=HistoryDealGetInteger(ticket,DEAL_ENTRY);

  if(deal_type == 1)
    {
     double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
     Print("Ticket ",ticket," Profit: ",profit," Direction: ",deal_direction);
    }
  } //END OnTrade()

...但是我得到的不仅仅是一个,而是五个(相同的)结果:

在此处输入图像描述

我需要在我的代码中进行哪些更改才能只获得一行?

提前谢谢了!

4

2 回答 2

1

您选择了一系列已完成交易中的最后一笔交易

ulong ticket=HistoryDealGetTicket(trades_total-1); 相反,您必须遍历从trades_total-1(最后)到0(第一个)的所有票。

for(int i=HistoryDealsTotal()-1;i>=0;i--)
  {
   ulong ticket=HistoryDealGetTicket(i);
   //and rest of the code.
  }

您也可能需要标记系列的开始 - 否则您将拥有 4,3,2,1,0,4,3... 因为每个刻度 EA 都被调用

于 2018-02-27T20:25:37.213 回答
0

我仍然无法弄清楚上面屏幕截图中的这 5 行有何不同(如果有人知道,请发表评论),但这无论如何都不是必需的,因为它不仅可以按差异进行过滤,还可以按共同属性进行过滤:

uint lastDealsTotal; //global variable
[...]
void OnTrade()
{
   uint dealsTotal = HistoryDealsTotal();
   [...]
   if(dealsTotal != lastDealsTotal)
   {
     Print([...]);
   }
   [...]
   lastDealsTotal = dealsTotal;
 } //END OnTrade()
于 2018-02-28T14:48:58.437 回答