personal_asset
同一次回撤,一个系统跌了42%,另一个只跌15%
复盘一次自动化系统的异常回撤才发现,代码里没写清楚的地方,从不会自动变安全,只会滑向离得最近的那个默认值。
我自己业余写了一套自动化的仓位系统——规则提前定好,程序自动决定每一次要投多少,不用我临场拍脑袋。人手动决定这种事最大的问题是容易情绪化:赢了想加,亏了想追,规则写死了这个毛病就不存在了。
前段时间复盘,发现有一天盘中回撤特别大,一天亏掉了小四成。我第一反应是策略出了问题——是不是行情变了,还是哪个参数该调了。翻了半天日志才发现,根本不是策略的锅,是代码里有一段,从来没人配置过。
这套系统会按历史表现把情况分成几档,每一档配一个仓位比例。写代码的时候,我只标定了中间那几档——中间档位出现得最频繁,也最好测。两头比较极端的档位,出现次数少,当时想着先放一放,以后再补,就没写。
没写的地方去哪了?不是空着。代码逻辑要求每种情况都得有个返回值,没标定的全部落进了兜底分支。而这个兜底分支,恰好返回的是中间那几档里最大的一档——不是最小,是最大。
那天几个最极端的档位同时出现,程序按最大仓位把钱全砸了进去,盘中回撤直接冲到42%。我另一套跑法不一样的系统,因为规则设计不同、根本不碰这几个极端档位,同一天只回撤了15%。同样的行情,差了将近三倍。
我当时默认的假设是“没标定=没考虑到=会保守处理”,这是最想当然的一步。事后想清楚才明白:代码不会自己判断什么叫保守,它只会执行你写的那一行。你没写清楚,它就执行离你写的最近的那一行——而那一行往往不是最安全的那个,是最方便复制粘贴、恰好离得最近的那个。
这也不是我第一次在同一类问题上栽跟头。往前翻记录,还有一次是同一个函数的统计口径写错了,三周里被我在三次不同的复盘中反复发现、反复“改对”——因为我每次只是在文档里记一笔“这里有问题”,没把它真的焊进代码本身,下次写新脚本时又顺手复用了那个错的函数。记录只是提醒了将来的自己,没拦住将来的自己。真正管用的是让那段代码没法被安全地复用:加个警告、改个名字,或者干脆删掉。
没显式处理的地方,系统不会替你兜成安全值,它会滑到代码里权重最大、离得最近的那个默认值。这条规律不止出现在我这套业余系统里——权限系统里没配置的新角色,常常意外继承了最大权限;审批流程里没覆盖的边界情况,常常意外走了最宽松那条路。现在很多人在用 AI agent 写代码,同样的事只会更隐蔽——它不会跟你说“这段我没想好”,它会直接给你一个看起来能跑的默认值,你不细看,根本发现不了这行代码到底落在哪一档。
我现在复盘自己的代码,或者看 AI agent 生成的代码,多问自己一句:这段逻辑里,有没有哪种情况是我没显式写清楚的?如果有,兜底分支现在返回的到底是哪个值,是不是我以为的那个“保守”值。这句话花不了三十秒,能省掉一次回撤42%。