“数字不能说明一切,但是一切都需要数字来证明。”——费波纳科利·切雅斯
这是屠夫的第篇原创,全文字
阅读时间8分钟,读完别忘了哦
金钱永不眠,屠夫问候各位早安。
更新频率超低(几乎按年计算),但是篇篇爆款的『硬币赌博』系列,把蒙特卡洛模拟玩了好多遍:
第1枚硬币,讲「赔率」第2枚硬币,讲「概率」第3枚硬币,讲「理性」第4枚硬币,讲「仓位控制」
可是关于蒙特卡洛模拟本身,每次屠夫都只有短短两句话:
蒙特卡洛模拟又叫统计模拟法……blablabla……
好学的朋友自然不甘心了,在交流群主动提问:
既然答应了就要做,今天咱们就来聊聊蒙特卡洛模拟。
01从求π值说起
提起圆周率π,多数人脱口而出的数字是“3.14”。
怎么求出来呢?
根据课本所说,无论是古希腊的阿基米德,还是古中国的刘徽、祖冲之,都是运用“迭代+数值逼近”的方法。
简单来说,是用圆的内接或外切多边形进行近似,求得圆周率π≈3.14。
有别的解法吗?
有,比如蒙特卡洛方法。
咱们先找一张正方形的纸,在上面画出它的内切圆(和4边都相切):
咱们在纸上随机打点,有的落在圆内(x个亮点),有的会落在圆外(y个暗点):
当我们打点的数量足够多时(比如上百万个),圆内点的个数(x)除以所有点的个数(x+y),就等于内切圆面积与正方形面积的比值:
x/(x+y)=S圆/S正方形
圆面积是S圆=π*r^2,正方形面积是S正方形=(2r)^2(因为正方形边长为2r),上述等式变成:
π=4x/(x+y)
而x和y都是已知的,套入上述公式就能求出π。
同样的招数,还可以用来求不规则图形的面积。
只要能确定“随机点是否在图形内”,就能求解
——完全不需要任何微积分知识:
是不是挺暴力的?
02为什么需要蒙特卡洛?
上面的例子很好地展示了蒙特卡洛模拟的特点:通过生成随机样本获得近似解。
随机样本的数量越多、越贴近现实,近似解会越逼近真实结果
——这是一种通过计算机“暴力运算”的办法。
蒙特卡洛模拟有两大优点:简单和快速。
简单,是因为省去了晦涩的数学推导,普通人易理解;
快速,是因为确定概率模型后的运算完全交给计算机。
优点是有了,什么情况下该用它呢?
你需要了解「直接法」和「间接法」。
所谓直接法,是给定一个模型,调整模型中的各个参数,模拟出尽可能多的结果。
『硬币赌博』系列是最典型的直接法:
只有正反两个结果,每局结果相互独立,赌徒资金相互独立,资金耗尽或为负出局
正反的概率、对错的赔率、最大最小下注额、每局下注策略、赌徒人数、赌博局数
每个赌徒结束时的资金余额情况
所谓间接法,是给定一个模型,随机模拟大量结果,反求和模型相关的某个参数。
上面求π值的例子,用的是间接法:
正方形面积公式+圆面积公式
落在内切圆里的点有x个,落在圆外的有y个
圆面积公式里的π
直接法的逻辑是:有模型,有参数,随机模拟的结果才是我要的。
间接法的逻辑是:有模型,有结果,模型相关的参数才是我要的。
无论是直接法还是间接法,蒙特卡洛模拟的基础是模型。
这种方法,其实有更深刻的思想内涵。
03蒙特卡洛背后的思维
蒙特卡洛方法以“建模”为基础,其实蕴含着两种关键性思维:抽象和拆解。
先说说「抽象」。
抽象思维的背后其实有两种逻辑:归纳和演绎。
归纳,是“从个别到一般”:从多个实例提取出规律。
演绎,是“从一般到个别”:将规律应用到具体实例。
比如说掷硬币这事——
咱们可以通过日常观察,得出“掷硬币通常只有正反两种结果”,这是归纳;
而将这条规律设定为限制条件,从而让每次模拟结果都服从于它,这是演绎。
一般人只能捕捉现象,投资者需要把握本质。
现象和本质之间的来回切换,需要抽象思维。
从已观察过的「现象」中提炼出「本质」,再生成更多未观察过、但服从「本质」的新的「现象」,就是蒙特卡洛方法的精髓。
再聊聊「拆解」。
我们身处一个VUCA世界:集易变性(Volatility),不确定性(Uncertainty),复杂性(Complexity)和模糊性(Ambiguity)于一体。
现实问题大多是复杂而模糊的,这需要我们进行逐步分析,把问题拆解成一个个相对简单的因子。
就拿π值计算的例子来说吧,面积公式S圆=π*r^2和S正方形=(2r)^2其实就是一个拆解的过程。
借助这两个公式,图形面积被拆解成π、半径r和边长2r,我们才能在后面的计算中把π值和圆内点个数x、圆外点个数y建立起联系,从而求出π。
一般人害怕复杂和模糊,投资者善于分析挖掘。
财务分析里经典的「杜邦分析法」,就是运用拆解思维将笼统庞大的ROE(净资产收益率)进行解构,转换成若干个易理解、好衡量、可提升的指标。屠夫在第一次学习的时候,由衷地折服于这套方法背后的拆解思维。
蒙特卡洛以“建立模型”为基础,对抽象思维和拆解思维有很高要求。
抽象,是以归纳演绎,联通现象和本质;
拆解,是靠分析挖掘,对复杂问题解构。
投资者固然需要提升自己的思维能力,但是光讲这些也未免太“虚”了。
蒙特卡洛模拟有更具体的投资应用吗?
有!
04投资里的蒙特卡洛
投资年限长点的人,应该听说过压力测试。
所谓压力测试(StressTesting),是指将资产组合置于某个特定的极端情况,测试该组合在这种情境下的表现状况。
比如利率突然上升个BP(BasePoint),又或者某类货币突然贬值30%,再或者股市暴跌50%,都可以作为压力测试的假设条件。
这些极端情况可以是历史曾经发生过,也可以是未发生过的,毕竟
——撞上冰山前,泰坦尼克号从未撞过冰山。
没错,这种“大开脑洞”的情形,真的很适合蒙特卡洛模拟。
就拿上面的例子来说,我们可以对未来一年的沪深做一些假设*:
上涨20%以上的概率为20%上涨10%~20%的概率为30%上涨不超过10%的概率为35%下跌10%~20%的概率为10%下跌20%以上的概率为5%*屠夫注:以上数据纯属瞎拍,实际假设前请至少参考一下历史数据
而通过历史数据回测,得知你的投资组合相对于沪深的β值约为1.25*。
将上述假设的上涨/下跌幅度乘以1.25,就能计算出你的组合在未来一年的收益期望。
*屠夫注:也就是说,沪深上涨1时组合上涨1.25,下跌1时组合下跌1.25
把更多因子考虑进去,可以建立一个更复杂(也可能更脆弱)的模型。
通过各个因子的概率分布,我们可以模拟出成千上万种可能性,再去检查我们的投资组合是否在所有可能性下都安然无恙。
回过头来重看《可怕的凯利公式》一文,其实是对仓位控制策略的一次压力测试。
在这个测试里,「固定下注」和「马丁格尔」都只能做到线性回报(只能靠堆砌时间来增加获利),只有「凯利公式」做到指数回报,实现真正的复利效应。
除此之外,马丁派战术还有一定的破产爆仓风险(0人只有个活到第1万局),而凯利公式相当安全(0人全部活到最后),这可是个非常重要的决策依据。
怎么样,蒙特卡洛模拟还是挺有帮助的吧?
05写在最后
为了减少对阅读者的数学和编程背景要求,本文省略了很多细节。
真要考究起来,这个话题的篇幅足以够小论文。
可咱们又不是做学术研究,所以屠夫也就省了这种功夫啦。
对于只为学习方法、升级认知的人而言,本文把蒙特卡洛方法和背后的思维,大致讲明白了。
在实际应用中,蒙特卡洛模拟还能有很多有趣的玩法,留给大家自己摸索,细细品味。