求大神指点,修改订单止损价格始终都无法成功。

 

我用打印测试了,所有语句都测试成功了,唯一就是最后修改订单的时候,OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*22,OrderTakeProfit(),0,Blue)无论我怎么修改参数,都返回false。请问是哪里出问题了啊?


 if(OrderType()==OP_BUY)

         {
          
                  
     if(Bid-OrderOpenPrice()>Point*20)  //现价减去开单价,即利润大于20时
      {
       
                
         
            if(OrderStopLoss()<Bid-Point*20) //如果订单当前止损点小于调整后止损点,就调整订单止损点,订单止盈位置没有变。
            {
            
           
          bool 改好了;  
            
           改好了=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*22,OrderTakeProfit(),0,Blue); 
              
           Print("改好了= ",改好了);  
            }
        }
         
         
         }  
 
你这里22,指是22微点,有的平台止损距离要求50微点以外才可以。5位小数报价平台,你放大到220试一下。
 
Chunlei Zhang:
你这里22,指是22微点,有的平台止损距离要求50微点以外才可以。5位小数报价平台,你放大到220试一下。

已经试过了,放大了还是改不了。在运行EA的时候,前面每一条判断语句后面都可以执行打印,唯独在修改订单的时候始终返回是false,不知道会不会是这个平台不能用EA哦,我问客服,客服又说可以用的。

 
151460270:

已经试过了,放大了还是改不了。在运行EA的时候,前面每一条判断语句后面都可以执行打印,唯独在修改订单的时候始终返回是false,不知道会不会是这个平台不能用EA哦,我问客服,客服又说可以用的。

151460270:

我用打印测试了,所有语句都测试成功了,唯一就是最后修改订单的时候,OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*22,OrderTakeProfit(),0,Blue)无论我怎么修改参数,都返回false。请问是哪里出问题了啊?


 if(OrderType()==OP_BUY)

         {
          
                  
     if(Bid-OrderOpenPrice()>Point*20)  //现价减去开单价,即利润大于20时
      {
       
                
         
            if(OrderStopLoss()<Bid-Point*20) //如果订单当前止损点小于调整后止损点,就调整订单止损点,订单止盈位置没有变。
            {
            
           
          bool 改好了;  
            
           改好了=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*22,OrderTakeProfit(),0,Blue); 
              
           Print("改好了= ",改好了);  
            }
        }
         
         
         }  

 if(Bid - OrderStopLoss() > TrailingStopM601*Point)
                           {
                              if(OrderModify(OrderTicket(),OrderOpenPrice(),Bid - TrailingStopM601*Point,OrderOpenPrice() + (Ask - Bid) + TakeProfitM601*Point,0) == false)

                              ......

                           }

自己琢磨琢磨

对于程序运行到哪里就停止了,你可以使用Alert来检查,Alert不仅能够有声音提示,还可以显示数字,把比较值显示出来,你就知道你的逻辑到底有没有错
 

//因为你没有获取订单

//OrderType()要在OrderSelect找单成功后使用;

int total=OrdersTotal();

for(int i=0;i<total;i++){

  if(OrderSelect(i,SELECT_BY_POS,0))continue;

 if(OrderType()==OP_BUY)

         {
          
                  
     if(Bid-OrderOpenPrice()>Point*20)  //现价减去开单价,即利润大于20时
      {
       
                
         
            if(OrderStopLoss()<Bid-Point*20) //如果订单当前止损点小于调整后止损点,就调整订单止损点,订单止盈位置没有变。
            {            
           
          bool 改好了;  
            
           改好了=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*22,OrderTakeProfit(),0,Blue); 
              
           if(改好了)Print("改好了= ",改好了);  else  printf("改单错误,错误原因编号"+(string)GetLastError());
            }
        }
         
         
         }  

}

 
151460270:

我用打印测试了,所有语句都测试成功了,唯一就是最后修改订单的时候,OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*22,OrderTakeProfit(),0,Blue)无论我怎么修改参数,都返回false。请问是哪里出问题了啊?


 if(OrderType()==OP_BUY)

         {
          
                  
     if(Bid-OrderOpenPrice()>Point*20)  //现价减去开单价,即利润大于20时
      {
       
                
         
            if(OrderStopLoss()<Bid-Point*20) //如果订单当前止损点小于调整后止损点,就调整订单止损点,订单止盈位置没有变。
            {
            
           
          bool 改好了;  
            
           改好了=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*22,OrderTakeProfit(),0,Blue); 
              
           Print("改好了= ",改好了);  
            }
        }
         
         
         } 

用else分支输出一个GetLastError()错误代码,很大可能是130错误,止盈止损小于平台的stoplevel停止水平导致修改失败

 
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-MathMax(Point*22,MarketInfo(_Symbol,MODE_STOPLEVEL)*Point),OrderTakeProfit(),0,Blue)
 
算出来小数位数不对也不行,很多平台点差最小点差200点
 

Forum on trading, automated trading systems and testing trading strategies

When you post code please use the CODE button (Alt-S)!

Use the CODE button

原因: