Finding best D'Alembert Multiple




import random
import matplotlib
import matplotlib.pyplot as plt
import time



def rollDice():
    roll = random.randint(1,100)

    if roll <= 50:
        #print roll,'roll was 1-50, you lose. Play again!'
        return False

    elif roll >= 51:
        #print roll,'roll was 51-99, you win! *pretty lights flash* Play more!'
        return True

def dAlembert(funds,initial_wager,wager_count):

    global Ret
    global da_busts
    global da_profits

    value = funds
    wager = initial_wager
    currentWager = 1
    previousWager = 'win'
    previousWagerAmount = initial_wager

    while currentWager <= wager_count:
        if previousWager == 'win':
            if wager == initial_wager:
                pass
            else:
                wager -= initial_wager

            #print 'current wager:',wager,'value:',value

            if rollDice():
                value += wager
                #print 'we won, current value:',value
                previousWagerAmount = wager
            else:
                value -= wager
                previousWager = 'loss'
                #print 'we lost, current value',value
                previousWagerAmount = wager

                if value <= 0:
                    da_busts += 1
                    break

        elif previousWager == 'loss':
            wager = previousWagerAmount + initial_wager
            if (value - wager) <= 0:
                wager = value

            #print 'lost the last wager, current wager:',wager,'value',value


            if rollDice():
                value += wager
                #print 'we won, current value:',value
                previousWagerAmount = wager
                previousWager = 'win'

            else:
                value -= wager
                #print 'we lost, current value:',value
                previousWagerAmount = wager

                if value <= 0:
                    da_busts += 1
                    break
        currentWager += 1

    if value > funds:
        da_profits += 1

    #print value

    Ret += value


def multiple_bettor(funds, initial_wager, wager_count):
    global multiple_busts
    global multiple_profits

    value = funds
    wager = initial_wager
    wX = []
    vY = []

    currentWager = 1
    previousWager = 'win'
    previousWagerAmount = initial_wager

    while currentWager <= wager_count:
        if previousWager == 'win':
            #print 'we won the last wager, great'
            if rollDice():
                value+=wager
                #print value
                wX.append(currentWager)
                vY.append(value)
            else:
                value -= wager
                previousWager = 'loss'
                #print value
                previousWagerAmount = wager
                wX.append(currentWager)
                vY.append(value)
                if value <= 0:
                    #print 'we went broke after'.currentWager,'bets'
                    multiple_busts += 1
                    break

        
        elif previousWager == 'loss':
            #print 'we lost the last one, so we will be smart and double'
            if rollDice():
                wager = previousWagerAmount * random_multiple

                if (value - wager) < 0:
                    wager = value
                #print 'we won',wager
                value += wager
                #print value
                wager = initial_wager
                previousWager = 'win'
                wX.append(currentWager)
                vY.append(value)
            else:
                wager = previousWagerAmount * random_multiple
                if (value - wager) < 0:
                    wager = value
                #print 'we lost',wager
                value -= wager
                previousWagerAmount = wager
                wX.append(currentWager)
                vY.append(value)
                if value <= 0:
                    #print 'we went broke after',currentWager,'bets'
                    multiple_busts += 1
                    break

                #print value
                previousWager = 'loss'

                


        currentWager += 1

    #print value
    #plt.plot(wX,vY,color)
    if value > funds:
        multiple_profits += 1

    
    





    

def doubler_bettor(funds, initial_wager, wager_count,color):
    value = funds
    wager = initial_wager
    global doubler_busts
    global doubler_profits
    wX = []
    vY = []

    currentWager = 1
    previousWager = 'win'
    previousWagerAmount = initial_wager

    while currentWager <= wager_count:
        if previousWager == 'win':
            #print 'we won the last wager, great'
            if rollDice():
                value+=wager
                #print value
                wX.append(currentWager)
                vY.append(value)
            else:
                value -= wager
                previousWager = 'loss'
                #print value
                previousWagerAmount = wager
                wX.append(currentWager)
                vY.append(value)
                if value <= 0:
                    #print 'we went broke after'.currentWager,'bets'
                    doubler_busts += 1
                    break

        
        elif previousWager == 'loss':
            #print 'we lost the last one, so we will be smart and double'
            if rollDice():
                wager = previousWagerAmount * 2

                if (value - wager) < 0:
                    wager = value
                #print 'we won',wager
                value += wager
                #print value
                wager = initial_wager
                previousWager = 'win'
                wX.append(currentWager)
                vY.append(value)
            else:
                wager = previousWagerAmount * 2
                if (value - wager) < 0:
                    wager = value
                #print 'we lost',wager
                value -= wager
                previousWagerAmount = wager
                wX.append(currentWager)
                vY.append(value)
                if value <= 0:
                    #print 'we went broke after',currentWager,'bets'
                    doubler_busts += 1
                    break

                #print value
                previousWager = 'loss'

                


        currentWager += 1

    #print value
    plt.plot(wX,vY,color)
    if value > funds:
        doubler_profits += 1
        
        
def simple_bettor(funds, initial_wager, wager_count,color):
    global simple_busts
    global simple_profits
    value = funds
    wager = initial_wager

    wX = []
    vY = []

    currentWager = 1

    while currentWager <= wager_count:
        if rollDice():
            value += wager
            wX.append(currentWager)
            vY.append(value)
        else:
            value -= wager
            wX.append(currentWager)
            vY.append(value)

        currentWager += 1

    if value <= 0:
        value = 0
        simple_busts+=1
    #print 'Funds:', value

    plt.plot(wX,vY,color)
    if value > funds:
        value = 0
        simple_profits+=1


lower_bust = 31.235
higher_profit = 63.208

sampleSize = 1000
startingFunds = 10000



while True:
    #wagerSize = 100
    #wagerCount = 100000
    wagerSize = random.uniform(1.0,1000.00)
    wagerCount = random.uniform(10.0,10000)

    Ret = 0.0
    da_profits = 0.0         
    da_busts = 0.0
    daSampSize = 10000
    counter = 1

    while counter <= daSampSize:  
        dAlembert(startingFunds,wagerSize,wagerCount)
        counter+=1

    ROI = Ret - (daSampSize*startingFunds)
    totalInvested = daSampSize*startingFunds
    percentROI = (ROI/totalInvested)*100.00
    # add var
    wagerSizePercent = (wagerSize/startingFunds)*100.00


    # if over 1.
    if percentROI > 1:
        print '___________________________________________'
        print 'Total invested:',daSampSize*startingFunds
        print 'Total Return:', Ret
        print 'ROI',Ret - (daSampSize*startingFunds)
        print 'Percent ROI:',percentROI
        print 'Bust Rate:',(da_busts/daSampSize)*100.00
        print 'Profit rate:',(da_profits/daSampSize)*100.00
        print 'wager size:',wagerSize
        print 'wager count:',wagerCount
        #################### change var
        print 'wager size percentage:',wagerSizePercent

        ### we want to begin saving this stuff...

        ## stuff to save: percentROI,wagerSizePercent,wagerCount

        saveFile = open('monteCarlo.csv','a')
        saveLine = '\n'+str(percentROI)+','+str(wagerSizePercent)+','+str(wagerCount)+',g'
        saveFile.write(saveLine)
        saveFile.close()
        
    elif percentROI < -1:
        print '___________________________________________'
        print 'Total invested:',daSampSize*startingFunds
        print 'Total Return:', Ret
        print 'ROI',Ret - (daSampSize*startingFunds)
        print 'Percent ROI:',percentROI
        print 'Bust Rate:',(da_busts/daSampSize)*100.00
        print 'Profit rate:',(da_profits/daSampSize)*100.00
        print 'wager size:',wagerSize
        print 'wager count:',wagerCount
        #################### change var
        print 'wager size percentage:',wagerSizePercent

        ### we want to begin saving this stuff...

        ## stuff to save: percentROI,wagerSizePercent,wagerCount

        saveFile = open('monteCarlo.csv','a')
        saveLine = '\n'+str(percentROI)+','+str(wagerSizePercent)+','+str(wagerCount)+',r'
        saveFile.write(saveLine)
        saveFile.close()
		

The next tutorial:





  • Monte Carlo Introduction
  • Monte Carlo dice Function
  • Creating a simple Bettor
  • Plotting Results with Matpltolib
  • Martingale Strategy
  • Bettor Statistics
  • More comparison
  • Graphing Monte Carlo
  • Fixing Debt Issues
  • Analyzing Monte Carlo results
  • Using Monte Carlo to find Best multiple
  • Checking betting results
  • D'Alembert Strategy
  • 50/50 Odds
  • Analysis of D'Alembert
  • Comparing Profitability
  • Finding best D'Alembert Multiple
  • Two dimensional charting monte carlo
  • Monte Carlo Simulation and Python
  • Labouchere System for Gambling Tested