I'm currently backtesting and livetesting a RL-based system using the close of the last 1m bar as both ask and bid. While results are excellent, this is not a very realistic arrangement.
In the absence of real quote data (only historic and live OHLCV candlesticks) I'd like to step up the simulation by generating ask/bid quotes on the fly, based on the latest 1m bars.
I've tried a setup where I peek ahead to the next (i.e. current) 1m bar and use the high and low as ask/bid respectively with a bit of fudging to ensure they're at least one tick apart.
Although reasonable for low liquidity assets, this makes for an unrealistically large spread in faster moving contexts.
I've also tried maintaining a running ask/bid by tracking the actual highs and lows and adjusting one or the other based on an intuitive algorithm, but it still doesn't feel right.
I've tried peeking ahead and dividing the current bar in two at the midpoint, then picking a random value in the upper half as the ask and in the lower half as the bid. But this of course leads to a wildly oscillating spread, which makes training unrealistic.
I've read a few papers on estimating spread (Roll 1984, Corwin & Schultz 2011, etc.) but the spread is only half of the problem/solution.
Is there a recommended way of doing this or an algorithm outline for generating semi-realistic quotes based on the latest OHLCV bars?