Let's break the maths down a bit:
[...]
So let's plug that back in the equation:
(-10BTC)(0.495)+((10BTC)(0.505) * 0.9)
which gives:
-0.405 BTC
The same number the OP gave. In effect, the investors have an expected loss of 0.405 BTC. JD makes up for this, by using a high-water mark on commissions, so that if you've taken an investing loss you get pure +EV until you're eventually back in the profit
I calculated the EV for the investor when there's a single bet of 10 BTC at 2x when you first asked, without reading on to see how you calculated it. I wrote:
player loses 50.5% of the time, investor wins 10 BTC, pays 1 BTC commission, net win +9
player wins 49.5%% of the time, investor loses 10 BTC, net win -10
EV for investor: 0.505 * 9 - 0.495 * 10 = -0.405 = -4.05%
so we agree. If there's only a single 10@2x bet in the first week, the EV for the investor is -4.05% of the amount wagered.
However, I disagree that JD makes up for this by using the high-water mark. While the high-water mark helps a little, I think the most significant factor is that we only take commission on *net* profits, at the end of each week. There's never only a single bet, and as soon as there are more than 17 bets, the EV for the investor goes positive.
Here's the EV for the investor for various numbers of bets:
1 -4.0500%
2 -1.5502%
4 -0.9254%
6 -0.6130%
8 -0.4177%
10 -0.2811%
12 -0.1786%
14 -0.0981%
16 -0.0327%
17 -0.0327%
18 0.0218%
20 0.0681%
30 0.2266%
50 0.3872%
100 0.5501%
200 0.6654%
500 0.7672%
1000 0.8176%
and the script I wrote to calculate that:
#!/usr/bin/env python
f = {}
def factorial(x):
if f.has_key(x): return f[x]
if x < 2: return 1
f[x] = x * factorial(x - 1)
return f[x]
def c(n, k): return factorial(n) / (factorial(k) * factorial(n - k))
p = 0.495
for trials in [1, 2, 4, 6, 8, 10, 12, 14, 16, 17, 18, 20, 30, 50, 100, 200, 500, 1000]:
sum = 0
for wins in range(trials + 1):
profit = (trials - 2 * wins) * 10
if profit > 0: profit = profit * 0.9
v = 100 * c(trials, wins) * p**wins * (1-p)**(trials-wins)
sum += v * profit
print "%4d %7.4f%%" % (trials, sum / (trials * 10))
Edit: I would have run it for bigger numbers of bets, but the script fails shortly after 1000, with errors like:
v = 100 * c(trials, wins) * p**wins * (1-p)**(trials-wins)
OverflowError: long int too large to convert to float
and:
RuntimeError: maximum recursion depth exceeded
I guess I need a better implementation of c().