The cheap way to build a paper-trading platform is to always fill the trader at the last printed price. It feels good, it costs nothing to implement, and it ruins traders. They learn habits that don't survive contact with a real order book. When they move to a funded account they get destroyed in their first slippage event because they've never seen one.
What we model
- Live order-book depth from the venue, not synthetic depth.
- Walking the book on market orders larger than the touch.
- Partial fills for limit orders that get pulled before completing.
- Maker vs. taker classification with the venue's actual fee schedule.
- Latency between order submission and the simulated venue's matching tick.
The result is a fill experience that's deliberately uncomfortable. You won't always get filled at the touch. Your 50-lot market order will walk the book and average up. Your limit order will sit, partially fill, then get pulled when the price moves past it. That's the point.
What we don't model
We don't model market impact for the trader's own orders, because we never route them. The trader is invisible to the venue, so the venue's book doesn't react to them. That's the one place the sim is, by construction, gentler than reality. We're upfront about it. For typical retail position sizes the difference is rounding error; for larger sizes the trader should know they're underestimating slippage.
Why this is a partner-firm question
Prop firms care about this more than retail does. Their entire eval pipeline depends on the sim being a faithful filter for live performance. If the sim is too generous, every trader passes and the firm's funded population is full of survivors of the wrong selection pressure. If it's too punishing, no one passes and the firm has no business. Calibration is the product.