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名称右侧是否有笑脸。