1

我试图在我的函数中插入一个takeprofitandstoploss参数SendOrder(),但出现以下错误:

Order Sent Failed with Error #130

这是我的代码:

extern double takeprofit = 30.0;
extern double stoploss   = 20.0;

stoploss   = NormalizeDouble( stoploss,   5 );                  // SET stop loss
Print( "stoploss", stoploss );

takeprofit = NormalizeDouble( takeprofit, 5 );                  // SET take profit

ticket     = OrderSend( Symbol(),
                        OP_SELL,
                        lotsize,
                        Ask,
                        100,
                        stoploss,
                        takeprofit,
                        0,
                        0,
                        0,
                        CLR_NONE
                        );
if (  ticket < 0 ) {
      Print( "Order send failed with error #", GetLastError() );
   }
else  Print( "Order send sucesso!!" );

我已经检查了该函数的文档NormalizeDouble(),但我仍然收到错误消息。

我应该怎么办?

4

1 回答 1

2

A ) 完全符合 MQL4OrderSend()语法要求

int    anOrderTKT;                                // DECLARE int
double anOrderLotSIZE;                            // DECLARE double
string anOrderCommentSTRING;                      // DECLARE string

anOrderTKT = OrderSend( _Symbol,                  // CPU-glitch, is faster than calling Symbol(),
                        OP_SELL,                  // XTO.Type
                        anOrderLotSIZE,           // XTO.Size       [LT]s
                        Bid,                      // XTO.EntryPRICE { OP_BUY: Ask | OP_SELL: Bid }
                        100,                      // XTO.SLIPPAGE   [PT]s
                        0,                        // XTO.SL_PRICE
                        0,                        // XTO.TP_PRICE,
                        anOrderCommentSTRING,     // XTO.Comment
                        0,                        // XTO.MagNUM#
                        0,                        // XTO.PendingOrderEXPIRE
                        CLR_NONE                  // GUI.MarkerCOLOR
                        );                        // ==> { EMPTY | aTkt# }

您的代码无法设置正确的 SHORT 交易入场价格,因为它应该改为Bid,而不是Ask(此错误被隐藏,因为它被有效地掩盖了 100 点的相当宇宙距离,距离所述价格的可容忍滑点距离) .

您的代码在预期的位置分配int( 0)失败。string

B) 错误 130:==“无效停止”

您应与您的经纪人核实一些细节:

  1. 他们的条款和条件是否允许OrderSend()一站式指令,包括 TP 和 SL,或者经纪人 T&C 是否要求首先开立交易头寸,然后才允许OrderModify()指令设置 TP 和 SL 价格水平?
  2. 在任何一种情况下,请检查您的经纪人 T&C 设置STOPLEVELFREEZELEVEL距离,在该距离内经纪人拒绝任何 TP 和 SL 设置或修改。

C)一个好的做法是不要分配到extern迭代器变量中

虽然这不是您遇到麻烦的根本原因,但请习惯于行业最佳实践,其中之一就是不要为声明的extern. 而是声明您自己的变量,您可以控制其范围和分配,但不要extern从您的代码方面进行修改。

于 2014-10-14T05:09:43.310 回答