刚学EA,组装了一下自己的EA,遇到了OrderClose error 138这个问题,不知道如何解决

EAtech  

做策略回撤的时候,提示我的EA002有一个错误,导致3年数据(15.1-17.12)的回撤仅下单十几单,而且都是直线向下的。显示如下图:

净值图

报告

日志

但是,我在实时MT4模拟盘中运行此EA的时候,却能正常开仓,平仓。为什么策略回撤就不行呢?以下是代码中问题代码的截图,请各位大神指点一下问题出在哪里?如何更改?谢谢!

 for(int i=0;i<OrdersTotal();i++)
       {
           if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
              {
                 if((OrderComment()==(Symbol()+"buy")))
                    {
                       if((sma1<sma2)&&(sma1p>sma2p))// buy close
                           {
                              bool b1=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderComment(),MODE_BID),200); 
                           }
                    }
               }
       }
 return0);
}
Tsung Che Kuo  

bool b1=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderComment(),MODE_BID),200);


MarketInfo(OrderComment(),MODE_BID) => obviously OrderComment() is a typo of OrderSymbol()


but quick workaround is:  (for-loop needs to be reverse count for order closure)


 for(int i=OrdersTotal()-1;i>=0;i--)

     {

      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

      if((OrderComment()==(Symbol()+"buy") && OrderType()==OP_BUY))

        {

         if((sma1<sma2) && (sma1p>sma2p))// buy close

           {

            bool b1=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),200);

           }

        }

     }

EAtech  
boolapi:

bool b1=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderComment(),MODE_BID),200);


MarketInfo(OrderComment(),MODE_BID) => obviously OrderComment() is a typo of OrderSymbol()


but quick workaround is:  (for-loop needs to be reverse count for order closure)


 for(int i=OrdersTotal()-1;i>=0;i--)

     {

      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

      if((OrderComment()==(Symbol()+"buy") && OrderType()==OP_BUY))

        {

         if((sma1<sma2) && (sma1p>sma2p))// buy close

           {

            bool b1=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),200);

           }

        }

     }

按照你的提示,更换了一下代码。但如果只是把markeinfo()项更换的话,日志确实没有向之前那样提示了。但报告2年时间只有100多单的交易(仅是简单的MA均线金叉死叉测试),为什么2年时间只有100多单的简单MA交叉开仓,是平仓出了问题吗?平仓我是强化的,有设置止损的以及如本题的平仓设置,应该不会有扛单,即时是扛单,交叉信号也不应该才100单哦,毕竟是1分钟图啊。这个EA设置了一个信号只能开一张单,2年的MA交叉也不应该是只有100个信号吧?问题会在哪里呢?

还有就是,如果把你给的代码整段都替换掉我的订单关闭代码的话(这个开始for (int i=OrdersTotal()-1;....),会造成测试没有单开仓,是不是我代码中开仓代码用的是for (int i=0;i<OrdersTotal();i++)(是用来检测只能开一张单的),所导致的冲突啊? 

谢谢!

抱歉,不会英文回复你,麻烦你了。

原因: