Replicating Kelly Criterion Theoretical Result in Python
I am trying to identify the optimal bet of a parlor game in order to see if I can validate the Kelly Criterion's theoretical optimal bet size. Here is the game. You flip a coin N Times. If heads, you win 2x your bet. If tails, you lose your bet. According to the Kelly Criterion, the optimal bet size is .25 of your bank roll. My code is showing erratic values.
See slide 5 below: http://people.math.gatech.edu/~shenk/OptionsClub/kellyOptionTalk1.pdf
In order to solve the problem, I ran N simulations of N coin tosses each. It seems like the Central Limit Theorem is not helping me here. I ran 1000 simulations and 1000 coin tosses, and I am getting optimal bet sizes near 1 in some cases.
Is there a hidden issue with my logic?
import random
import matplotlib.pyplot as plt
import pandas as pd
#this program simulates a parlor coin game. You flip a coin N times. You
#always pick Heads. If you bet heads and win your return is 2x your bet. If
#you bet heads and lose, you lost your bet (not double your bet)
coin_value = ['H','T']
simulations = 10 #number of simulations of the N coin toss game
coin_tosses = 10 #number of times you flip a coin per simulation
game_result =
for x in range(0,100):
bet_size = (x/100) #set the bet percentage
for sim in range(0, simulations): #we run N simulations, which play N
#coin tosses per simulation
bank_roll = 100 #starting bank roll for each simulation
for coin_toss in range(0, coin_tosses): #we toss the coin N times
outcome = random.choice(coin_value)
if outcome == 'H':
profit_loss = 2 * (bet_size * bank_roll) #Double your bet and
#add that to bankroll
result = 'W'
elif outcome == 'T':
profit_loss = -(bet_size * bank_roll) #Loss your bet and add
#that to bankroll
result = 'L'
bank_roll = bank_roll + profit_loss
#below I create a dataframe which has columns below
game_result.append([bet_size, result, bank_roll, sim, coin_toss])
#this is your ending bankroll for each simulation
df = pd.DataFrame(game_result, columns = ['Bet_Size','result','Bankroll',
'sim', 'coin_toss'])
df = df[df['coin_toss'] == (coin_tosses - 1)] #this selects the last coin
#toss for each simulation. Effectively, this is your ending balance after N
#coin tosses.
x = df.groupby(['Bet_Size'])['Bankroll'].mean() #calculated E[V] by bet
size by averaging the simulations based on bet size
x.plot(x= 'Bet Size', y = 'Expected Value')
statistics finance quantitative-finance
add a comment |
I am trying to identify the optimal bet of a parlor game in order to see if I can validate the Kelly Criterion's theoretical optimal bet size. Here is the game. You flip a coin N Times. If heads, you win 2x your bet. If tails, you lose your bet. According to the Kelly Criterion, the optimal bet size is .25 of your bank roll. My code is showing erratic values.
See slide 5 below: http://people.math.gatech.edu/~shenk/OptionsClub/kellyOptionTalk1.pdf
In order to solve the problem, I ran N simulations of N coin tosses each. It seems like the Central Limit Theorem is not helping me here. I ran 1000 simulations and 1000 coin tosses, and I am getting optimal bet sizes near 1 in some cases.
Is there a hidden issue with my logic?
import random
import matplotlib.pyplot as plt
import pandas as pd
#this program simulates a parlor coin game. You flip a coin N times. You
#always pick Heads. If you bet heads and win your return is 2x your bet. If
#you bet heads and lose, you lost your bet (not double your bet)
coin_value = ['H','T']
simulations = 10 #number of simulations of the N coin toss game
coin_tosses = 10 #number of times you flip a coin per simulation
game_result =
for x in range(0,100):
bet_size = (x/100) #set the bet percentage
for sim in range(0, simulations): #we run N simulations, which play N
#coin tosses per simulation
bank_roll = 100 #starting bank roll for each simulation
for coin_toss in range(0, coin_tosses): #we toss the coin N times
outcome = random.choice(coin_value)
if outcome == 'H':
profit_loss = 2 * (bet_size * bank_roll) #Double your bet and
#add that to bankroll
result = 'W'
elif outcome == 'T':
profit_loss = -(bet_size * bank_roll) #Loss your bet and add
#that to bankroll
result = 'L'
bank_roll = bank_roll + profit_loss
#below I create a dataframe which has columns below
game_result.append([bet_size, result, bank_roll, sim, coin_toss])
#this is your ending bankroll for each simulation
df = pd.DataFrame(game_result, columns = ['Bet_Size','result','Bankroll',
'sim', 'coin_toss'])
df = df[df['coin_toss'] == (coin_tosses - 1)] #this selects the last coin
#toss for each simulation. Effectively, this is your ending balance after N
#coin tosses.
x = df.groupby(['Bet_Size'])['Bankroll'].mean() #calculated E[V] by bet
size by averaging the simulations based on bet size
x.plot(x= 'Bet Size', y = 'Expected Value')
statistics finance quantitative-finance
add a comment |
I am trying to identify the optimal bet of a parlor game in order to see if I can validate the Kelly Criterion's theoretical optimal bet size. Here is the game. You flip a coin N Times. If heads, you win 2x your bet. If tails, you lose your bet. According to the Kelly Criterion, the optimal bet size is .25 of your bank roll. My code is showing erratic values.
See slide 5 below: http://people.math.gatech.edu/~shenk/OptionsClub/kellyOptionTalk1.pdf
In order to solve the problem, I ran N simulations of N coin tosses each. It seems like the Central Limit Theorem is not helping me here. I ran 1000 simulations and 1000 coin tosses, and I am getting optimal bet sizes near 1 in some cases.
Is there a hidden issue with my logic?
import random
import matplotlib.pyplot as plt
import pandas as pd
#this program simulates a parlor coin game. You flip a coin N times. You
#always pick Heads. If you bet heads and win your return is 2x your bet. If
#you bet heads and lose, you lost your bet (not double your bet)
coin_value = ['H','T']
simulations = 10 #number of simulations of the N coin toss game
coin_tosses = 10 #number of times you flip a coin per simulation
game_result =
for x in range(0,100):
bet_size = (x/100) #set the bet percentage
for sim in range(0, simulations): #we run N simulations, which play N
#coin tosses per simulation
bank_roll = 100 #starting bank roll for each simulation
for coin_toss in range(0, coin_tosses): #we toss the coin N times
outcome = random.choice(coin_value)
if outcome == 'H':
profit_loss = 2 * (bet_size * bank_roll) #Double your bet and
#add that to bankroll
result = 'W'
elif outcome == 'T':
profit_loss = -(bet_size * bank_roll) #Loss your bet and add
#that to bankroll
result = 'L'
bank_roll = bank_roll + profit_loss
#below I create a dataframe which has columns below
game_result.append([bet_size, result, bank_roll, sim, coin_toss])
#this is your ending bankroll for each simulation
df = pd.DataFrame(game_result, columns = ['Bet_Size','result','Bankroll',
'sim', 'coin_toss'])
df = df[df['coin_toss'] == (coin_tosses - 1)] #this selects the last coin
#toss for each simulation. Effectively, this is your ending balance after N
#coin tosses.
x = df.groupby(['Bet_Size'])['Bankroll'].mean() #calculated E[V] by bet
size by averaging the simulations based on bet size
x.plot(x= 'Bet Size', y = 'Expected Value')
statistics finance quantitative-finance
I am trying to identify the optimal bet of a parlor game in order to see if I can validate the Kelly Criterion's theoretical optimal bet size. Here is the game. You flip a coin N Times. If heads, you win 2x your bet. If tails, you lose your bet. According to the Kelly Criterion, the optimal bet size is .25 of your bank roll. My code is showing erratic values.
See slide 5 below: http://people.math.gatech.edu/~shenk/OptionsClub/kellyOptionTalk1.pdf
In order to solve the problem, I ran N simulations of N coin tosses each. It seems like the Central Limit Theorem is not helping me here. I ran 1000 simulations and 1000 coin tosses, and I am getting optimal bet sizes near 1 in some cases.
Is there a hidden issue with my logic?
import random
import matplotlib.pyplot as plt
import pandas as pd
#this program simulates a parlor coin game. You flip a coin N times. You
#always pick Heads. If you bet heads and win your return is 2x your bet. If
#you bet heads and lose, you lost your bet (not double your bet)
coin_value = ['H','T']
simulations = 10 #number of simulations of the N coin toss game
coin_tosses = 10 #number of times you flip a coin per simulation
game_result =
for x in range(0,100):
bet_size = (x/100) #set the bet percentage
for sim in range(0, simulations): #we run N simulations, which play N
#coin tosses per simulation
bank_roll = 100 #starting bank roll for each simulation
for coin_toss in range(0, coin_tosses): #we toss the coin N times
outcome = random.choice(coin_value)
if outcome == 'H':
profit_loss = 2 * (bet_size * bank_roll) #Double your bet and
#add that to bankroll
result = 'W'
elif outcome == 'T':
profit_loss = -(bet_size * bank_roll) #Loss your bet and add
#that to bankroll
result = 'L'
bank_roll = bank_roll + profit_loss
#below I create a dataframe which has columns below
game_result.append([bet_size, result, bank_roll, sim, coin_toss])
#this is your ending bankroll for each simulation
df = pd.DataFrame(game_result, columns = ['Bet_Size','result','Bankroll',
'sim', 'coin_toss'])
df = df[df['coin_toss'] == (coin_tosses - 1)] #this selects the last coin
#toss for each simulation. Effectively, this is your ending balance after N
#coin tosses.
x = df.groupby(['Bet_Size'])['Bankroll'].mean() #calculated E[V] by bet
size by averaging the simulations based on bet size
x.plot(x= 'Bet Size', y = 'Expected Value')
statistics finance quantitative-finance
statistics finance quantitative-finance
asked Dec 31 '18 at 22:52
Rob Rob
11
11
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53991974%2freplicating-kelly-criterion-theoretical-result-in-python%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53991974%2freplicating-kelly-criterion-theoretical-result-in-python%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown