统计多个持仓单的利润总和与实际有差距是什么情况

 
double pos_profit_total(string zhushi1,string zhushi2,string zhushi3)
{
   double pos_yingli_zonghe=0;
   double pos_profit1=0,pos_profit2=0,pos_profit3=0;
   int total=PositionsTotal(); // 持仓数   
//--- 重做所有持仓
   for(int i=total-1; i>=0; i--)
     {
      //--- 订单的参数
      ulong  position_ticket=PositionGetTicket(i);               // 获得订单号
      string pos_zhushi=PositionGetString(POSITION_COMMENT);     // 获得注释
      if(pos_zhushi==zhushi1)
        {
         pos_profit1=pos_profit1+PositionGetDouble(POSITION_PROFIT);
        }
      if(pos_zhushi==zhushi2)
        {
         pos_profit2=pos_profit2+PositionGetDouble(POSITION_PROFIT);
        }
      if(pos_zhushi==zhushi3)
        {
         pos_profit3=pos_profit3+PositionGetDouble(POSITION_PROFIT);
        }
      }
    pos_yingli_zonghe=NormalizeDouble((pos_profit1+pos_profit2+pos_profit3),2);
    return(pos_yingli_zonghe);
}
我通过自己写的这个代码统计对冲货币的持仓利润总和 但总是与实际值相差几美元 是哪里出什么问题了吗?