前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python做投资-python仿真等价鞅下的收益曲线

用Python做投资-python仿真等价鞅下的收益曲线

作者头像
钱塘小甲子
发布2019-01-28 15:55:16
8630
发布2019-01-28 15:55:16
举报

有一个赌局,抛一枚硬币,正面朝上赢,反面朝上输。然后每次自由下注。

如果我们按照这样的次序下注:1,2,4,8,16,......,2^n.只要有一次获胜,那么我们就从头再来。这里我们可以看出,每次获胜都可以赢得1元钱。因为2^n次方的数列前n-1次项和为2^n-1。这里我们就能看出,只要你有足够多的钱,那么你总能赚钱。这一游戏,就叫做等价鞅。

代码语言:javascript
复制
# -*- coding: utf-8 -*-
"""
Created on Mon Oct 24 16:05:03 2016

@author: Luyixiao
"""

import numpy as np  
import matplotlib.pyplot as plt  
import pandas as pd
# true = win;false = loss
def winOrLossGenerator(p,size):
    randomNumber = np.random.uniform(0,1,size)
    WL = randomNumber < p
    return WL

def player(WL_list):
    amount = 100#1$ as initial money 
    moneyList=[]#use this list to record the lost of the money amount
    gain = 0
    margin = 100   
    lossNumber = 0
    for i in range(0,len(WL_list)):
        #print WL_list[i]
        if WL_list[i] == True:
            lossNumber = 0
            gain = gain + 1
            margin = amount + gain
            
        if WL_list[i] == False:
            margin = margin - 2**lossNumber
            lossNumber = lossNumber + 1
        moneyList.append(margin)
    print moneyList
    fig = plt.figure(figsize=(10,20))
    plt.title("win probability is 0.5")
    plt.plot(range(0,len(moneyList)),moneyList)
            
                   
WL_list = winOrLossGenerator(0.5,100)
#print WL_list
player(WL_list)

上面的代码用蒙特拉罗的思想模拟了这一游戏,

代码语言:javascript
复制
winOrLossGenerator

函数用于产生size个输或者赢的序列。

代码语言:javascript
复制
player(WL_list)

函数则用于模拟赌博的人。每次运行的结果都是不一样的,我们取一次观察一下资金的变化情况。

我们可以看到,这次仿真中,最大的资金回测大概在72元左右。我们修改一下获胜的概率,假设我们的硬币是不均匀的,而赌场中往往是这呀。

如果我们的获胜概率只有2,那么资金曲线是这样的:

获胜率为0.4,情况还马马虎虎

获胜的概率为0.6:

获胜的概率为0.9的时候,资金曲线就比较平稳的向上了:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年10月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档