需要帮助解决错误#130无效止损的问题

 
亲爱的论坛。

我看到论坛上很多人都在为这个错误而苦恼。
根据我对其他主题的理解,这个错误可能是由以下原因造成的
a: 设置的止损值离当前价格太近
b: 0后面 的数字错误

关于a。
根据我的理解。MarketInfo(Symbol(), MODE_STOPLEVEL))应该给我止损需要的最小距离。
所以这里有一个交易失败的例子。

Marekt信息。
日期:2011/9/15 16:31
符号。#ESU1
停止水平:75.00000000
点位: 0.01000000
滴答大小:0.25000000
滴答值: 12.50000000
位数:2.00000000

因此,最小距离应该是停止水平*点,对吗?
所以这是我失败的订单。
2011.09.15 16:32:07 '393930': Order sell 18.00 #ESU1 opening at 1201.00 sl: 1202.35 tp: 0.00 failed [Invalid S/L or T/P]
错误是:130/无效的止损

止损离开盘还有1.35的距离。所以应该没问题。数字(b)也符合。
那么为什么我得到这个错误?

另外,这个错误很难重现。有时它出现。有时不出现。
有时它出现了好几次,每次都是如此。

有什么想法吗?
提前感谢

忍者
 
当这个错误发生时,确切的时间点是什么?
 

你可以在你的代码中做一个错误案例,并使用 RefreshRates()

我不知道该怎么做,但也许你可以这样做。

如果(Trade==fase)

{

int ErrorCode= GetLastError();

如果(ErrorCode=130)

{

RefreshRates()。

}

}

这段代码可能不对,所以你应该谷歌一下怎么做。

另外,如果你已经做了NormalizeDouble函数 来对数字进行取整。

 
35806:

你可以在你的代码中做一个错误案例并使用RefreshRates()。

这有什么用?
 
RaptorUK:
这有什么帮助?

这可能是一个暂时性的问题。他说这是大小写敏感的,所以刷新率可以解决这个问题。
 
35806:

这可能是一个暂时性的问题。他说这是大小写敏感的,所以刷新率可以解决这个问题。
我们还没有看到任何代码。...如果他没有使用任何预定义的变量,那么刷新率的多少都不会有帮助。
 

确实如此。

 
谢谢你的想法。

猛禽,我不知道上述交易的价差。我在代码中添加了一个日志输出,下次错误发生时,我就能告诉你点差。
但你能告诉我,为什么点差很重要?在确定止损的时候,我需要以何种方式考虑到点差?

我发送一个订单,例如:
int ticket = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green);

因此我在发送订单时使用的唯一预定义变量是。Ask
SLIPPAGE和TAKEPROFIT都是0。
EXPERT_ID是一些唯一的神奇数字
position_size是一个整数,例如3
initial_stop是我的止损,(在上面的例子中)是Bid - risk。
风险是一个大于(MODE_STOPLEVEL * Point)的值,就第一篇文章中的交易而言。风险是:1.35
 
shinobi:
谢谢你的想法。

猛禽,我不知道上述交易的价差。我在代码中添加了一个日志输出,下次错误发生时,我就能告诉你点差。
但你能告诉我,为什么点差很重要?在确定止损的时候,我需要以何种方式考虑到点差?


把打印的内容添加到日志中,以便将来 使用,这一点做得很好。)

我总是要考虑很久,考虑哪里需要考虑传播,哪里不需要考虑......我似乎在这方面有一个心理障碍......但我认为我是正确的。

对于买入来说,这并不重要,以卖出价买入,卖出价将发生在买入价,所以价差已经被计入你的开盘价。 对于卖出来说,这是一个不同的问题 ......你以买入价卖出,你的止损将以卖出价为准 ......卖出价在哪里? 这取决于当时的点差 ...... 我认为这是正确的,请考虑一下,看看这是否有意义。如果我错了,我很乐意被纠正 ... :-)

 
int ticket = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, Green);
EAs必须为4/5位数的经纪商、TP、SL和滑点进行调整。在ECN经纪公司,你必须先开仓,然后再设置止损。
//++++ These are adjusted for 5 digit brokers.
int     pips2points;    // slippage  3 pips    3=points    30=points
double  pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)
int     init(){
     if (Digits % 2 == 1){      // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
                pips2dbl    = Point*10; pips2points = 10;   Digits.pips = 1;
    } else {    pips2dbl    = Point;    pips2points =  1;   Digits.pips = 0; }
    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
//---- These are adjusted for 5 digit brokers.
    /* On ECN brokers you must open first and THEN set stops
    int ticket = OrderSend(...)
    if (ticket < 0)
       Alert("OrderSend failed: ", GetLastError());
    else if (!OrderSelect(ticket, SELECT_BY_POS))
       Alert("OrderSelect failed: ", GetLastError());
    else if (!OrderModify(OrderTicket()...)
       Alert("OrderModify failed: ", GetLastError());
     */
 
35806:

这可能是一个暂时性的问题。他说这是大小写敏感的,所以刷新率可以解决这个问题。
AFAIK RefreshRates()与错误130 没有关系。