OrderSend() slippage parameter, in points or in pips?

To add comments, please log in or register
Roman
341
Roman  

I'm pretty sure it's in points, but I want to make absolutely certain!

Thanks!! :)

Ubzen
5298
Ubzen  
It's points :)
Simon Gniadkowski
17205
Simon Gniadkowski  
Pips on a 4 digit Broker, Pips * 10 on a 5 digit Broker
dabbler
1091
dabbler  
nanquan:

I'm pretty sure it's in points, but I want to make absolutely certain!

Thanks!! :)

Brokers work in Points not pips so yes it is in Points.
Simon Gniadkowski
17205
Simon Gniadkowski  
dabbler:
Are you sure you wouldn't like to delete that post? Pips * 10 !

No, I think I'm happy with it.

In my limited experience Pips are what many people understand as being the last digit on a 4 digit Broker . . . so on a 5 digit broker Slippage would be specified in terms of the 4 digit . . . but then multiplied by 10.

dabbler
1091
dabbler  

"Pip" has been described as "percentage in points" because for a pair with a value around 1.0000 the last digit is 0.01%, one hundredth of a percent. Now bring in 5 digit brokers and this definition still holds but traders now get sub-pip price changes. And you now see spreads of 1.6 pips instead of 2 pips.

https://alpari.com/en/forex-trading/spreads-and-margins.html

Notice how they are all in tenths of a pip resolution. That is what all this "pip to point conversion" is all about. Points are always the smallest movement on FOREX. You just have to stay clear of wretched XAUUSD which moves in 5 point intervals just to be annoying!

William Roeder
20089
William Roeder  
On a 4 digit broker Point == pip. On a 5 digit broker Point = 1/10 pip. The unit for slippage is points. Thus I repeatedly say 'EA's 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.015      0.0150
int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)
int     init(){                                                     OptParameters();
     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(..., 0,0,...)
    if (ticket < 0)
       Alert("OrderSend failed: ", GetLastError());
    else if (!OrderSelect(ticket, SELECT_BY_TICKET))
       Alert("OrderSelect failed: ", GetLastError());
    else if (!OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0)
       Alert("OrderModify failed: ", GetLastError());
     */
William Roeder
20089
William Roeder  
dabbler:
Points are always the smallest movement on FOREX. You just have to stay clear of wretched XAUUSD which moves in 5 point intervals just to be annoying!

The smallest movement is always TICKSIZE not Point. On Forex they're numerically the same. Not necessarily so for XAUUSD, XAGUSD, DE30, etc.

For Pending orders, the open price must be a multiple of TickSize

double NormalizePrice(double p, string pair=""){
    // https://forum.mql4.com/43064#515262 zzuegg reports for non-currency DE30:
    // MarketInfo(chart.symbol,MODE_TICKSIZE) returns 0.5
    // MarketInfo(chart.symbol,MODE_DIGITS) return 1
    // Point = 0.1
    // Prices to open must be a multiple of ticksize
    if (pair == "") pair = Symbol();
    double ts = MarketInfo(pair, MODE_TICKSIZE)
    return( MathRound(p/ts) * ts );
}
Tjipke de Vries
6626
Tjipke de Vries  
nanquan:

I'm pretty sure it's in points, but I want to make absolutely certain!

Thanks!! :)

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE) 

Maybe you know it already first to know is why you use Slippage in a OrderSend or OrderClose function....

It is an integer so basically a whole positive number you can choose 0,1,2,3,..... for Slippage

not 0.0001, 0.0002, 0.0003, or 0.00001, 0.00002, 0.00003

The prices in forex are changing very fast in a second it can change a several times

If we send our order to buy at the last price and we haven't use Slippage and the price has been changed a little then a requote will happen...

Using Slippage makes it to allow to buy when the price is between " lastknownprice - Slippage * Points " and " lastknownprice + Slippage * Points "

So the conclusion must be that Slippage is basically not Points ==== POINTS IS NOT AN INTEGER ====

dabbler
1091
dabbler  
deVries:


So the conclusion must be that Slippage is basically not Points ==== POINTS IS NOT AN INTEGER ====
You were doing so well until this last line. The units of slippage in the OrderSend are Points. If you put in 1 that means 1 Point; that is what we mean when we state the units.
Simon Gniadkowski
17205
Simon Gniadkowski  
dabbler:
You were doing so well until this last line.

:-)

Interesting how such a simple thing can be viewed the same but differently by so many people.

123
To add comments, please log in or register