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

 

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

Thanks!! :)

 
It's points :)
 
Pips on a 4 digit Broker, Pips * 10 on a 5 digit Broker
 
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.
 
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.

 

"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!

 
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());
     */
 
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 );
}
 
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 ====

 
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.
 
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.

Reason: