MQL4:OrderModify()总是得到130响应

时间:2017-10-03 09:23:37

标签: mql4 metatrader4 mt4

我希望我的EA自动修改订单,将StopLoss置于盈利状态,但为什么总是错误?

我已经获得了最低点数,但它没有给我任何运气。

这是vars

        double _stopLevelTimes = 1.5;
        int     StopLevel      = (int) ( miStopLevel + miSpread );

我想要的是使停止水平比最小止损点水平高1.5倍,我也已加上差价。

这些变量从经纪人处自动填充。

        if (  OrderType()      == 0
           && OrderOpenPrice() >  OrderStopLoss()
              ){
              _stopLoss   = NormalizeDouble( OrderOpenPrice()
                                           + ( Point() * (  StopLevel
                                                         * _stopLevelTimes
                                                           )
                                               ),
                                             miDigits
                                             );
              _clr        = clrBlue;
              RefreshRates();
              modified    = OrderModify( OrderTicket(),
                                         OrderOpenPrice(),
                                         _stopLoss,
                                         OrderTakeProfit(), 0, _clr );
        }
        else
        if (  OrderType()      == 1
           && OrderOpenPrice() <  OrderStopLoss()
              ){  
              _stopLoss   = NormalizeDouble( OrderOpenPrice()
                                           - ( Point() * (  StopLevel
                                                         * _stopLevelTimes
                                                           )
                                               ),
                                             miDigits
                                             );
              _clr        = clrRed;
              RefreshRates();
              modified    = OrderModify( OrderTicket(),
                                         OrderOpenPrice(),
                                         _stopLoss,
                                         OrderTakeProfit(), 0, _clr );
        }

2 个答案:

答案 0 :(得分:0)

即使(Forex Falcon的IT经理)也应该知道一些事实:

  • 每个MQL4代码都已将若干职责转移给代码设计人员,在任何db.Pool操作之前提交强制性 OrderSelect() 。不是因为OrderModify()中的db.Pool-SELECT-free操作模式,而是因为你的代码比较了db.Pool-record-values(并且这样的记录必须首先显式地为SELECT-ed)

  • 要监控的值不仅仅是SpreadStopLevel。一旦您的代码请求MT4-Server端修改订单,可能存在 Error_130 的第三个原因,幸运的是保留在 FreezeLevel 内区域,由您的经纪人 [条款和条件] 设置。请务必重新阅读它们,因为它们会统治您的所有XTO /非XTO。

  • 最后但并非最不重要的是,您的信念将会破灭,因为StopLevel,FreezeLevel和Spread都不需要保持不变,并且当返回的值应该被理解为值时,Broker和MetaQuotes MQL4文档都会警告情况,但作为一个关于实际没有价值的指示,但是标记浮动(未知)值

最好的下一步?

在所有情况下,将实际和请求的新值记录到文件中并检查它们是否符合[条款和条件]中的经纪人发布规则。

如果没有,请与经纪人代表和您当地的FSA当局协调任何此类记录在案的不合规情况。

答案 1 :(得分:0)

您只需检查一下,如果很长时间,您的止损位于OrderOpenPrice()以下,并计算新止损。但你不知道目前的价格是否远远低于目前的价格。可能的情况是,您关闭订单的当前价格(OrderClosePrice()Bid已久)低于新的止损,在这种情况下无法进行修改。之后,请确保您允许从当前价格到新止损的STOP_LEVEL * Point距离。