130

来源:互联网 发布:网络犯罪包括哪些 编辑:程序博客网 时间:2024/05/17 04:17

ordersend && ordermodify , error no 130

这个错误经常发生,意思是无效的止损止盈位

price1 = Bid - step * Point;OrderSend(Symbol(), OP_SELLSTOP, lots, price1, 3, 0, 0, "# ", 0 , 0 ,Red);

有的时候,我们没有设置成price1,而是直接设置成了step,止盈位也容易犯同样的错误;

但更多的时候,是因为价格不符合止损止盈位,具体说来这地方的原理是这样的,首先用

double spl = MarketInfo(Symbol(),MODE_STOPLEVEL);

取得止损位,如果是long order,那么止损位设置应满足:

stoplossPrice < Bid - spl * Point;
如果是short order,相应的止损位应满足:
stoplossPrice > Ask + spl * Point;
ps: Ask - Bid 成为点差,点差分固定点差和浮动点差。

但是现在还有个问题,就是orderModify的时候,仍然会报130的错误,好奇怪,OP_SELLSTOP会有这个错误,但OP_BUYSTOP就没有这个错误。

终于找到了,见原来的代码:

OrderModify(tic2,OpenPrice(),stoplossPrice2,takeprofitPrice2,0,Yellow)
因为这个是挂单,而OpenPrice()是0,所以报错,把这个价格改掉就OK了。

OrderModify(tic2,price2,stoplossPrice2,takeprofitPrice2,0,Yellow)

另外挂单的止损位设置并不严格,举例OP_BUYSTOP,价格设在Ask价格之上,比如1000,那么止损位只要设置在1000以下即可。另外要注意的就是,我这里当时

并没有先用OrderSelect选择一下,这样很容易出现的一个错误就是,这个单号如果已经不存在了,但是EA又没有退出,就会造成OrderModify报错,好像是4058,意思

就是无效的单号,所以最好OrderModify之前先用OrderSelect选择一下。


PS:有的时候会发现价格在变,但start函数进不去,这个时候需要注意上方的Expert Adviser开关是否打开,也可以看下所加载的EA名称右侧是否有笑脸。

0 0
原创粉丝点击