Replicating Kelly Criterion Theoretical Result in Python












0















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')









share|improve this question



























    0















    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')









    share|improve this question

























      0












      0








      0








      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')









      share|improve this question














      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






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Dec 31 '18 at 22:52









      Rob Rob

      11




      11
























          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
          });


          }
          });














          draft saved

          draft discarded


















          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
















          draft saved

          draft discarded




















































          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          Mossoró

          Error while reading .h5 file using the rhdf5 package in R

          Pushsharp Apns notification error: 'InvalidToken'