failed instant sell 0.15 XAUUSD at 1572.22, close #6 buy 0.15 XAUUSD 1571.29 [Invalid volume]

Daying Cao  

大家好! 求高手解答 以下提示是什么原因,造成的,已经开仓,但关闭手出现无效交易量提示 test on EURUSD,H1 (netting) strategy tester report 248 total trades test on XAUUSD,D1 (netting) 2020.02.03 17:02:39 failed instant sell 0.15 XAUUSD at 1572.22, close #6 buy 0.15 XAUUSD 1571.29 [Invalid volume]

Tiecheng Fu  
Daying Cao:

大家好! 求高手解答 以下提示是什么原因,造成的,已经开仓,但关闭手出现无效交易量提示 test on EURUSD,H1 (netting) strategy tester report 248 total trades test on XAUUSD,D1 (netting) 2020.02.03 17:02:39 failed instant sell 0.15 XAUUSD at 1572.22, close #6 buy 0.15 XAUUSD 1571.29 [Invalid volume]

mt5的开立账户模式分两种hedge和netting,,一般用的是hedge模式,估计应该是这个问题,建议您先更换hedge模式试一试

Daying Cao  
Tiecheng Fu:

mt5的开立账户模式分两种hedge和netting,,一般用的是hedge模式,估计应该是这个问题,建议您先更换hedge模式试一试

高手:

  但我这是MQL5自动测试EA给出的,我如何解决他,每次自动测试都出这个提示,之前是偶尔出,大多数是不出这个提示就测试通过了,但今天每次都出这个提示

Tiecheng Fu  
Daying Cao:

高手:

  但我这是MQL5自动测试EA给出的,我如何解决他,每次自动测试都出这个提示,之前是偶尔出,大多数是不出这个提示就测试通过了,但今天每次都出这个提示

原因很多,检查控制手数的代码,最好格式化一下,手数不正确也会报错的,仅供参考!

Ziheng Zhuang  

提示invalid volume,说明你的手数值有问题,平仓有传手数参数吗?

如果有的话,传参之前手数参数必须规范化,必须是手数步长即SYMBOL_VOLUME_STEP的整数倍。

Daying Cao  
Ziheng Zhuang:

提示invalid volume,说明你的手数值有问题,平仓有传手数参数吗?

如果有的话,传参之前手数参数必须规范化,必须是手数步长即SYMBOL_VOLUME_STEP的整数倍。

谢谢你高手!

但它是开仓交易量一直没出现问题,通过通过MQL5官方提供的示例函数CheckVolumeValue自动转换交易量开仓(包含

“传参之前手数参数必须规范化,必须是手数步长即SYMBOL_VOLUME_STEP的整数倍”

平仓都是通过以下函数:  按道理应该关闭时的交易量是和开仓一样数值,这有点解释不通

void CloseAllPositions()

  {


   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of current positions

      if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties

         if(m_position.Magic()==InpMagic)

            if(!m_trade.PositionClose(m_position.Ticket())) // close a position by the specified symbol

            {

               Print("#@3 Close all -> false. Result Retcode: ",m_trade.ResultRetcode(),

                  ", description of result: ",m_trade.ResultRetcodeDescription());

               PrintResult(m_trade,m_symbol);              

            }else

            {

              if(m_trade.ResultDeal()==0)

              {

               Print("#@1  close all -> false. Result Retcode: ",m_trade.ResultRetcode(),

                        ", description of result: ",m_trade.ResultRetcodeDescription());

              PrintResult(m_trade,m_symbol);

              }

               else

              {

               Print("#2 close all -> true. Result Retcode: ",m_trade.ResultRetcode(),

                     ", description of result: ",m_trade.ResultRetcodeDescription());

               PrintResult(m_trade,m_symbol);

            

              }

              PrintDebug("----------CLOSE ALL :"+" Ticket:"+m_position.Ticket());

              

            }

  }  

Daying Cao  
Tiecheng Fu:

原因很多,检查控制手数的代码,最好格式化一下,手数不正确也会报错的,仅供参考!

高手你好!


我看到以下提示错误里包含 (netting)

test on EURUSD,H1 (netting) strategy tester report 248 total trades test on XAUUSD,D1 (netting) 2020.02.03 17:02:39 failed instant sell 0.15 XAUUSD at 1572.22, close #6 buy 0.15 XAUUSD 1571.29 [Invalid volume]


这就是说MQL5自动检测EA时使用netting 模式了 ,这样我需要在代码了检测账户类型是Hedge还是模式netting,不过,EA测试时好像是开仓采用了Hedge,因为我知道错误提示的订单是

与之前的订单反方向开仓的,所以开仓时MQL5自动检测采用HEDGE模式,而关闭时又采用 netting. 好像是这样的过程,需要找到检测账户类型模式函数,来证明这些

Hung Wen Lin  

類似的問題我也遇到了 在本地端做回測沒有問題 但是提交送審就會出現單量錯誤的問題

MT5後來加進了最小單量跟最大單量的限定 "似乎"就可以通過系統審核

MT4加進了單量限制 一樣出現錯誤單量的故障 到目前審核一樣不通過

令我搞不懂的是 回測跟實盤測試時 經過自定義函數計算出來的單量是正確的 也都能順利的交易

為何送系統審核就是會出現錯誤的單量

Daying Cao  
Hung Wen Lin:

類似的問題我也遇到了 在本地端做回測沒有問題 但是提交送審就會出現單量錯誤的問題

MT5後來加進了最小單量跟最大單量的限定 "似乎"就可以通過系統審核

MT4加進了單量限制 一樣出現錯誤單量的故障 到目前審核一樣不通過

令我搞不懂的是 回測跟實盤測試時 經過自定義函數計算出來的單量是正確的 也都能順利的交易

為何送系統審核就是會出現錯誤的單量

高手你好!

我估计是在关闭时,找不到有此交易量0.15手的卖方,因为提示英文有未及时卖出的含义,所以估计要采用分批卖出方法,但总交易量必须凑齐0.15手

因以前也是相同代码,大多数能通过MQL5自动测试,但现在不能了。我想肯定不会是开仓之前检测交易量出错了

我估计要用到参数:         

ORDER_FILLING_FOK

执行政策意味着订单只可以在指定额度执行。如果当前市场不提供金融工具需要的额度,订单将无法执行。需要的交易量可以使用市场此刻几种可用的提供来执行。

ORDER_FILLING_IOC

该模式意味着交易者同意在订单指定范围内,以市场可用的最大交易量执行交易。如果无法执行全部订单交易量,那么剩下的交易量将被取消。

ORDER_FILLING_RETURN

该政策只用于市场订单 (ORDER_TYPE_BUY 和 ORDER_TYPE_SELL),限价和止损限价订单 (ORDER_TYPE_BUY_LIMIT,ORDER_TYPE_SELL_LIMIT,ORDER_TYPE_BUY_STOP_LIMIT 和 ORDER_TYPE_SELL_STOP_LIMIT ) 并且只用于市场或交易 执行的交易品种。如果部分执行市场或剩下交易量的限价订单没有取消,则是会进一步处理。

为了激活ORDER_TYPE_BUY_STOP_LIMIT 和 ORDER_TYPE_SELL_STOP_LIMIT 订单,将会创建ORDER_FILLING_RETURN执行类型相应的限价订单 ORDER_TYPE_BUY_LIMIT/ORDER_TYPE_SELL_LIMIT


ORDER_FILLING_FOK参数比较符合我的意图。

不知道是否正确?

Hung Wen Lin  
Daying Cao:

高手你好!

我估计是在关闭时,找不到有此交易量0.15手的卖方,因为提示英文有未及时卖出的含义,所以估计要采用分批卖出方法,但总交易量必须凑齐0.15手

因以前也是相同代码,大多数能通过MQL5自动测试,但现在不能了。我想肯定不会是开仓之前检测交易量出错了

我估计要用到参数:         

ORDER_FILLING_FOK

执行政策意味着订单只可以在指定额度执行。如果当前市场不提供金融工具需要的额度,订单将无法执行。需要的交易量可以使用市场此刻几种可用的提供来执行。

ORDER_FILLING_IOC

该模式意味着交易者同意在订单指定范围内,以市场可用的最大交易量执行交易。如果无法执行全部订单交易量,那么剩下的交易量将被取消。

ORDER_FILLING_RETURN

该政策只用于市场订单 (ORDER_TYPE_BUY 和 ORDER_TYPE_SELL),限价和止损限价订单 (ORDER_TYPE_BUY_LIMIT,ORDER_TYPE_SELL_LIMIT,ORDER_TYPE_BUY_STOP_LIMIT 和 ORDER_TYPE_SELL_STOP_LIMIT ) 并且只用于市场或交易 执行的交易品种。如果部分执行市场或剩下交易量的限价订单没有取消,则是会进一步处理。

为了激活ORDER_TYPE_BUY_STOP_LIMIT 和 ORDER_TYPE_SELL_STOP_LIMIT 订单,将会创建ORDER_FILLING_RETURN执行类型相应的限价订单 ORDER_TYPE_BUY_LIMIT/ORDER_TYPE_SELL_LIMIT


ORDER_FILLING_FOK参数比较符合我的意图。

不知道是否正确?

真高手是上面的兩位 我充其量就是個愛好者

我在MT5裡面有加下面的代碼 可以根據審核不通過時調整用

   MqlTradeRequest request={0}; 
   MqlTradeResult  result={0};
   
   if(ErrorCheck==1)request.type_filling=ORDER_FILLING_FOK;
   if(ErrorCheck==2)request.type_filling=ORDER_FILLING_IOC;
   if(ErrorCheck==3)request.type_filling=ORDER_FILLING_RETURN;

   request.action=cmd;          
   request.magic=magic;                   
   request.symbol=symbol;                      
   request.volume=inlots;                       
   request.price=orderprice;
   request.deviation=200;
   request.type=type;
   request.comment=comm;            

可是 真正讓我通過審核的是因為我加進的最大最小單量限制後 審核才通過的

//========Lots Count=========================================================
   if(Position_Statistics("QTY",InSymbol,ORDER_TYPE_BUY,Magic,Comm)==0)
     {
      Buy_Lots=MathMax(SymbolInfoDouble(InSymbol,SYMBOL_VOLUME_MIN),BeginLots);
     }

   if(Position_Statistics("QTY",InSymbol,ORDER_TYPE_BUY,Magic,Comm)!=0)
     {
      if(Lotscounter==0)
        Buy_Lots=MathMin(SymbolInfoDouble(InSymbol,SYMBOL_VOLUME_MAX),LevelLotCounter(InSymbol,ORDER_TYPE_BUY,Magic,Comm));
      if(Lotscounter==1)
        Buy_Lots=MathMin(SymbolInfoDouble(InSymbol,SYMBOL_VOLUME_MAX),ExLotCounter(InSymbol,ORDER_TYPE_BUY,Magic,Comm));
     }

其實 我也是有很大的疑問

我MT4做過幾十個EA 都能在實盤上交易 也都沒發生問題

現在就是心血來潮提交了MQL做審核 結果竟然都不通過

我也從來沒發布過產品 就是現在也開始懷疑以前了解的邏輯是否有錯誤了


上面提供了我當時審核出現單量異常時 最後處理通過的方法 希望對你有幫助

原因: