一周复盘:策略做减法,基建修漏洞
这周两条线:交易策略踩了一周坑后回归基础,agent 基建修了几个”看起来玄学”的漏洞。写下来发现,两条线其实是同一条教训——
系统里的复杂度只增不减,做减法和验证是维护成本最低的方式。
策略线:加规则的死法
这周在交易策略上连踩三个坑,每个坑都来自一条”为某种情况准备的规则”:
- 连标加分——本意是给连续触发信号的标的加权重,结果是系统倾向追高,容易踩到半山腰
- 均线黏合——本意是判断长期横盘后价格对 MA5 的得失,用来防错误减仓;但真突破之前必然黏合,横盘黏合和突破前黏合在图上长一个样,误判率高得离谱
- MA5 乖离加分——上面漏了突破场景,就加乖离项找补,结果乖离过大恰恰触发均值回归,反着吃
把三个坑连起来看,死法非常清晰:每条新规则都是对历史的一次拟合。连标加分拟合”强者恒强”,黏合拟合”横久必跌/必涨”,乖离拟合”偏离必回归”——这些假设在被发明的那段行情里都成立过,所以才有人写进策略。但价格没有义务尊重任何历史规律。更隐蔽的是:单条规则测过,规则之间的组合没人测过。三条规则互相打架时系统听谁的,取决于实现顺序这种无关紧要的事。
这周想明白的几条:
- 描述不是承诺。 均线黏合描述的是”大家成本接近了”,这是事实;”所以要突破”是自己加的戏。趋势、量能、流动性这些基础指标之所以可靠,是因为它们只描述现状,不许愿未来
- 消融测试。 每条规则问一句:删掉它,回测差多少?差额小于噪声的直接删。那些”砍掉会心疼但加了没明显变好”的规则,买的不是收益,是心安
- 评分系统是排序,不是预测。 活下来的那套十分制,本质是回答”谁更值得下注、下多少、错了怎么退出”——排序和风控不需要预测对,只需要统计上占优。期望值 = 胜率 × 平均盈利 − 败率 × 平均亏损,把平均亏损焊死之后,胜率不到一半也能赚钱
- 别让预测披着评分的皮回来。 下次谁往评分项里加”看涨形态加一分”,这周的学费就白交了。评分项只该由统计证据进,不该由图形美学进
收束成一句话:回归基础技术过滤。过滤、排序、数学——这三样不需要市场配合。
基建线:三个”玄学”故障的真实根因
故障一:文档里写了个不存在的出口
一个 agent 的静态记忆文件长期顶格(2200 字上限用到 96%),排查出口时发现文档里写着”每周五自优化时段维护此文件”。听着很合理,追下去发现:周五的任务是股票周回顾,全文没有一行跟记忆维护有关。文档承诺了一个不存在的出口,而所有人都信了。
教训:排查”只进不出”类问题,别信文档写的行为,信任务的实际指令。删除那行假出口后,问题反而变得诚实了——现在谁都看得见出口确实只有一条。
故障二:记忆丢了吗?没有,过滤了
另一个 agent 报”旧记忆想不起来了”。查写入,每条都正常入库;查召回,只有几条旧记录浮出来。根因在查询配置:存储分两层——写入时先进原料层,后台整理后才产出成品层——而查询的类型过滤只配了成品层。新写的东西全在原料层,过滤器把它们挡了。
两层存储配单层过滤,表现出来就是”记忆丢了”。同一个系统,过滤条件不同,世界完全不同。 以后遇到”数据明明在但查不出来”,先查过滤器,再怀疑存储。
故障三:隔三差五抽风的容器
有个容器”偶尔”变慢、”偶尔”报错,一直当玄学故障养着。这周顺手查了内核的资源计数器:内存撞击上限 1601 次,杀进程 3 次。不是偶尔抽风,是每天都在撞墙——盘中任务高峰几个进程叠一起就超 4G 上限,内核默默杀掉最不听话的那个,表现出来就是”莫名其妙的偶发失败”。
扩容之后 OOM 计数清零,”玄学故障”一个都没再出现。教训:先看计数器,再谈玄学。 Linux 内核对资源问题从不撒谎,撞限次数、杀进程次数都明码记着,只是没人去看。
顺手的清理
把定时任务列表过了一遍,删掉 6 个死任务——全是”已禁用且过期”的组合:有的被新策略取代,有的一次性任务忘了删。定时任务列表跟策略规则一个德行:只加不减的话,三个月后没人知道哪个在真跑、哪个是尸体。活下来的 4 个全部实测有用。
两条线的公约数
策略的坑和基建的坑,结构上是同一个:
- 复杂度只增不减。 规则、补丁、任务、文档——加的时候每样都合理,叠加三个月后没人说得清全貌
- 文档会漂移。 写下的行为和实际跑的行为,不保证一致,出事时文档还会误导排查方向
- 验证要打在实物上。 回测打不穿的是拟合,实测打不穿的才是系统;玄学故障先查计数器,玄学亏钱先跑消融
这周之前系统”看起来在跑”,这周之后才敢说它”知道自己为什么跑”。差价就是一周学费,交得起。
这周还干了件跟技术无关的事:恢复了十年前的羽毛球。肌肉记忆是真的,心肺是假的。技术复盘归技术复盘,身体的债也记在这,下周一起还。