如何在调用OrderModify()函数时修复错误4059 MQL4?

时间:2016-05-04 07:40:47

标签: trading algorithmic-trading mql4 metatrader4

我的 EA 会出现错误代码4059
,这意味着 {back}测试显然不允许使用OrderModify() 功能。

有什么方法可以允许这一点吗?

我想要做的就是将立场变为盈亏平衡,当它达到100点时#34;

PrintFormat( "TKT[%.2d]OP:[%7.5f]SL:[%7.5f]CurrentPrice:[%7.5f]Stoplevel:[%.3d]FreezeLevel:[%.3d]",
              aTicket,
              anOpenPrice,
              aCurrentSL,
              anAskPrice,
              stopLevel,
              freezeLevel
              );
SellMod = OrderModify( aTicket,
                       NormalizeDouble( anOpenPrice, Digits ),
                       NormalizeDouble( aNewSLPrice, Digits ),
                       NormalizeDouble( aNewTpPrice, Digits ),
                       0,
                       sellcolor
                       );
SendMail( "Notification of Order Modification for Ticket#"
         + IntegerToString( OrderTicket(), 10 ),
           "Good news! Order Ticket#"
         + IntegerToString( OrderTicket(), 10 )
         + "has been changed to breakeven"
           );
if (  !SellMod )
{     PrintFormat( "Order modification for ticket %10d has failed modify the order under the Error Code# %5d. Check MQL4 Documentation",
                   aTicket,
                   GetLastError()
                   );
      result = false;
}

2 个答案:

答案 0 :(得分:0)

4059 ERR_FUNC_NOT_ALLOWED_IN_TESTING清楚,但不是它的来源,但

  

测试模式中不允许使用功能
[ HIDDEN REMAINS _WHERE_ + _WHY_ IT IS REPORTED] :)

所以,
修改错误检测的一些细节 以便回到骑马座和以完全控制下来的东西:

 .
 ..
 ...
 // ======================================== .ASSUME NOTHING       ; the best
 //                                                                      advice
 //                                                                      ever :)
 //                //     ALWAYS (pre-clear) 
 GetLastError();   /* _ _ _ _ _ _ _ _ _ _ _  AND   ERR_SYSREG, 0   ; CLEAR SYSREG
                                                                   ; (
                                                                   ; prevents 
                                                                   ; from reading
                                                                   ; a value from
                                                                   ; some "old"
                                                                   ; error-code
                                                                   ; on a "next"
                                                                   ; GetLastError
                                                                   ; call
                                                                   ; )
                   */
 OrderModify(...); //                        CALL  _OrderModify

 gotLastERROR =    //                        MOV   VAR, ERR_SYSREG ; CATCH ERR
 GetLastError();   // _ _ _ _ _ _ _ _ _ _ _  AND   ERR_SYSREG, 0   ; CLEAR SYSREG

 // ---------------------------------------- ( a main-effect )
 //                                          ( VAR has this _FUN call error-code )

 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ( a side-effect )
 //                                          ( ERR_SYSREG is clear AGAIN )
 ...
 ..
 .

使用类似系统的错误检测方法,您很快就会意识到观察到的问题的根本原因,任何错误处理只会开始有意义。< / p>

最有可能的是,错误源自SLOC来电之下的OrderModify() - 更低,其中出现 SendMail() 来电,尽管事实如此那个HELP明确地说:

  


Note

在设置中可以禁止发送,也可以省略电子邮件地址。对于错误信息,请致电GetLastError()

  SendMail()函数在策略测试程序中不起作用。

答案 1 :(得分:0)

OrderModify() 生成错误4059
该错误来自SendMail()。文件指出:
https://docs.mql4.com/common/sendmail