MQL4 - automated forex trading   /  

Forum

Login | Register | Language: ru cn en
MetaTrader 5 for Android - Enjoy Convenient Mobility

OrderSend - Error Code 130 - OP_BUYLIMIT

Back to topics list  | 1 2 3 To post a new topic, please log in or register
avatar
2
mark1808 2010.01.18 13:41
 

Hi,

I know there are similar questions to this one elsewhere on the forum, but none of them seem to solve the problem with my script. I am fairly new to MQL4, so I'm not sure if there's something obvious that I'm doing wrong.

I have simplified my problem down to placing a simple limit order. Whenever I try to place an OP_BUYLIMIT order, I get the error #130. I am using the Alpari UK Demo account. This is my code....

int Limit = 10;
int stoploss = 2000;
int takeprofit = 2000;

double BuyLimitPrice = Ask-(Limit*Point);
double StopPrice = Ask-((Limit+stoploss)*Point);
double TakeProfitPrice = Ask+((-Limit+takeprofit)*Point);

Print(BuyLimitPrice + " Stop: " + StopPrice + " TakeProfit: " + TakeProfitPrice);

int ticket=OrderSend(Symbol(),OP_BUYLIMIT,0.1,NormalizeDouble(BuyLimitPrice,Digits),5,NormalizeDouble(StopPrice,Digits),NormalizeDouble(TakeProfitPrice,Digits),"LimitTest",0,0,Blue);

I have been testing it on GBPUSD and get the following output:

2010.01.18 10:18:47 2009.12.30 23:59 LimitTesting GBPUSD,H1: OrderSend error 130
2010.01.18 10:18:47 2009.12.30 23:59 LimitTesting GBPUSD,H1: 1.60740000 Stop: 1.58740000 TakeProfit: 1.62740000

I have placed the stoploss and take profit values a fair distance away from the current price and the limit order price, so I'm sure there must be something else wrong.

I have also tried setting the stoploss and take profit values to zero, and this gives the same error.

Any help would be greatly appreciated. Thanks in advance.

Mark

 
U.S. consumer inflation registers the biggest decline in six years
This November U.S. consumer prices recorded their biggest fall in nearly six years, as gasoline prices plunged. This, however, will probably do little to change views the Federal Reserve will start raising interest rates in mid-2015, as Reuters considers.
avatar
Moderator
1936
BarrowBoy 2010.01.18 14:42 #
 

Your pending order price is 'too close to market'

Alpari is sub-pip so your value for Limit is only one full pip

Your entry point for a pending order needs to be further away from current price

Good Luck

-BB-

 
avatar
2
mark1808 2010.01.18 14:58 #
 

Hi BB,

Thanks. That works.

By trail and error, I found that the minimum the value of Limit could be is 30 (3 whole pips). Not sure if this is different for other brokers.

Is there any function that tells you the distance that the limit order needs to be placed away?

Mark

 
avatar
Moderator
1936
BarrowBoy 2010.01.18 15:09 #
 

M

Use http://docs.mql4.com/constants/marketinfo with the MODE_STOPLEVEL

NB - This will be in the pipsize of the broker

avatar
539
Viffer 2010.01.19 03:09 #
 

I have a similar problem. I have error 130 and I can't track down why. I would really appreciate some pointers.

I've checked the following...

The SL is delivered as a real price rather than pips away.

It's the correct format... a double and it's been normalised.

It's the correct figure.... confirmed by print in the line above the ordersend.

It's an allowable distance ~50pips

It's not the Boston Technologies Bridge refered to in another thread


double sl=NormalizeDouble(shortstop,Digits);
Alert ("SL ", sl, " Bid ",Bid );
OrderSend(Symbol(),OP_SELL,lot,Bid,slip,sl, target);             

I get

Alert: SL 1.4255 Bid 1.4201
OrderSend error 130

I have run out of ideas of where to look next... thanks for any help

V

 
avatar
1397
cloudbreaker 2010.01.19 04:04 #
 
Viffer:

I have a similar problem. I have error 130 and I can't track down why. I would really appreciate some pointers.

I've checked the following...

The SL is delivered as a real price rather than pips away.

It's the correct format... a double and it's been normalised.

It's the correct figure.... confirmed by print in the line above the ordersend.

It's an allowable distance ~50pips

It's not the Boston Technologies Bridge refered to in another thread


I get

Alert: SL 1.4255 Bid 1.4201
OrderSend error 130

I have run out of ideas of where to look next... thanks for any help

V

TP could be causing the stops error. What's the value of target?


CB

avatar
539
Viffer 2010.01.19 04:15 #
 
cloudbreaker:

TP could be causing the stops error. What's the value of target?


CB

You found it... TP was miscalculating... Thankyou!!... I was too focused on taking the fault code literally.

V

 
avatar
10032
WHRoeder 2010.01.19 16:43 #
 

mark1808 wrote >>

By trail and error, I found that the minimum the value of Limit could be is 30 (3 whole pips). Not sure if this is different for other brokers.

Is there any function that tells you the distance that the limit order needs to be placed away?

// A pending order price can be no closer to the current price, than this
// amount.  On IBFX it's equal to 30 (3.0 pips.) A TP or SL, can be no
// closer to the order price (open, limit, or stop) or closing price (filled
double // order) than this amount.
minGap.stops    = MarketInfo( Symbol(), MODE_STOPLEVEL )*Point;
Likewise, your constants should be given in pips not points and internally adjusted so it works on any broker.
//---- These are adjusted for 5 digit brokers.
double  pips2points,    // slippage  3 pips    3=points    30=points
        pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)
int init()
{
    pips2dbl    = Point;    pips2points = 1;    Digits.pips = 0;    // re-Init
    if (Digits == 3 || Digits == 5) {
        pips2points *= 10;
        pips2dbl    *= 10;
        Digits.pips++;
    }
//...
Also remember for OP_SELL the SL is relative to the Ask price, so it appears on the chart at 3+2(spread) or 50 points at least from the Bid.
 
avatar
6
Nima 2011.08.23 01:08 #
 

Hi!

I've got some similar problem with an order of type Instant Market Sell . It seems I can get help here

I wrote a sample expert adviser and the problem is this part :

double p = Bid;
int tN = OrderSend(Symbol(),OP_SELL,0.1,p,50,NormalizeDouble(p+1000*Point,Digits),0);
   if(tN > 0){
      Alert("Done");
   }else{
      Alert(ErrorDescription(GetLastError()));
   }

This alerts "invalid stops".

But an order of type OP_SELLLIMIT with exactly same parameters executes with no problem.

I tried different values for stop loss, ranging from 0-Points to 1000-Points and different slippages.

I'm using a demo account with spread 0 and MarketInfo(Symbol(),MODE_STOPLEVEL) returns 0

Help me please!

Thanks a lot

 
avatar
10032
WHRoeder 2011.08.23 01:58 #
 
Nima:

I've got some similar problem with an order of type Instant Market Sell . It seems I can get help here

I tried different values for stop loss, ranging from 0-Points to 1000-Points and different slippages.
  1. On 5 digit brokers you must adjust TP, SL, AND slippage.
    //++++ 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 == 5 || Digits == 3){    // Adjust for five (5) digit brokers.
                    pips2dbl    = Point*10; pips2points = 10;   Digits.pips = 1;
        } else {    pips2dbl    = Point;    pips2points =  1;   Digits.pips = 0; }
        // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
    
  2. 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_TICKET))
        Alert("OrderSelect Failed: ",GetLastError());
    else if (!OrderModify(OrderTicket(), OrderOpenPrice(), ...)
        Alert("OrderModify Failed: ",GetLastError());
    
avatar
6
Nima 2011.08.25 03:06 #
 

Thanks for your reply.

But this code has got the same problem. I used your code and just replaced Slippage.Pips with an integer value, same error raised after executing.

For learning purpose, I want to write a simple expert which sends just one instant sell or buy order, and I want to adjust everything according to parameters queried from broker.

Any advice?

 
Back to topics list   | 1 2 3  

To add comments, please log in or register