#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Fri Jun 22 15:15:13 2018 author: yunjinqi Email:yunjinqi@qq.com sigature:It takes significant discipline,research,diligence and patience to be successful at algorithmic trading.It takes months,if not years, to generate consistent profitability. """ ''' 圣彼得堡悖论是数学家丹尼尔·伯努利(Daniel Bernoulli)的 表兄尼古拉·伯努利(Nicola Bernoulli)在1738提出的一个概率期望值悖论, 它来自于一种掷币游戏,即圣彼得堡游戏(表1)。 设定掷出正面或者反面为成功,游戏者如果第一次投掷成功,得奖金2元,游戏结束; 第一次若不成功,继续投掷,第二次成功得奖金4元,游戏结束; 这样,游戏者如果投掷不成功就反复继续投掷,直到成功,游戏结束。 如果第n次投掷成功,得奖金2n元,游戏结束。 按照概率期望值的计算方法,将每一个可能结果的得奖值乘以该结果发生的概率 即可得到该结果奖值的期望值。游戏的期望值即为所有可能结果的期望值之和。 随着n的增大,以后的结果虽然概率很小,但是其奖值越来越大,每一个结果的期望值均为l, 所有可能结果的得奖期望值之和,即游戏的期望值,将为“无穷大”。 按照概率的理论,多次试验的结果将会接近于其数学期望。 但是实际的投掷结果和计算都表明,多次投掷的结果, 其平均值最多也就是几十元。正如Hacking(1980)所说:“没有人愿意花25元去参加一次这样的游戏。” 这就出现了计算的期望值与实际情况的“矛盾”,问题在哪里? 实际在游戏过程中,游戏的收费应该是多少? 决策理论的期望值准则在这里还成立吗?这是不是给“期望值准则”提出了严峻的挑战? 正确认识和解决这一矛盾对于人们认识随机现象、发展决策理论和指导实际决策无疑具有重大意义。、 ''' # simulate the paradox import pandas as pd import numpy as np import random def bet_one_win_money(): tows=[1,-1] times=0 result=0 while result!=1: result=random.choice(tows) times+=1 return 2**times def get_mean_money_for_many_times(n=1000): money=[] for i in range(n): money.append(bet_one_win_money()) return sum(money)/len(money) mean_money=get_mean_money_for_many_times(10000000) print(mean_money)