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

MQL4: OrderModify() always gets 130 response

我想让我的EA自动修改订单,在盈利状态设置一次止损,但为什么总是报错?

我也已经达到了最低点数,但它并没有给我任何运气。

这是变量

        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 );
        }

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

  • 每个 MQL4 代码都将一些责任转移给代码设计者,在任何 db.Pool 操作之前提交强制性的 OrderSelect()。不是因为 OrderModify() 中的 db.Pool-SELECT-free 操作模式,而是因为您的代码比较 db.Pool-record-values(并且此类记录必须首先明确SELECT-ed )

  • 有更多的值需要监控,而不仅仅是 SpreadStopLevelError_130 可能还有第三个原因,一旦您的代码请求 MT4 服务器端修改订单,幸运的是它保留在 [=15= 中] 区域,由您的经纪人[条款和条件]设置。请务必重新阅读它们,因为它们统治着你所有的 XTO/non-XTO.

  • 最后但并非最不重要的一点是,您的信念将会破灭,因为 StopLevel、FreezeLevel 和 Spread 都不需要保持不变,并且 Brokers 和 MetaQuotes MQL4 文档都警告了应该理解返回值的情况不是作为一个值,而是作为一个指示实际上没有一个值可以使用,而是标记 浮动(未知)值.

最好的下一步?

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

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

您只需检查在做多的情况下,您的止损低于 OrderOpenPrice(),并计算新的止损。但你不知道现在的价格是否离现在的价格足够远。可能是您当前关闭订单的价格(OrderClosePrice()Bid 多头)低于新止损,在这种情况下无法修改。之后,确保您允许 STOP_LEVEL * Point 从当前价格到新止损的距离。