专业的大哥们帮我看一下代码,感激不尽

 

我的需求是:获取一个货币从首单开始到目前的总盈亏。。。首单是在持仓池里面的。盈亏统计是平仓池以后的


//+--------------------------------------------------------------------------------+

//|                                               首多时间                                     |
//+--------------------------------------------------------------------------------+
 datetime onebuytime()
  {
     datetime buytime2=0;
     for(int i=0;i<OrdersTotal();i++)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
          {
            if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic && OrderComment()==Symbol()+"buy")
              {
                buytime2=OrderOpenTime();
              }
          }
      }
     return(buytime2);
  }
//+--------------------------------------------------------------------------------+
//|                                            历史平多数                                     |
//+--------------------------------------------------------------------------------+
 int historybuylots()
  {
     int a=0;
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
          {
            if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic && OrderOpenTime()>onebuytime())
              {
                a++;
              }
          }
      }
     return(a);
  }
//+--------------------------------------------------------------------------------+
//|                                      多单历史总亏损                                    |
//+--------------------------------------------------------------------------------+ 
double historybuyloss()
  {
     double a=0;
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
         {
           if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
             {
               if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic && OrderOpenTime()>onebuytime())
                 {
                   a=a+OrderProfit()+OrderCommission()+OrderSwap();
                 }
             }
         }  
    return(a);
  }
 
首单的找法有问题
 
Lin Luo #:
首单的找法有问题

我确定持仓池中OrderComment()==Symbol()+"buy"有且仅有一单。这返回值直接是1970年的。。。我想问应该怎么改

 
Xiong Feng Shi #:

我确定持仓池中OrderComment()==Symbol()+"buy"有且仅有一单。这返回值直接是1970年的。。。我想问应该怎么改

哈哈,有点扯。。。。。
持仓池中 有且仅有一单  ——那持仓单之后,哪来的历史平仓订单?

这返回值直接是1970年的。。。我想问应该怎么改 ——说明该函数没有找到符合你条件(截图中的红色小方框)的订单,返回值为0了。

另外:比较时间的大小,我实践中是强制转换为int 来用的。此用法仅供参考。

 
Lin Luo #:

哈哈,有点扯。。。。。
持仓池中 有且仅有一单  ——那持仓单之后,哪来的历史平仓订单?

这返回值直接是1970年的。。。我想问应该怎么改 ——说明该函数没有找到符合你条件(截图中的红色小方框)的订单,返回值为0了。

另外:比较时间的大小,我实践中是强制转换为int 来用的。此用法仅供参考。

大哥,半路出家,我比你更纳闷
那持仓单之后,哪来的历史平仓订单?——持仓单OrderComment()==Symbol()+"buy"——平仓单是OrderComment()==Symbol()+"buy2"

说明该函数没有找到符合你条件(截图中的红色小方框)的订单,返回值为0了。—— onebuytime() 的返回值是返回值是1970年某月某日00.00分, historybuyloss()的返回值是所有改货币对的总盈亏

另外:比较时间的大小,我实践中是强制转换为int 来用的。此用法仅供参考。比如现在持仓EURUSD,开仓时间是2023年,4月8号,返回值也是1970

专业的大哥们帮我看一下代码,感激不尽
专业的大哥们帮我看一下代码,感激不尽
  • 2023.04.07
  • www.mql5.com
我的需求是:获取一个货币从首单开始到目前的总盈亏。。。首单是在持仓池里面的...
 
获取首单的开仓时间,正确的方法如下:

必须考虑如果首单被平仓后,按顺位第二个同方向的单子,将被自动视为首单.

a

 
Yang Wang #:
获取首单的开仓时间,正确的方法如下:

必须考虑如果首单被平仓后,按顺位第二个同方向的单子,将被自动视为首单.


  大哥的写法也没办法解决返回值是1970的问题。。。如果把datetime该城字符串string就能解决。。。。感谢大哥的解答。。。另外有一个新的问题,不知道哥能否再解答一下

我明明选择历史的订单。。。为什么历史亏损的返回值会变化???按照OrderProfit函数的介绍, 对于已平仓订单,它是固定利润。我的问题是在哪里

 

a

打印结果必须放在循环体外,才能得到总的亏损,不然循环一次就打印一次,结果就不是总体的亏损
b

 
Xiong Feng Shi:

我的需求是:获取一个货币从首单开始到目前的总盈亏。。。首单是在持仓池里面的。盈亏统计是平仓池以后的


//+--------------------------------------------------------------------------------+

//|                                               首多时间                                     |
//+--------------------------------------------------------------------------------+
 datetime onebuytime()
  {
     datetime buytime2=0;
     for(int i=0;i<OrdersTotal();i++)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
          {
            if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic && OrderComment()==Symbol()+"buy")
              {
                buytime2=OrderOpenTime();
              }
          }
      }
     return(buytime2);
  }
//+--------------------------------------------------------------------------------+
//|                                            历史平多数                                     |
//+--------------------------------------------------------------------------------+
 int historybuylots()
  {
     int a=0;
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
      {
        if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
          {
            if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic && OrderOpenTime()>onebuytime())
              {
                a++;
              }
          }
      }
     return(a);
  }
//+--------------------------------------------------------------------------------+
//|                                      多单历史总亏损                                    |
//+--------------------------------------------------------------------------------+ 
double historybuyloss()
  {
     double a=0;
     for(int i=OrdersHistoryTotal()-1;i>=0;i--)
         {
           if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
             {
               if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic && OrderOpenTime()>onebuytime())
                 {
                   a=a+OrderProfit()+OrderCommission()+OrderSwap();
                 }
             }
         }  
    return(a);
  }

首单赋值时间写错了,MT4上查找统计历史订单加个开单时间小于平仓时间的条件,历史统计金额不需要加库存费和手续费。

原因: