If your open price for a Buy Stop is too close to Ask you will get an error 130 . . it's all here: https://book.mql4.com/appendix/limits
If that doesn't help then please show the error from the log including the Bid and Ask at the time of placing the order and the Entry price and Order type.
If your open price for a Buy Stop is too close to Ask you will get an error 130 . . it's all here: https://book.mql4.com/appendix/limits
If that doesn't help then please show the error from the log including the Bid and Ask at the time of placing the order and the Entry price and Order type.
Okay, this did it!
/** * Places an order * @param int Type * @param double Lotz * @param double PendingPrice Only for pending orders */ void PlaceOrder(int Type, double Lotz, double PendingPrice = 0) { // Local int err; double l_stoploss = 0; double l_price = 0; color l_color; double stoplevel = getStopLevelInPips(); RefreshRates(); // Price and color for the trade type if(Type == OP_BUY){ l_price = Ask; l_color = Blue; } if(Type == OP_SELL){ l_price = Bid; l_color = Red; } if(Type == OP_BUYSTOP) { l_price = PendingPrice; if(l_price <= Ask+stoplevel*DecimalPip) l_price = Ask + stoplevel*DecimalPip; l_color = LightBlue; } if(Type == OP_SELLSTOP) { l_price = PendingPrice; if(l_price >= Bid-stoplevel*DecimalPip) l_price = Bid - stoplevel*DecimalPip; l_color = Salmon; } //-- Buy limit and sell limit not supported // Avoid collusions while (IsTradeContextBusy()) Sleep(1000); int l_datetime = TimeCurrent(); // Send order int l_ticket = OrderSend(Symbol(), Type, Lotz, l_price, Slippage, 0, 0, "", MagicNumber, 0, l_color); // Rety if failure if (l_ticket == -1) { while(l_ticket == -1 && TimeCurrent() - l_datetime < 60 && !IsTesting()) { err = GetLastError(); if (err == 148) return; Sleep(1000); while (IsTradeContextBusy()) Sleep(1000); RefreshRates(); l_ticket = OrderSend(Symbol(), Type, Lotz, l_price, Slippage, 0, 0, "", MagicNumber, 0, l_color); } if (l_ticket == -1) Print(ShortName +" (OrderSend Error) "+ ErrorDescription(GetLastError())); } if (l_ticket != -1) { LastOrderTime[Type] = iTime(Symbol(), 0, 0); LastOrderTicket[Type] = l_ticket; LastOrderLots[Type] = Lotz; d_totaltrades++; if (OrderSelect(l_ticket, SELECT_BY_TICKET, MODE_TRADES)) { l_stoploss = MyNormalizeDouble(GetStopLoss(Type)); if(!OrderModify(l_ticket, OrderOpenPrice(), l_stoploss, 0, 0, Green)) Print(ShortName +" (OrderModify Error) "+ ErrorDescription(GetLastError())); } } }
if(l_price <= Ask+stoplevel*DecimalPip) OrderSend(Symbol(), Type, Lotz, l_price, Slippage...EA's must adjust for 4/5 digit brokers. You appear to adjust stoplevel but you don't adjust Slippage
EA's must adjust for 4/5 digit brokers. You appear to adjust stoplevel but you don't adjust Slippage
flaab is using an ECN broker which ignores the slippage parameter. You cannot control slippage with a market order on an ECN broker. https://www.mql5.com/en/forum/123636 and here http://www.forexfactory.com/showthread.php?t=8046
If you want some control with an ECN then use limit or stop orders, but then you cannot control spread. So the house always has the upper hand! Go figure.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi everybody,
I am getting some 130 errors placing pending orders (sell stops and buy stops). The funny thing is that, for ECN compliance, I am opening all trades without initial stoploss or takeprofit, to later update the ticket and set the proper stoploss and takeprofit levels. Therefore, why is mt4 throwing a invalid stops error? (I am accounting for the stoplevel to set the pending orders)
Thanks in advance :)