
Think you found
an edge? Prove it.
A roulette simulator and strategy backtester for developers. Place a bet, automate a system, or write the strategy in Lua. Every run is seeded. Every result is reproducible.
Play it. Observe it. Program it.
Start with the table. Add instruments when you want them.

Game
playPlace chips on a faithful table, spin a physical wheel, and inspect the real probability and expected value behind every bet.
Launch Game
Advanced
observeRun classic systems on autopilot. Watch their equity curves, streaks, drawdowns, and failure modes emerge in real time.
Launch Advanced
Engineer
buildWrite Lua in the browser, backtest thousands of spins in a sandboxed VM, then forward-test the same code against the live wheel.
Launch EngineerA dozen lines can feel unbeatable.
This is a working Martingale. It wins often, then concentrates the accumulated risk into one catastrophic sequence. Run it long enough and the shape becomes obvious.
See it across 20,000 seeded sessionsstrategy = {}
local step = 0
function strategy.bet(ctx)
return { { type = "black", amount = 5 * (2 ^ step) } }
end
function strategy.on_spin(ctx, result)
step = result.net > 0 and 0 or step + 1
end
-- a working Martingale. feels unstoppable. watch it lose.20 systems. Same spins. Same edge.
Every popular betting system, backtested on identical seeds, with the Lua that ran it.
- Martingale+$200 in 69% · −$2.52 per $100
- Fibonacci+$200 in 69% · −$2.78 per $100
- Labouchère+$200 in 76% · −$2.69 per $100
- D’Alembert+$200 in 72% · −$2.87 per $100
- James Bond+$200 in 70% · −$2.66 per $100
- Paroli+$200 in 21% · −$2.69 per $100
The edge is fixed. The path is not.
Betting systems cannot change a fair wheel's expected value. They can change volatility, drawdown, hit rate, and time to ruin. Those differences are worth measuring precisely. The single-spin math is on the odds pages: every bet, both wheels, exact.