This leaves a little bit to the imagination; what is the "expected price" of a trade. In the case of market orders, it should be the bid or ask at the time you submit your order. For market orders to buy, you get filled at the ask, and for sell, you get filled at the bid. For trading the S&P e-mini contract (ES), the spread is almost always 1/4 point or $12.50. If you send a market order to buy when the ask is 1344.00 like it is right now and you get filled at 1344.00 then you have had no slippage. You could then instantly turn around and do a market sell with the same bid-ask and as long as the bid-ask has not moved while your order is en route then you'll get filled at 1343.75, which again would not constitute any slippage. You got the expected price. However, this little exercise has cost 1 tick, or 1/4 point, whatever you choose to call it, and you have lost $12.50 plus 2 commissions which is typically $5.00 or a little less for a self managed account, so you are out $17.50. And this happens in milliseconds.
So what we see here is that while we received the expected prices, which indicates no slippage, it cost us 1/4 point. Isn't the 1/4 point slippage? Most people would say so, because they are using the last market price as the expected price. I have a little problem with this because the market price is constantly moving back and forth between the bid and ask while the bid and ask aren't moving. The market would not seem to be a very good reference point because it move so fast. Depending on when you choose to measure it on a given trade your slippage could be 0, 1, or 2 ticks. This averages out to 1 tick, but to me the simpler way to think about it is to reference the bid-ask prices.
I can prove to you any day of the week when the market is open that I can get in and out of an ES position and it will only cost me 1/4 point or $12.50. So why in all my strategy reports do I use $25.00 per round trip? Let's take the ESCombo strategy for example. This strategy uses trade execution code which places trades using something called intrabar order generation(IOG). The strategy is actually designed using primarily limit orders, but strategy automation with limit orders is very prone to failure, as in, no order gets sent. So what I do is to use something I call a simulated limit order. When the market price goes 1 tick beyond my limit price, using the IOG methodology, a market order gets sent immediately. This nearly always results in getting filled at what would have been the limit price if we were using limit orders. Slippage on a limit order is necessarily zero. If you trade with limit orders you will either get your limit price, or you will not get filled. Your "expected price" is the limit price and that is that. So, I could publish strategy reports with zero slippage, but then I would spend lots and lots of time explaining to people why there's no slippage. Generally people are not going to trust strategies designed without slippage, so we have slippage, but it's a little bit of an illusion.
One of the problems with the IOG method is that the fills don't always hit the mark. Sometimes the fill is an improvement in price, but more often it is more slippage. This number is very hard to determine, but some of the data I've analyzed suggests that it could be as much as an additional tenth of a point or about $5.00 per round trip. So while I'm using $25.00 it may be $30.00. This is the difference between the planned slippage, which is the $25.00, and the unplanned slippage, or the extra $5.00.
In most of my personal trading I use limit orders which I enter manually or other methods that are not suitable for broker managed autotrading. Fortunately, a workaround is available and I'm hoping to implement this for all broker managed autotrading in the very near future. This means for actual trading there will be no, and I mean zero, slippage. Does this mean we're going to be better off by $25 or $30 per trade? No, it doesn't. It means we'll be better off by the previously mentioned $5.00. But, for systems with small margins per trade like mine this is very important.
There is one additional benefit to this approach. Limit orders sometimes get filled or partially filled without the market ever going through your price. This happens when you become first in line with the inside bid or ask in the exchange order queue. A market order comes and you filled. This cannot be determined in any way with backtesting. In backtesting the assumption always is, you get filled when you limit price is touched, and then you must take 1/4 point of slippage. This is part of the reason for using the 1/2 point because the TradeStation backtesting functionality on limit orders is that you get filled as soon as the price touches your limit price. In the real world this happens about 5% of the time with ES. However, that 5% is well getting and the only way to get it is with limit orders.
If any of you are TradeStation savvy, then you may be wondering about using the option in the backtest setup to fill limit orders only when the limit is exceeded. They do have this feature, and it would be really nice if it worked the way it was supposed to. It doesn't, so I don't use it any more.
I'll leave it there having, I'm sure, totally confused everyone. Questions and comments are welcome.