First, I will answer your second question. To reduce a number by 10%, you always multiply by 0.9. I don't know the context in which you think you were told that you sometimes divide by 1.1, but I am sure there is something here you have misunderstood. (I have a guess; since you asked about it, I have added it below.)
1: To remove 10% from 200, and then remove a compound 20% from that value:
- Remove 10% from 200, giving 200 - 200×10% = 200 - 20 = 180.
- Remove 20% from 180, giving 180 - 180×20% = 180 - 36 = 144.
The answer is 144.
2: Your idea here is correct.
3: To add 10% to 200, and then remove a compound 20% from that value:
- Add 10% to 200, giving 200 + 200×10% = 200 + 20 = 220.
- Subtract 20% from 220, giving 220 - 220×20% = 220 - 44 = 176.
4: You can use your idea from #2 here.
To handle multiple increases or reductions, just do them one step at a time.
I hope this is some help.
Suppose you see a price $p$ and you know that this price was marked up by 10% sometime in the past. You want to know what the original price was before the markup. This is $p ÷ 1.1$.
Notice that this is not the same as if you reduce $p$ by 10%! That would be $p × 0.9$, which is different.
I guess that the reason you thought you might reduce a number by 10% by dividing by 1.1 is that you were confused about this case. It seems as though reducing a number by 10% should be the same as undoing an increase of 10%, but it isn't.
For example, if you see a price of \$110 and you know it was marked up by 10%, then the original price was \$110 ÷ 1.1 = \$100. But to reduce \$110 by 10% you calculate 110 × 0.9 = \$99. Undoing a markup of 10% is not the same as reducing by 10%.
I think there must be something wrong with your program. I wrote a python script to try to duplicate your results, and $20\%$ consistently comes out best. Here's my script:
from random import random, seed
seed()
frac = [k/10 for k in range(11)]
bankrolls = 11*[25]
wins = 0
for _ in range(300):
bets = [f*b for (f,b) in zip(frac, bankrolls)]
win = random() <= .6
if win:
wins += 1
bankrolls = [r+b for (r,b) in zip(bankrolls, bets)]
else:
bankrolls = [r-b for (r,b) in zip(bankrolls, bets)]
print(wins, "wins")
for idx, b in enumerate(bankrolls):
print(idx, b)
Here is sample output:
178 wins
0 25.0
1 1525.5418231115136
2 4668.530690514337
3 605.0866915333761
4 2.2038544365635504
5 0.00010387825597102039
6 1.5227053142812533e-11
7 4.2329300312072035e-22
8 3.648424706789544e-39
9 1.0377218907500444e-71
10 0.0
EDIT
I can't find an error in your code, but both our scripts are rather silly. If you start with a bankroll of $B,$ win $W$ times and lose $L$ times, then your bankroll at the end is $B(1+r)^W(1-r)^L$ where $r$ is the percentage you bet each hand. There is no need to do simulations.
You can experiment and see that the ending bankroll is highly sensitive to $W$. With $r=.2,$ an initial bankroll of 25, and $300$ total bets, $W=170$ gives an ending bankroll of $182.16,$ and $W=190$ gives an ending bankroll of $605724.76.$ (Note that the standard deviation of the number of wins is $\sqrt{72}\approx8.5$ so these are not outlandish outcomes.)
I think the flaw in your program is that you are running different simulations for each betting rate. Since the number of wins is not the same for the various regimes, the outcome aren't comparable.
It would be more informative to simply make a table comparing the ending bankroll for different betting ratios and numbers of wins.
Thank you for posting this question. I'd never heard of the Kelly bet before. I'd be interested to know if there are studies taking the probability of ruin into account. For example, if the bettor is a bank or an insurance company say, and it has a string of losses, its reserves will fall below the statutory minimum long before it loses all it capital, and the appropriate regulatory authority will shut it down. How should this be reflected in choosing the optimum bet? For an individual gambler, it's easy to say, "When you've lost all can afford to, go home," but a financial institution can't do that.
Best Answer
Rather than comment on the differences between the two approaches, here's the way I would do it. Think in terms of what you want to keep. In the first step, keep 90%, then in the second step keep 80% of that. So just multiply $690(0.9)(0.8) = 690(0.72) = 496.8$.