欢迎光临
我们一直在努力

1.1 确定性的诅咒:从“Hello World”到“随机游走”

1998年,一个名叫吉姆·西蒙斯的数学家成立了一家对冲基金,名叫文艺复兴科技。西蒙斯本人是顶尖的密码破译专家,他招人的标准极其怪异:不招MBA,不招金融分析师,只招数学家、物理学家、计算机科学家和——注意这个词——软硬件工程师。他相信,这群全世界最擅长从噪声中提取信号的人,能够用数学模型彻底破解资本市场的密码。

后来的故事大家都知道了:文艺复兴的大奖章基金取得了人类金融史上最恐怖的年化回报率,扣除费用后仍高达39%。这似乎是“工程师统治华尔街”的铁证。

但我想给你看故事的另一面:在成立大奖章基金的十年之前,西蒙斯和他的科学家团队差点把裤子都亏光。1988年之前,他们用同样精密的数学模型、同样的高智商团队、同样的计算机程序去交易,结果连续亏损,一度面临清盘。

区别在哪里?区别在于,1988年之前的西蒙斯,是一个试图用工程确定性去肢解市场的“还原主义者”。他试图找到那个能准确预测价格的“万能公式”。而1988年之后的西蒙斯,终于接受了一个事实——市场根本不是一个可以被公式锁定的系统。

他后来在极少数公开访谈中说过一句意味深长的话:“我们从来不预测市场的方向。我们只是在寻找那些微弱但可重复的统计异常,并且接受它们随时可能消失。”

注意这两个关键词:“不预测”、“随时可能消失”。

连人类历史上最成功的量化投资团队,都把地基打在“不追求确定性”的土壤上。而你,一个第一次开通证券账户的工程师,正在试图写一段“预测明天涨跌”的代码。

这,就是我们整个第一章要拆解的Bug。


编译通过 ≠ 世界会按此运行

你第一次写C语言是什么感觉?

我还记得那种感觉。写了一行printf("Hello World\\n");,按下编译,0 error, 0 warning。运行时控制台弹出一行干净的“Hello World”。那一瞬间,你感受到了某种神性——你是这台机器的造物主,你说一,它绝不说二。从那天起,你习惯了这样一个世界观:

只要逻辑是对的,结果就必然是对的。

这种思维模式在你职业生涯的每一个小时里都在被正反馈强化。你写了一个排序算法,它就必然按O(n log n)的复杂度排序。你画了一块PCB,只要原理图对、Layout合规,通上电它就必然按你预期的波形输出。你设计了一个微服务架构,只要接口协议对齐、超时设置合理,它就必然在高并发下稳稳当当。

一万次输入,一万次相同的输出。这是工程师一生的肌肉记忆。

然后你打开了股票账户。

你花了一个周末,用Python拉了某只股票过去五年的日K线数据。你发现当MACD金叉、成交量放量突破20日均线、同时RSI处于40-60区间时,第二天的上涨概率达到了惊人的68%。你兴奋得像找到了一个未被发现的系统漏洞。你写了回测脚本,过去五年的年化收益做到了45%,最大回撤才12%。

你嘴角上扬,心想:这不就是找Bug吗?这么简单的规律,别人怎么没发现?

你把20万积蓄分批打了进去。

前两周,策略如期运行,赚了8%。你开始计算复利:如果每个月8%,一年就是……

第三周,同样的信号出现了。你加仓。第二天,跌了4%。你想,没关系,胜率68%,这是那32%的正常误差。你扛着。

下一个月,信号再次出现。你又买。这次跌了10%。你开始紧张了,但你翻出回测报告安慰自己:最大回撤12%,还没到止损线。

第六个月,你的账户亏了35%。

你盯着那个依旧在发出买入信号的策略,像一个盯着Segmentation Fault却找不到空指针的程序员。你反复检查代码,没有问题。逻辑是对的,参数是显著的,回测是完美的。

那为什么亏钱?

因为你在用“编译通过”的逻辑,去解一个没有编译器的世界。

你写的每一行代码,运行在一个由你掌控的沙箱环境里。CPU的指令集是固定的,内存的寻址是确定的,操作系统的调度是可预期的。即使有随机性,那也是你代码里显式调用的rand()函数——你清楚它的种子、范围、分布。

但资本市场没有沙箱。它的底层不是冯·诺依曼架构,甚至不是任何你学过的架构。它是几千万人——几十亿个神经元——在同一时刻被贪婪、恐惧、嫉妒、希望同时激活的混沌系统。每一个参与者的行为都在改变系统的状态,而系统状态的改变又反过来影响每一个参与者的行为。

你试图用一段几十行的Python去拟合五千万人脑子里的量子纠缠。这不是智商的问题,这是范畴的错误。


晶振 vs 混沌:市场没有时钟信号

作为一个软硬件工程师,你对“时序”有天然的敏感。

你知道一块CPU要稳定运行,必须有时钟发生器。那个小小的晶振,以每秒钟几十亿次的频率振荡,为所有触发器提供了统一的节拍。时钟的上升沿一到,数据被锁存;下一个上升沿,状态更新。一切井然有序。时序违例就是灾难,建立时间和保持时间差一纳秒,系统都可能进入亚稳态。

这种对时序的依赖,已经刻在了你的神经回路里。你本能地期望世界是同步的、有节拍的、可预期的。

但资本市场,恰恰是一个全异步、无全局时钟、事件并发且随时时序违例的系统。

你早上醒来,发现特朗普在推特上发了一句话,A50期货瞬间跳水。你上午开会的时候,央行降准了,券商股直线拉升。你吃完午饭打开软件,发现某白酒企业董事长被留置调查了,板块集体闪崩。你在改Bug的时候,太平洋彼岸的某个对冲基金爆仓了,通过跨境ETF传导到你持仓的一只完全不相关的股票上。

这些事件,没有一个有“时钟沿”可以预测。

你熟悉的时序逻辑是:在时钟信号CLK的上升沿,如果输入D是1,那么输出Q在下个周期变为1。这是确定的,可预期的,可以被示波器捕捉的。

市场的逻辑是:张三听到李四说王五在买某股票,于是张三也买了;赵六看到张三买,以为有利好,也跟着冲;结果冲进去发现什么都没有,大家同时往外跑,踩踏了。

这中间的“时钟沿”在哪里?哪个信号触发了哪个动作?你完全无法追踪。因为它不是单一时钟控制的同步电路,它是数百万个独立时钟源自由振荡、互相注入锁定的网络。有时它会莫名其妙地同步到一个共振频率上(牛市),有时它又解体成无规则的热噪声(熊市),而没有任何一个物理定律能告诉你下一次相变在何时发生。

你想在K线图上画出的那些“规律”,本质上是在试图找出这个不存在的主时钟。 你找到的,只是过去某段时间里,这个异步网络偶然出现的某个短暂的相干模式。而当你真金白银地参与进去,你这个新加入的振荡源,本身已经破坏了那个脆弱的相干性。


二阶混沌:预测本身改变了被预测的对象

这是最关键的概念,也是工程师投资亏损最深层的数学根源。

在你们熟悉的物理和工程领域,绝大多数系统是一阶的——你对系统的观测和预测,不影响系统本身的运行规律。

你用万用表量一个电阻的阻值,你的测量行为不会改变阻值本身(忽略探针的接触电阻这种微小干扰)。你写一段代码去测试服务器的吞吐量,虽然测试本身占了一点带宽,但这点影响可以忽略不计。自然界和工程系统允许你做“近似无损”的观测和预测。

但资本市场是二阶混沌体。这个词不是比喻,是严格的定义:预测本身会成为系统的新输入,从而改变系统的输出,导致原预测失效。

索罗斯管这叫“反身性”。我更喜欢用你们能秒懂的语言翻译:

市场是一段会自我修改的代码。而你的交易,就是被注入到这个代码里的一行新指令。

你发现了一个策略:当某只股票连续三天缩量下跌后放量反弹,就是一个绝佳的买入点。你把这份研究报告发到了一个论坛上,或者你所在的投资群里,甚至只是你自己的交易行为在盘口上留下了异动痕迹。

这些行为本身就是新的输入。如果足够多的人(或者足够大的资金)采用同样的策略,就会有人在第三天收盘前抢跑买入,导致第三天的下跌幅度变小,反弹时间提前,进而让原策略的入场信号变得模糊甚至消失。你亲手创建了一个用来检测自己策略的监测器,而这个监测器改变了策略本身的执行环境。

这不是你代码写得不够好。这是这个系统的底层物理定律。

就像一个CPU在执行诊断程序的时候,诊断程序本身占用了CPU资源,导致你测出来的性能曲线和空载时不一样。区别在于,CPU的计算资源是固定的,你能算出诊断程序占了多少开销并反推出空载性能。但市场的“资源”——参与者的认知和行为——是递归嵌套、无穷无尽的。你永远无法站在系统之外去测量它,因为你的每一次测量,都在变成系统的一部分。

你现在能理解,为什么你回测出来的完美策略,一实盘就废了吗?

回测的时候,你是一个旁观者。你的模拟交易没有影响K线的走势。你是在用“我如果当时在场”的上帝视角,去审视一段已经凝固的历史。但一旦你真的在场,你的每一笔买卖,都在制造新的K线。你从观察者变成了参与者,而你过去的回测数据里,从来没有包含“你这个参与者”这个变量。

你用不包含自己的数据,训练了一个用来预测包含自己的系统的模型。这个模型在数学上就是错的。


爱因斯坦的“上帝不掷骰子”,在投资里是错误的

爱因斯坦一生都不接受量子力学的哥本哈根解释。他坚持认为,上帝不掷骰子,世界在底层必须是确定的、因果的、连续的。他不接受“概率是世界的本质”这一说法,并用他的余生试图找到一个能恢复确定性的“隐变量”理论。

他失败了。后来的贝尔不等式实验证明,量子世界确实是概率性的。没有隐变量,没有深层的确定性。概率,就是世界的底层。

你作为工程师,在投资世界里,就是一个微缩版的爱因斯坦。

你无法忍受“这个策略有时赚钱有时亏钱,但总体期望为正”这种说法。你觉得这里面一定有Bug。既然亏了,就一定有原因;既然有原因,就一定能找到并修掉它;既然修掉了,下一次就应该一定赚钱。你要的不是“期望为正”,你要的是“确定性”。你要的是编译通过、测试通过、上线一次跑通。

但投资世界,更像量子力学,而非经典力学。

你一笔交易是赚是亏,在结果揭晓之前,处于盈利和亏损的叠加态。你的交易系统,不是在确定性地获取利润,而是在持续地进行概率波的坍缩。你买入一只股票,你分析得再透彻,也只是把你的盈利概率从50%提高到了60%或者70%。剩下那30%到40%的亏损可能性,永远坍缩不掉。你做一万次交易,那30%的亏损一定会在某个时刻以某种排列出现。

如果你把每一次出现的亏损,都当作必须被Debug的“系统错误”,你就会进入一个永无止境的修补循环:改策略、换参数、加过滤条件、再回测、再实盘、再亏损、再修补……最终,你的策略被你修补成了一个极端复杂的、对历史数据拟合得完美无瑕的、但在未来毫无预测力的“过度拟合怪兽”。

在后面的章节里,我会用“过度拟合”这个概念专门拆解你这个行为。

但在这里,我只想先告诉你结论——

你账户里的亏损,并不全是你认知的Bug。相当一部分亏损,是系统为了博取超额收益而必须付出的运行成本。就像你设计一个高并发的缓存系统,你接受了一定的缓存穿透率,不会因为偶尔几个Key没命中就去把整个架构推翻重来。亏损在投资中,就是概率性的缓存穿透。


现在,让我们回到本节的开头。

为什么西蒙斯最后成功了?不是因为他找到了确定的公式,恰恰相反,是因为他放弃了寻找确定的公式。他转而去找那些极其微弱、转瞬即逝、但统计上显著的概率优势,然后用成千上万次交易让大数定律自己发挥作用。他不预测每一次交易的结果,他只确保每一次下注的期望值为正。

而你呢?你还在为明天的涨跌失眠,你还在试图找出那个能让你“每次都对”的圣杯。

这就是确定性的诅咒。它让你在职业上战无不胜,也让你在投资中一败涂地。它不是一个技术Bug,它是你大脑操作系统的底层架构。要解决它,不是打个补丁就行。

你需要一次彻底的交叉编译。

在下一节,我们将深入这个诅咒最具体的表现形态——过度拟合。你将看到,你是怎么用机器学习都嫌low的方式,在K线上做了一场华丽的自欺欺人。

赞(0)
未经允许不得转载:171主机测评 » 1.1 确定性的诅咒:从“Hello World”到“随机游走”
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址