negative progression · 20,000 sessions per wheel

Does Oscar’s Grind work?

No. On 20,000 seeded European-wheel sessions, Oscar’s Grind walked away $200 up 71.6% of the time and still lost $122.52 per session on average: −$2.67 for every $100 wagered, the house edge within sampling noise.

71.6%
Walked away +$200
European wheel
28.3%
Busted
next stake didn't fit
−$123
Mean result
per session, from $1,000
−$2.67
Per $100 wagered
house edge: −$2.70

How Oscar’s Grind is played

  1. Each series aims to finish exactly one unit ahead. Start at one unit.
  2. After a loss, keep the same stake.
  3. After a win, raise the stake by one unit, but never above what is needed to finish the series one unit up.
  4. When the series reaches +1 unit, start a new series at one unit.

What 20,000 sessions show

Sessions that finished ahead were up $199.95 on average; sessions that finished behind were down $937.49. 28.3% of sessions ended because the next stake no longer fit the bankroll or the table limit.

Oscar’s Grind only raises stakes after wins, which makes it feel conservative. A series that starts badly can still run for hundreds of spins, with the stake creeping up each time a win arrives, while the series deficit grows.

The median session lasted 225 spins. The median longest losing run was 7 spins in a row (the worst of 20,000 was 21), and one session in ten put at least $145 on the table in a single spin.

$0–99
4,593
$100–199
1,066
$200–299
3
$500–599
2
$600–699
2
$900–999
4
$1,000–1,099
2
$1,100–1,199
13
$1,200+
14,315
Final bankroll across 20,000 European-wheel sessions, starting at $1,000. Empty bands omitted. Green is the walk-away line; red bands finished below $1,000.
$1,130$65round 175
One disclosed session (seed 1592639710, European wheel). It stopped when the next stake no longer fit after 175 spins at $65. Open it in Engineer mode to replay the identical run.

European versus American wheel

The same 20,000 seeds, replayed on a double-zero wheel. The second zero roughly doubles the edge to $5.26 per $100 wagered. Measured return goes from −$2.67 to −$5.41 per $100, and the mean session from −$123 to −$281.

Oscar’s Grind results on European and American wheels
MetricEuropean (one zero)American (two zeros)
Walked away +$20071.6%57.5%
Busted (stake no longer fit)28.3%42.2%
Hit the 500-spin cap0.1%0.3%
Finished in profit71.7%57.7%
Mean result per session−$123−$281
Median final bankroll$1,200$1,200
10th / 90th percentile$45 / $1,200$30 / $1,200
Mean amount wagered$4,587$5,192
Return per $100 wagered−$2.67−$5.41

The code that produced these numbers

This Lua is the strategy as Engineer mode runs it, inside the same sandbox and kernel. A test in the repository replays it against the bulk generator on fixed seeds and fails the build if the two ever disagree by a single dollar.

-- Oscar’s Grind: aim for one unit of profit per series, raising the stake only after a win.
-- Session rules shared by every 0xroulette.com/systems page:
-- $5 unit, $500 table max, walk away at +$200, and stop the moment
-- the next stake can't be covered by the bankroll or the table limit.
local UNIT, TABLE_MAX, TARGET = 5, 500, 200

local stake, profit

local function reset() stake, profit = 1, 0 end

local function place(ctx)
  return { { type = "red", amount = UNIT * stake } }
end

local function settle(result)
  if result.net > 0 then
    profit = profit + stake
    if profit >= 1 then
      stake, profit = 1, 0
    else
      stake = math.min(stake + 1, 1 - profit)
    end
  else
    profit = profit - stake
  end
end

-- Shared wrapper: enforces the session rules around place/settle.
strategy = {}
local start, stopped

function strategy.setup(ctx)
  start, stopped = ctx.bankroll, false
  reset()
end

function strategy.bet(ctx)
  if stopped or ctx.bankroll >= start + TARGET then
    stopped = true
    return {}
  end
  local bets, stake = place(ctx), 0
  for _, b in ipairs(bets) do
    if b.amount > TABLE_MAX then stopped = true end
    stake = stake + b.amount
  end
  if stake > ctx.bankroll then stopped = true end
  if stopped then return {} end
  return bets
end

function strategy.on_spin(ctx, result)
  if not stopped then settle(result) end
end
Run it yourself.Opens Engineer mode with this code and seed 1592639710, the session charted above. Change a line, press run, see what moves.

Session rules

Bankroll / unit
$1,000 / $5
Exit rules
walk away at +$200 ($1,200); 500 spins; stop when the next stake exceeds the bankroll or the table maximum
Table maximum
$500 per bet
Seeds
20,000 per wheel from master seed 0x6d2e6c8b, identical for every system

Limitations

One bankroll, one unit size, one table limit, and one walk-away target. A bigger bankroll or a higher limit moves where a progression breaks; it does not change the return per dollar wagered. Spins are fair and independent, as on a correctly functioning wheel or a certified RNG. Physical wheel bias is a separate question, covered on Physics.

Related