I see your alpha on that screen. You build a great model, everything looks shiny on paper... and then real-world execution shows up like a drunk raccoon at your fancy dinner party. Sound familiar?
Here’s the thing though: we didn’t change our model at all.
No new signals. No extra filters. No overfitting voodoo.
We just made 3 small code-level tweaks, and suddenly, millions saved. Literally. And yes, I mean in actual dollars.
Why Slippage Is the Silent Killer
We’re talking about the hidden trading costs that slowly erode your PnL. Most traders look at commissions and bid-ask spreads and think that’s the whole story.
If you’re not accounting for slippage correctly in your backtest (or worse, not even modeling it), you’re playing yourself. Big time.
Tweak #1: Timestamp Your Orders Better
This one’s so obvious.
We were submitting our simulated orders **at the close**, but executing them **as if we got filled immediately**. You know... the lazy way 😬.
Here’s what we did instead:
We started tracking exact timestamps when our signal fired.
We then added a buffer to simulate the delay between signal and execution.
Backtest results suddenly got way more realistic.
Takeaway: Just because your model says “buy” at 3:59 PM doesn’t mean you’re getting filled at that price. Add latency. Respect reality.
Tweak #2: Trade Size Scaling Based on Liquidity
Ever tried pushing a few million dollars into a low-float stock? Yeah... good luck with that. :) Slippage will eat your lunch and then ask for dessert.
So we implemented a dynamic scaling system. If the daily volume is low, we throttle the order size. If the volume is fat, we let it rip.
How we modeled it:
Calculate average 20-day volume.
Set a cap (e.g., 5% of ADV).
Adjust position sizing dynamically.
Just this tweak alone gave us a double whammy: fewer price impacts, and better fills in live trading. Honestly, should’ve done it earlier.
Tweak #3: Batch Orders Intelligently
This one was gold. We used to shoot out individual orders like a toddler with a confetti cannon. Now we batch intelligently grouping trades by symbol, side, and urgency.
We now ask: can we net this long/short into a smaller net order? Can we delay low-priority trades for better liquidity?
Benefits:
Lower market footprint
Reduced execution frequency
Less signaling to the market
Result? Less slippage. Fewer regrets. Cleaner fills.
Bonus: The Slippage Audit
We now run a weekly slippage audit across all our live strategies. If a strategy is bleeding more than 30bps in slippage consistently, it goes under the microscope.
We found one strategy losing $17k/month just because of poor execution logic. Didn’t touch the signal. Just refactored the fill algorithm….. fixed.
Wrapping It Up
Slippage won’t kill you all at once it’ll bleed you slowly until one day, you’re wondering why that edge that “crushed” backtests now limps in real trading.
We didn’t change our model. We just fixed the plumbing. Better order timing. Smarter sizing. Tighter batching. That’s it. Small tweaks….big wins.
So yeah, go look at your code. Your fills. Your timestamps. Your liquidity filters. Because sometimes the alpha isn’t in the signal it’s in the execution.