首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MQL4: OrderModifiy()返回130

MQL4: OrderModifiy()返回130
EN

Stack Overflow用户
提问于 2021-09-14 14:33:51
回答 1查看 49关注 0票数 0

OrderModify 130在反向测试时返回给我,但我还没有找到修复它的方法,这是由于什么原因?

日志:

代码语言:javascript
复制
2021.09.14 16:27:56.485 2021.01.13 05:00:00  XXXX XAUUSD,H4: OrderModify error 130
2021.09.14 16:27:56.485 2021.01.13 05:00:00  XXX XAUUSD,H4: open #17 buy 1.17 XAUUSD at 1859.80 ok
2021.09.14 16:27:56.485 2021.01.13 05:00:00  XX XAUUSD,H4: lots:1.172578644923699,mod:0.01
2021.09.14 16:27:56.485 2021.01.13 05:00:00  XXXX XAUUSD,H4: lots:0.0,Last_Position_Size:1.160968955369999,Lot_Size_Mod:1.0
2021.09.14 16:27:56.485 2021.01.13 05:00:00  XXX XAUUSD,H4: BUY entry, Nearest_Up_Level:1855.3,Close[2]:1855.21,Close[1]:1859.73
代码语言:javascript
复制
void OpenTrade(string sym, int tmode, double tsize){
   int err = 0, ticket = 0;
   double TP = 0, SL = 0;
   
   if(!IsTradeAllowed()){
      while(true){
         if(IsTradeAllowed()) break;
         Sleep(100);
      } 
   }
   RefreshRates();
   
   if (tmode == OP_BUY){
      err = 1;
      while(err > 0){
         RefreshRates();
         
         //if (TakeProfit > 0) TP = Ask + TakeProfit * Point * mp;
         //else TP = 0;
         TP = BUY_TP_Price;
         //Print("Current TP distance:", (TP - Ask) / Point / mp);
         if ((TP - Ask) / Point / mp < Min_TP_Distance) TP = Next_BUY_TP_Price;

         if (Stop_Loss > 0) SL = Ask - Stop_Loss * Point * mp;
         else SL = 0;
         
         ticket = OrderSend(sym, OP_BUY, tsize, Ask, 0, 0, 0, "", Magic_Number, 0, Green);
         err = GetLastError();
        // Print(sym+" Buy open, err:",err);
        
         if (err == 3 || err == 64 || err == 65 || err == 130 || err == 131 || err == 133 || err == 134 || err == 148 || err == 4110 || err == 143 ) err = 0;
         
         if (err != 0) Sleep(1000);
      }
      
      if (ticket > 0 && (TP > 0 || SL > 0)){            
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            bool result = OrderModify(ticket, OrderOpenPrice(), SL*_Point, TP*_Point, 0, CLR_NONE);
      }
   }
   
   if (tmode == OP_SELL){
      err = 1;
      while(err > 0){
         RefreshRates();
         
         //if (TakeProfit > 0) TP = Bid - TakeProfit * Point * mp;
         //else TP = 0;
         TP = SELL_TP_Price;
         Print("Current TP distance:", (Bid - TP) / Point / mp, ",TP:",TP);
         if ((Bid - TP) / Point / mp < Min_TP_Distance) TP = Next_SELL_TP_Price;
         
         if (Stop_Loss > 0) SL = Bid + Stop_Loss * Point * mp;
         else SL = 0;
         
         ticket= OrderSend(sym, OP_SELL, tsize, Bid, 0, 0, 0, "", Magic_Number, 0, Red);
         err = GetLastError();
         //Print(sym+" Sell open, err:",err);
         if (err == 3 || err == 64 || err == 65 || err == 130 || err == 131 || err == 133 || err == 134 || err == 148 || err == 4111) err = 0;
         
         if (err != 0) Sleep(1000);
      }
      
      if (ticket > 0 && (TP > 0 || SL > 0)){            
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            bool result = OrderModify(ticket, OrderOpenPrice(), SL*_Point, TP*_Point, 0, CLR_NONE);
      }
   }
}
EN

回答 1

Stack Overflow用户

发布于 2021-09-14 15:17:39

错误代码130为ERR_INVALID_STOPS (参见Error Codes)。

这是由于您没有正确地使用OrderModify而导致的。

止损获利应该是Levels而不是Pips。将您的代码修改为:

代码语言:javascript
复制
bool result;
if(OrderType()==OP_BUY) result=OrderModify(ticket, OrderOpenPrice(), NormalizeDouble(OrderOpenPrice()-SL*_Point, Digits), NormalizeDouble(OrderOpenPrice()+TP*_Point, Digits), 0, CLR_NONE);
else result=OrderModify(ticket, OrderOpenPrice(), NormalizeDouble(OrderOpenPrice()+SL*_Point, Digits), NormalizeDouble(OrderOpenPrice()-TP*_Point, Digits), 0, CLR_NONE);

将您的级别标准化为Digits也是一个很好的实践,我已经在上面的代码中包含了这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69179720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档