10.2 带跳扩散过程:财富曲线不是光滑函数

2020年4月20日,一个在字节跳动做数据仓库的工程师在午休时间打开手机看了一眼行情,然后他把嘴里的那口饭咽了整整十秒钟才吞下去。他持有的某只挂钩国际原油价格的银行理财产品,在前一个交易日收盘时净值还是正数,经过一个周末------准确地说,经过美国时间周一的交易日------净值变成了负数。不是跌到了零,是跌穿了零。他不仅亏光了在这只产品上的全部本金,还倒欠银行一笔钱。

他后来在内部技术论坛上写了一篇长达三千字的复盘帖。帖子开头第一句话是:"我过去一直以为投资就像数据管道------你把数据从源头搬过来,中间做几道清洗和聚合,最后输出一个干净的聚合结果。只要管道逻辑没错,输出就不会错。但那天我才发现,我写的管道根本处理不了负数,因为我在建表的时候根本就没想过这个世界上会有负价格。"

他停顿了一下,接着说:"我的模型里所有关于风险的计算,都是基于连续函数推导出来的。但当跳跃发生的时候,你站在奇异点上,导数不存在,历史波动率没有任何参考价值,你手里的所有连续微积分工具全部失效。你在那一刻唯一能依靠的,只有你事先留了多少冗余。"

连续复利的幻觉:你以为的那条平滑上升曲线,在真实世界里并不存在

你在学校里学过的金融数学,大概率是从布朗运动开始的。资产价格的对数服从一个带有漂移项和扩散项的随机微分方程,价格随时间演化的路径是一条连续的、几乎处处不可微但至少没有跳跃的轨迹。这条轨迹你可以用伊藤引理去分析,用蒙特卡洛模拟去定价,用希腊字母去对冲。它非常美,非常数学,非常符合一个受过严格理工科训练的大脑对"价格变化应该长什么样"的直觉。

你在这个框架下构建的财富增长预期,潜意识里是一条平滑向上的指数曲线。你知道它会有波动------布朗运动的扩散项允许它上下起伏,但起伏的幅度是连续的、可控的、在统计意义上是可预期的。年化波动率百分之二十意味着每年大概有三分之二的时间你的净值在正负百分之二十的区间里漂移。这个波动在你的心理舒适区之内。你是可以承受这种程度的起伏的------你连线上P99延迟从两百毫秒抖到四百毫秒都能面不改色地排查,账户净值跌百分之十几算什么?

但真实世界的价格运动不是布朗运动。它更接近一个带跳跃的随机过程------大部分时间,价格在做着那种你熟悉的连续漂移,你看着K线图觉得一切尽在掌控。然后某一个你永远无法提前预测的时刻,市场忽然跳了。不是平滑过渡,不是连续函数,是一个不连续的、突如其来的、幅度远超你所有波动率模型预测区间的跳跃。它可能来自一条半夜弹出的推特,可能来自某家你根本不知道存在的杠杆基金被强制平仓,可能来自某个央行在周末紧急召开的发布会。触发源是什么并不重要,重要的是在你的模型里,这个跳跃的幅度对应的概率是一个天文数字分之一。而在现实世界里,它每过几年就来一次。

你把财富积累想象成一条光滑的指数曲线,这本身就是一个危险的幻觉。这个幻觉让你在跳跃还没有发生的时候,过度乐观地估计了你未来的财富增长稳定性;让你在跳跃真正发生的时候,陷入一种"怎么会这样"的认知休克,而在这段你还在努力消化事实的时间里,市场已经从跳跃的低点继续发生了新的跳跃------可能向上,也可能向下。

跳跃的不可微性:暴跌那天,你的所有止损算法都是废纸

你是一个工程师,你对"连续性"有天然的信任。你设计的系统里,如果一个函数的导数在某个点上不存在,那个点通常是你需要专门写一个异常处理分支去单独处理的。你信任连续可微的函数,因为它们在你写的那一堆泰勒展开和梯度下降里表现得优雅而可预测。

市场暴跌的那一天,你持仓的那只股票从开盘跌百分之三,到盘中跌百分之八,到尾盘集合竞价直接封死在百分之十的跌停板上,中间没有任何像样反弹。你盯着分时图,那条线不是慢慢滑下去的,是一格一格、一段一段垂直往下跳的,每一格之间根本没有成交。你的止损单设在一个远低于跌停板价格的价位,因为在你正常的思维里,价格应该先经过你的止损位,你的单子被触发成交,然后才继续下跌。但现实是,价格从比你止损价高出百分之二的位置,在连续竞价的一瞬间直接跳到了跌停价,你的止损单在这一跳之间没有被触发,因为市场上根本就没有出现过你设定的那个价格。

在数学上,这就意味着在那一天,价格作为一个函数,在时间轴上是不连续的。而你的止损策略------那些你花了大量心思设计和回测的条件单逻辑------全部建立在价格是时间连续函数的假设之上。你在连续世界里写的每一条风控规则,在不连续的那一刻都可能失效。这不是因为你没有考虑极端波动,是因为你默认了价格从一个值到另一个值之间,一定会经过中间所有可能的值。而市场从来不向你保证这个前提。

你唯一能处理跳跃的机制,不是更精密的止损条件单,而是在跳跃发生之前就限制好你每一条仓位的规模,确保即使你的全部止损逻辑在那一刻同时失效,单只股票的跳跃亏损也不足以击穿你的内核层。这不是风控技术的问题,是仓位规模的问题。而仓位规模,是你每次买入之前就决定好的------早在跳跃发生之前。

重尾分布:你心里默认的正态分布,在屁股上藏着你承担不起的厚度

你学过概率论。你知道正态分布有一个让你非常安心的性质:一个偏离均值超过三个标准差的极端事件,发生的概率大概是千分之一点几。偏离超过六个标准差的事件,概率小到你在有生之年几乎不可能遇到。LTCM那帮人也这么认为。所以他们把杠杆加到了极致,把风险预算精确地分摊到每一个被模型验证过"不可能同时亏损"的仓位上去。

他们不知道的是,金融市场的真实收益分布根本不是正态分布。它的尾巴比正态分布肥得多------在统计学上这叫峰度和偏度的联合效应,在业界被通俗地称为"肥尾"。在肥尾世界里,偏离均值三倍标准差以上的事件发生的频率远比你以为的要高,偏离六倍标准差的事件根本不是宇宙年龄尺度上的不可能,而是你一辈子大概要遇到好几次的常规操作。

你对风险的感知被正态分布平滑掉了。你以为最大回撤不太会超过百分之三十,因为你的回测里过去十年只发生过一次。你以为你配置的那些低相关性资产能在危机时互相保护,因为你的相关性矩阵是基于正常市场环境算出来的。你以为你的压力测试已经足够保守了,因为你假设的极端场景已经超出了你经历过的最坏情况。

然后尾部事件来了。所有资产一起暴跌,相关性在尾部趋向于一,你的分散化保护在那一刻全部失效。你手里那些"低风险"的信用债在流动性枯竭中根本卖不掉。你存在那家小银行里的存款触发了存款保险的上限。这些事同时发生的时候,你才意识到你的压力测试里从来没有让它们同时发生。

给你的系统留出肥尾的空间,翻译成你听得懂的工程语言只有一句:假设最坏情况会在同一天早上一起找到你。你不需要精确地量化这个最坏情况的每一个参数的联合分布,你只需要确保在任何你能够想象到的极端组合下,你的内核层都不会被击穿。应急储备金不是根据"过去最大回撤"算出来的,是根据"如果所有这些东西同时坏了,我还能活多久"算出来的。你的负债规模不是根据"正常情况下的月供占收入比"定出来的,是在基准利率翻倍的假设下模拟过一次月供翻倍之后,你觉得你还能不能承受剩下的那个数字。

你是一个软硬件工程师。你在设计芯片的时候,一定给时序分析留了裕量------不是因为你预期每一批硅片的工艺偏差都会达到最坏情况,而是因为你知道如果有一批真的达到了,你的芯片不能直接蓝屏。你在做服务容量规划的时候,一定留了冗余------不是因为你预期每次大促流量都会突破历史峰值,而是因为如果有一天它突破了而你没有预留,你的整个服务会在用户面前一层一层地熔断。

你对自己的家庭财富,应该给同样的待遇。不是因为你悲观,不是因为你对未来没有信心。是因为你是一个工程师,而工程师的第一堂课就是:系统必须在你假设的所有最坏输入同时到达的情况下,输出一个不低于最低可接受水平的结果。这个最低可接受结果不是"跑赢大盘",不是"财务自由",是"活下来"。

相关推荐
oscar9997 小时前
10.1 内核恐慌:当“唯一解”遇上“无解”
财富源代码
oscar9992 天前
9.6 版本发布日志:用Changelog记录你的认知升级
版本·财富源代码
oscar9998 天前
8.7 反脆弱的终极防线:从防崩溃到在崩溃中受益
财富源代码
oscar99910 天前
8.3 杠杆的时序违例:短债长投是毁灭的根源
财富源代码
oscar99913 天前
8.1 边界值测试:你的系统在极端输入下会怎样
财富源代码
oscar9991 个月前
5.2 设计你的低通滤波器:定投和长期持有的传递函数
财富源代码
oscar9991 个月前
4.6 单元测试的重构:把交易策略封装成可独立验证的函数
重构·单元测试·财富源代码
oscar9991 个月前
4.2 Crash Dump:当你的交易爆仓时,先保存堆栈信息
财富源代码·crash dump
oscar9991 个月前
3.4 Nginx 负载均衡——动态再平衡的反人性纪律
nginx·github·负载均衡·财富源代码