前言与说明一、MonteCarlo方法是一门简单而复杂的学问MonteCarlo方法往小的方面说很简单,就是生成一堆随机数,然后以某函数规则计算出一堆数值,最后求这些数值的平均值就得到了结果;往大的方面说却很复杂,要将蒙特卡洛做好需要考虑的问题很多,例如:1.需要解决的问题是否收敛——倘若不收敛,MonteCarlo方法就不能用,不然计算出来的结果有何意义,只有老天才知道;2.所选用的具体方法收敛速度如何——虽然几乎所有MonteCarlo收敛阶数为1/2,但不同的方法收敛阶数前面的系数不同;3.所得解的误差是多少——MonteCarlo方法从来得不到精确值,而是一个近似的随机变量,因此,任何时候,报告MonteCarlo解时,需要同时报告该解的方差;4.如何选择具体算法,以加快速度——MonteCarlo模拟需要较长时间,所以速度很重要。尤其是你使用MonteCarlo方法实时计算金融产品价格时,时间就是金钱。加快MonteCarlo速度有很多或大或小的技巧,而且这些技巧还要依据不同问题而定。5.伪随机数问题——计算机生成的随机数都是伪随机数,很多MonteCarlo书中都大书特书伪随机数的危害以及如何生成尽可能“真”的伪随机数。有此告诫在,我们自然不能对伪随机数问题视而不见,但是我们是否就要因这一问题惶惶不可终日呢?6.模型与现实——模型是我们的理想,但是现实中的市场却是残酷的。如果有人仅仅拿着书本就冲进市场,那他必然还要交高昂的学费,最终鲜血淋漓地出来。同理,MonteCarlo方法(以及其他几乎所有方法),任何时候都只能给我们作参考。然而,我们却可以以科学的态度和方法使用MonteCarlo方法,以使其结果更加贴近现实,参考价值更大。二、本课程将解决的问题作为一门针对非学术人士的入门性质的课程,本课程最注重的是基础的应用性知识。在接下来,我会详细讲述MonteCarlo方法本身,且为了确保大家看懂,我会精选一些例子,从这些例子的数学推导,到算法描述,到程序设计,到误差分析,这些基础过程都将涉及。尤其考虑到我见过的不少人(尤其是论坛上的不少网友),编程基础比较薄弱,所以在讲解程序时我会逐句分析,至少确保你能看懂这个程序的每个步骤。另一方面,入门课程还肩负为大家未来学习奠定基础的重要使命,故课程中要覆盖各个方面的内容,例如上一节所提到的都或多或少有所覆盖。但是,正是因为这是一个入门性质的课程,很多的内容无法涉及,同时很多有所涉及的内容也无法充分展开。具体在下文中涉及到相关内容时我会尽量提供进一步学习的方向、方法等延伸性问题。这里值得一提的是上文所提及的模型与现实的问题。本课程中的例子基本都是理论化的例子,这样的例子好处在于它简化了很多复杂的现实状况,对于初学者而言容易上手,也便于教授MonteCarlo方法如何使用,同时它还是解决现实问题的基础。所以,要特别注意,我在课程中讲的那些金融工具定价的例子都是理论化的例子,千万不要以为学会那些之后就已经学会了现实中的金融产品的定价,套用一句广告词:“才刚刚开始呢”。三、章节设置常见的MonteCarlo书籍包含如下内容:随机数的生成、特定分布抽样、优化(降低方差)技巧、随机过程模拟、MonteCarlo方法实际应用、以及扩展(主要是Quasi-MonteCarlo,即拟蒙特卡洛方法)本教程覆盖随机数生成、特定抽样分布、随机过程模拟和应用实例。但和那些书籍不同在于如下这些方面:不详细讲伪随机数问题——我们用Matlab内附带的随机数生成器,将伪随机数问题留给Mathworks的专家吧不讲降低方差技巧——降低方差技术讲的是怎样更快地作MonteCarlo,而这是入门教程,目的在教会你怎样做MonteCarlo,如果你还不会做就去学怎样可以做得更快那没有意义。所以,先学会基本使用方法最重要,优化的问题在熟练后再讲述就水到渠成了。特定分布抽样——会讲很多有用的技巧,例如RejectMethod、条件分布方法、协方差阵、Copula等方法生成联合分布随机变量,但是如果讲述太深,每个内容都可以写一本书了,所以不会讲太深,只讲用的最多的那很少一部分内容。并行MonteCarlo——很多入门的书上不会讲这个,但是这个课程里面会专门用一章讲,更详细介绍见本章倒数第三小节。四、课程的教授模式本课程中每个知识点基本按照如下步骤展开:(一)理论基础主要介绍与知识点息息相关的基础知识,例如公式的数学推导、概念的含义、Matlab语句基础、计算机相关知识等等。这样做最大的作用是帮助大家回忆这些内容,以便与主体内容展开相衔接。由于这并非主旨所在,所以不会在其上花费过多笔墨。若你从未接触过这些基础知识,你要是看一遍课程中的简介就懂了自然最好,若不懂,则建议翻阅相应的参考书籍。我会在课程讲义最后附上我写作本课程讲义所用到的所有参考书目。(由于我习惯看英文原版书,所以此教程的参考书目大多数是英文书籍)(二)主体内容不必多言,就是知识点的展开。(三)相关例子每个知识点后面我会附上一些与其有关的简单的例子。(四)注意事项任何知识、方法都有它自身的局限,所以仅仅知道方法怎么做还不够,还需要明白这些方法何时何地能用。从另一个角度来看,本课程主要包含如下资料:(一)讲义就是你当前看到的这份资料。此资料覆盖所有便于书写的内容。而且,购买了视频教程的网友将收到PDF版本的讲义;同时这份讲义还会以HTML网页的形式挂在我的个人主页(),网页教程可以直接打印,打印过程中非主要内容(如导航、广告等)会自动隐藏。由于我的个人主页是商业空间,需要大量的流量才能产生足以支持空间运营的广告收入,所以请购买了视频教程的网友不要在未经我个人允许前提下将PDF讲义等资料公布在网络上,对此我保留追究法律责任的权力。特别需要指出一点:由于时间紧迫,写作讲义时文字不经细细斟酌,虽然意思基本表达清楚,但中文语法错误在所难免。今后有时间会逐句修改,也欢迎大家帮忙校订,具体做法是:保存当前网页为html,用word打开网页,另存为doc,之后再修订文档。(二)PPTPPT主要覆盖一些公式性推导和一些我并不拥有完全版权的内容——有些比较独特的知识、例子来自于我在北京大学的金融工程等课程,将其以电子版发布在网络上会冒犯到为这些知识、例子付出很多心血的老师——故PPT不会分发(无论是否购买视频教程),但是会显示在视频中。观众通过暂停视频的方式阅读这些内容。(三)代码MonteCarlo的代码不是很复杂,但要写出高质量的代码却不容易,所以对于大多数例子我会写至少两个版本代码,一个是基础版本,采用大家最熟悉的最基础的Matlab语句来写;另一个是优化后的版本,这一版本将充分考虑Matlab特点进行优化,但是它可能不那么容易读懂。对于购买了视频的网友,我会将PDF和代码文件放在一个压缩包中发送至你的邮箱,只要将此附件解压缩即可得到代码文件。(四)视频教程视频教程文件太大,我不可能找到足够的免费空间来存放这些视频文件,免费提供给大家观看。故视频教程将借助其他网站的空间。在我当前与人大经济论坛的合同结束前,此视频教程由人大经济论坛独家提供。具体的网址见:=11五、基础知识要求虽然我会在每章开始部分很简略地复习部分基础概念,但是要顺利完成此课程,请确保自己牢固掌握了如下知识。(一)数学基础学习MonteCarlo必备基础的概率论知识。随机变量、PDF(随机变量的概率分布)、CDF(随机变量的累积分布)、联合分布、条件分布、边缘分布、COPULA、随机微分方程(SDE)等等。而且不仅仅是知道这些概念是什么含义,还要会用、会算。不过也不用被这些吓到,虽然我在相关章节讲的内容比较深,这些知识都全要用到,但是里面最重要的知识只有一个,那就是正态分布。你只要会熟练学习正态分布,就可以解决不少金融产品理论定价的问题。话说回来,必须指出,本教程里面涉及的数学相对于真正难的知识还只是入门,要做现实市场中的产品定价这些知识远远不够。补充说明,大多数理论定价模型,例如BlackScholes模型,Black模型,为了推导简便起见(当前也限于这些论文写作时的计算机技术等外界因素),都只考虑正态分布;但是,在真实市场中,很多经济变量(例如股票收益率),可能符合白噪声假设,但是一般不符合正态分布假设及独立假设。总之,只掌握正态分布,理论模型基本不会有问题,却不足以做真实市场的分析。(二)Matlab基础本教程的某章中,我会简略讲讲编程入门知识。但是Matlab的基本操作需要你自己去看。要求掌握程度可以参考我写得Matlab简明教程()。(三)金融工程知识虽然这个教程没有明确表明专门讲金融产品定价,但是这里用了不少金融产品理论定价的例子来解说MonteCarlo方法,如果你对金融工程比较熟悉,那么看这些部分相对会更顺利。即使不熟悉也没关系,每个例子的开始部分,我会简要解释相关背景知识。(四)计算机基本知识由于需要讲述Matlab实际操作,所以你应该熟悉Matlab软件启动退出,磁盘目录概念;另外会讲述并行MonteCarlo计算,所以你应该明白双核概念,内存CPU等等基本知识总要懂一点的。其他的不要求。六、MonteCarlo并行计算这里还特别提一下并行计算。现在双核机器基本普及,还有不少网友的机器是三核甚至四核,如果能够同时使用多个核心做计算,运算速度可以有显著提升。幸运的是,MonteCarlo方法的特点使得它特别适合并行计算。所以,在这个教程中,我将用独立的一章特别讲述如何使用Matlab并行计算工具箱(ParallelComputingToolbox)做MonteCarlo模拟。我会先介绍并行计算的基础知识(例如两种主要的并行模式),以及会更详细介绍Matlab并行计算工具箱的工作原理——Matlab的并行计算并非标准的并行计算,必须了解其特点才能发挥并行计算优势,否则速度可能更慢。介绍完基础知识,我将通过将此前各章的MonteCarlo例子改写为并行计算代码这种形式来讲述MonteCarlo并行算法。之后,还将特别列出用Matlab做并行MonteCarlo的一些注意事项,并给出一些用以确保效率的简要规则。七、关于回答疑问不论是否购买了视频教程都可以通过邮件形式联系我,我的Email地址在主()页上及视频教程中已标明。我很乐意就本课程相关的任何问题与大家交流。不过有几点还请大家理解:1.由于我邮箱中垃圾邮件很多,所以你写信时的书写方式和内容尽量确保不要被Gmail当成垃圾邮件处理掉2.我事情比较忙,所以可能不能及时回信,还请见谅。3.有疑问可以通过邮件联系我,也可以直接在论坛上相关板块发帖咨询。(我收邮件频率一般高于上论坛频率)4.在询问我之前强烈建议你在讲义、我主页的FAQ栏目中查询是否已有类似问题。5.提问一定要详细具体,并附上详尽的背景材料,那些飘渺无踪影的问题实在令人无从下手!6.我回答问题的方式可能是直接给出代码等解答,也可能是告知你从何处寻找相关信息以自己解决——即授人以鱼和授人以渔这两种方式我都有可能选择。7.如果所提问题有很好的代表性,我将略去或更换你提问中涉及你个人情况的信息、数据,然后将此问题的解答方法放置在课程主页上,以便其它网友参考。8.我保证会很认真对待每位网友每个有意义的问题并会尽力去寻找答案,但我无法保证每个问题我都能回答。八、关于后续课程这个课程只讲基础。主要作用有两个,一个是为更深课程提供一个入门途径,这样将来我要是讲更深课程时就不必浪费时间讲基础知识了;另一个是投石问路,我的时间一直很紧张,此课程也是第一次和人大经济论坛合作,因此我需要看看市场反应再决定是否有必要花费大量时间准备延伸课程。如果结果显示有足够数量的网友对这方面的知识很感兴趣(这个主要体现在视频购买上哈哈),那么我可能考虑推出关于金融产品MonteCarlo定价的课程。在那个