加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【转】蒙特卡罗模拟方法的Excel实现

(2014-04-14 13:47:21)
标签:

蒙特卡罗模拟

it

分类: BI_nORMAL

蒙特卡罗模拟是一种随机模拟方法,以概率和统计理论方法为基础,将所求解的问题同一定的概率模型联系起来,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名,又称统计模拟法、随机抽样技术。由S.M.乌拉姆和J.冯·诺伊曼在20世纪40年代为研制核武器而首先提出。在这之前,蒙特卡罗方法就已经存在。1777年,法国Buffon提出用投针实验的方法求圆周率∏,被认为是蒙特卡罗方法的起源。

我在大学里学习Excel金融计算的时候,书中曾提到使用蒙特卡洛的模拟方法来计算期权的价值。当时是第一次接触到这种方法,很是惊奇,工作后就逐渐淡忘了。直到有一段时间,看风险管理资料的时候,接触到了Crystal Ball@RISK Excel风险管理插件,才又一次提起了兴趣。以下是我收集的一些很有意思的资料,主要原因是它们可以在Excel中简单的实现。但是有一句话要说在前面,蒙特卡罗模拟有一个危险的缺陷:如果输入一个模式中的随机数并不像设想的那样是随机数, 而是构成一些微妙的非随机模式, 那么整个模拟及其预测结果都可能是错的,所以贝尔实验室的里德博士告诫人们记住伟大的诺伊曼的忠告:“任何人如果相信计算机能够产生出真正随机的数序组都是疯子。”

 

案例1. 掷骰子游戏

假如有这样一个游戏:首先付14块钱取得投掷一次骰子的权利,如果你投掷骰子的点数为1,你将获得1块钱;点数为2,你将获得4块钱,即你获得的金额是你投掷点数的平方。你是否愿意去玩这样一个游戏?

 

为了回答这个问题,我们要去算一下期望收益。一个简单的方法是多次模拟这个游戏,然后求每次结果的平均值。

Excel中模拟,首先你需要使用Rand()函数生成[0,1)之间的随机数。由于骰子每个点数的概率相同,是均匀分布,所以可以使用Rand()函数来产生随机数。

 

 

http://s16/mw690/001j4oNmzy6I65glnmnff&690

 

为了模拟每次投掷骰子的点数,需要构建以下函数:

=ROUNDDOWN (RAND ()*6, 0) +1

   

ROUNDDOWNRAND()*6得到的[06)之间的随机数向下取整,再加1进行调整。

每次投掷骰子,所获得的收益用以下表格计算:

收入

=POWER(ROUNDDOWN(RAND()*6,0)+1,2)

成本

14

利润

=收入-成本

注:POWER()为幂运算函数,POWER(底数,指数),也可用^来进行幂运算。

 

每按F9重新计算一次,就可以得到一次结果。重复运算多次,将每次的结果记录下来,求出平均数,即是期望收益。如果期望收益大于零,说明这个游戏是可以参与的。

 

也可按照如下方式来重复计算,即将函数下拉若干行,比如1000行,来重复运算1000次,然后再通过AVERAGE函数计算利润的平均值。

 

这个方法比较简单明了。以后我们看其他案例的时候,再来试验其他方法。

http://s1/mw690/001j4oNmzy6I65iwGL610&690

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有