
2019年一个在字节跳动做推荐算法的工程师给我发了一张截图。是他过去三年在A股的全部交易记录一共一百四十多笔我把它导进Excel里拉了一下数据结果连他自己都愣住了。这一百四十多笔交易加在一起总收益是负的而且负得相当稳定每年都在给市场交钱。但当他单独把沪深300ETF的定投记录摘出来算的时候那部分持仓的年化收益接近7个点。再把可转债打新的收益单独拎出来又是一个正数。把他自己主动挑选的科技股单独算年化收益是负的而且亏损的绝对值比前面两项盈利加起来还要大。他盯着这三个分项看了很久说了一句让我至今难忘的话“搞了半天我这几年的投资水平是正的只要把我自己的主动操作全部去掉就行。”这句话不是自嘲。这是他第一次用模块化测试的方法来看自己的投资账户。他以前看账户只看一个数字——总盈亏。这个数字是一个把所有交易混在一起的大杂烩盈利的交易和亏损的交易互相掩盖正确的策略和错误的策略全搅在一个桶里。他不知道自己的钱到底是赚在哪个模块上亏在哪个模块上所以他也不知道自己应该继续做什么、应该立刻停止做什么。模块化统计把你的交割单拆成独立的微服务你在排查一个大型单体应用的性能问题时不会把所有日志全部倒进一个文件里然后用肉眼扫。你会先把系统按功能拆成不同的模块——用户模块、订单模块、支付模块、库存模块——然后分别统计每个模块的P99延迟、错误率和资源消耗。拆开之后你才会发现整体延迟被拉高不是因为系统整体有问题而是支付模块里某个第三方调用偶尔超时拖慢了整个链路的平均响应时间。你的投资账户需要的是一模一样的处理方式。把你过去两年里所有的交易记录导出来——任何一个证券App都支持导出交割单导出来是一个Excel表格每一行是一笔交易。然后按照资产类型和交易方式把这些交易分到不同的模块里去。你需要建立的模块至少包括这几个大盘指数基金、行业ETF、主动型场外基金、可转债打新、可转债交易、大盘股主动交易、小盘股主动交易、科技股、消费股、周期股。如果你的交易里还涉及港股或者美股每一个市场也要单独拆成独立的模块。模块划分的原则很简单同一类资产放在一个模块里不同类的资产绝对不混在一起算。分完之后对每一个模块单独计算两个数字胜率和盈亏比。胜率是这个模块里盈利的交易笔数除以总交易笔数。盈亏比是这个模块里所有盈利交易的平均盈利金额除以所有亏损交易的平均亏损金额。这两个数字合在一起就是你这个模块的期望值——它告诉你你在这个模块上长期做下去是会赚钱还是会亏钱。胜率低、盈亏比也低这是最差的模块做得多亏得多应该直接关停。胜率高、盈亏比高这是你应该加资源的核心模块把更多资金和时间分配给它。胜率低但盈亏比高这是典型的趋势跟踪策略的特征——大多数交易小亏少数几笔大赚覆盖全部亏损还有盈余。这种策略只要你能坚持执行不走样是可以继续保留的。胜率高但盈亏比低这是典型的网格交易或者套利策略的特征——大部分交易赚小钱偶尔一笔大亏可能把之前的盈利全部吃掉。这个模块需要检查你的止损规则有没有在执行。我那个在字节跳动的朋友做完这个统计之后他的科技股主动交易模块的胜率只有34%盈亏比只有0.7。你知道这两个数字放在一起意味着什么吗意味着他平均每做三笔科技股交易只有一笔赚钱而且赚钱的那一笔平均赚的钱还没有亏钱的那两笔平均亏的钱多。这是一个期望值为负的游戏。他在这个模块上花的每一分钟、投入的每一块钱长期来看都是在给市场做慈善。二分切割沿着调用链一层一层往下追模块化统计只能告诉你“你的亏损集中在主动选股”但它不能告诉你具体是主动选股的哪个子类在亏钱。就像你发现了系统延迟集中在支付模块但你还不知道是支付模块里的信用卡支付有问题还是余额支付有问题。你需要二分法继续往下切。二分法的操作逻辑非常简单把一个可能有问题的集合从中间劈成两半分别检查每一半是否有问题。如果有问题的信号出现在左半那就把左半再劈成两半继续追。一直追到你不能再分的粒度你就找到了Bug最精确的位置。在投资复盘里二分法可以沿着多个维度来切。第一个维度市场。把你的主动交易拆成A股、港股、美股。你可能会发现你在A股上的操作虽然不怎么赚钱但也不怎么亏真正把你拖下水的是港股的几次惨烈抄底。港股是一个和A股估值逻辑、流动性环境、投资者结构都完全不同的市场你以为你买的便宜货可能是常年便宜的价值陷阱。如果你的港股模块持续亏损你不需要分析港股的未来走势。你只需要承认一件事你目前的能力圈覆盖不了这个市场先退出来。第二个维度行业。如果你的亏损主要集中在A股继续切科技、消费、医药、周期、金融。你是芯片工程师你的亏损是不是恰好集中在科技板块如果是回到第一章第四节——你正在用技术鉴赏家的眼光去买股票你把对架构的审美当成了对公司价值的判断。科技股不是不能投但你需要一套完全不同于你日常工作的评估框架而在你没有建立那套框架之前先把这个模块的权限降到只读。第三个维度操作模式。如果你在科技股板块内部的盈亏分布也不均匀继续切你是左侧抄底亏得多还是右侧追高亏得多你是做波段交易亏得多还是拿长线也亏你可能会发现一个令人不适但数据确凿的事实你所有的追高操作加在一起是亏损的你所有的抄底操作加在一起也是亏损的。这说明你不是运气不好你是没有建立任何一套完整的择时决策流程。你在凭感觉买卖而你的感觉在过去两年里给出的信号准确率低于扔硬币。定位问题模块你亏损最多的那个模块可能应该直接删除二分法追到最后你一定会定位到一个或者几个颗粒度极细的问题模块。比如“港股科技股的左侧抄底”或者“A股小盘概念股的追涨打板”。这些模块的共同特征是你在上面消耗了大量的时间、注意力和资金但它们贡献的收益是负的或者即便有正收益也低到不够补偿你为它们付出的时间成本。面对这些问题模块你有两个选择。第一个选择是修复。修复意味着你给这个模块加上一套完整的交易规则——有明确的买入触发条件、有预设的仓位上限、有硬编码的止损断言、有定期的持有逻辑复查。然后把资金降到总资产的5%以内把它当成一个沙箱实验继续跑。跑够至少四个季度重新统计一次胜率和盈亏比。如果指标显著改善了再逐步提高权限。如果没有改善就执行第二个选择。第二个选择是删除。承认这个模块超出了你当前的能力边界把仓位清零把资金转入你的核心模块——指数基金。不是永远不碰它是在你有足够证据证明自己已经具备了在这个模块上稳定盈利的能力之前不再碰它。删除一个模块不需要是永久判决但恢复一个被删除的模块必须经过完整的沙箱测试流程就像你在2.8节学的蓝绿部署一样。我见过的绝大多数工程师在第一次做二分法排查时都会面对一个他们潜意识里早已知道但不愿意承认的事实他们在科技股上的超额交易不是投资行为是情绪消费。他们买入科技股的时候获得的多巴胺刺激和他们买一台新手机、拼一台新主机、入一块机械键盘时获得的多巴胺刺激来源是一样的。他们不是在用钱赚钱是在用钱购买一种“我在参与技术变革”的身份认同。这个认同本身没有错但它不应该是你用投资账户来买单的。如果你在做完这节的分层排查之后发现自己的问题模块也主要是科技股的主动交易我要给你的建议非常明确在下一个季度把科技股主动交易的仓位全部清掉把这部分资金全部转入你配置好的沪深300加中证500的镜像阵列里。你仍然是这个行业的从业者你仍然可以用你的专业能力在你的本职工作中创造价值和获取回报。但你的投资组合不需要和你对技术的热爱绑定在一起。让你的钱去做那些无聊的、不性感的、没有技术含量的指数跟踪。无聊在这个语境里是褒义词。在下一节我们要把这些被二分法揪出来的问题模块从“被我人为筛选过的历史回测”里彻底剥离出去。你会学到怎么给你未来想尝试的任何新策略写一个单元测试——用你没有参与过的历史数据去测它在真金白银进场之前先看它能不能在回测里活下来。你花两天写的策略代码如果在五分钟的回测里就爆了那它连进入沙箱的资格都没有。