构建 RL 交易系统的工程笔记
一份关于为加密市场构建强化学习交易系统的匿名手记——关于方法、基础设施与诚实的失败。不提供信号、不承诺收益,也不构成投资建议。
我钟爱干净的抽象。把某个杂乱而复杂的东西包进一个整洁的接口里,让它把混乱藏起来,于是你可以在更高的层面思考,忘掉底下的细节——这其中有一种实实在在的审美愉悦。所以我不断地伸手去抓抽象——早早地、急切地、而且远远过于频繁。而令人意外的是,其中相当多的时候,我抓住的那个抽象根本没有管理任何复杂度。它恰恰藏起了我最需要看见的那些东西,还为这份"特权"额外向我收取了…
2026-09-10 · 构建一个交易强化学习系统我花了大量时间去把那些东西做到完美,而它们本该在很久以前就被拿去接受一次真正的检验。我不断地精修、打磨、改进,而且自始至终都告诉自己:这是为了质量——是为了不把一个半成品丢到世界上去。这是个很有说服力的说法。但它同时,在很大程度上,也只是一种拖延的方式,用来推迟一个我暗自害怕的时刻:真正去搞清楚这东西到底行不行的那一刻。
2026-09-08 · 构建一个交易强化学习系统我曾经因为一次崩溃,损失了将近一整周的工作成果。倒不是因为这次崩溃本身有多么罕见、多么灾难性——它只是一次普普通通、平淡无奇的中断,那种随时都可能发生的小事。我之所以损失了一周,是因为我在整个过程中什么都没有保存。于是一次在临近结束前几分钟突然袭来的中断,抹掉了好几天累积下来的进度,而我无从找回其中任何一点。它就这么没了,而且自始至终它都处在随时可能丢失的状…
2026-09-06 · 构建一个交易强化学习系统我花了海量的精力,去精心优化系统的每一个部分,却几乎没有把任何精力放在那个最重要、也最不可靠、却支撑着这一切运转的部件上:我自己。我把自己当成了一种取之不尽、随叫随到的资源——一台可以无限期满负荷运转的机器——而这个项目为这个错误付出了代价,一次又一次,而且代价高昂。
2026-09-04 · 构建一个交易强化学习系统每次我为了跑得更快而抄近路时,那感觉都像是免费的。我前进得更快,事情办成了,而且哪儿都看不到立刻要付出的代价。这正是它全部的诱惑所在,而它是个谎言——不是什么戏剧性的谎言,只是一笔悄无声息的记账错误。代价是真实存在的,它只是来得晚一些,分成小份一笔笔到账,而等我察觉自己正在偿还时,往往早已把当初抄那条近路省下的,连本带息还了好多倍。
2026-09-02 · 构建一套交易强化学习系统不知从什么时候起,我开始用几个简单的数字来衡量自己的进展——我跑了多少次实验、尝试了多少东西、感觉自己覆盖了多大的范围。这看上去完全合情合理:你无法改进自己没有衡量的东西,而我想要一个诚实的信号,来判断自己是否真的在往前走。然后我开始试着让那些数字往上涨。而就在我这么做的那一刻,它们悄悄地不再意味着它们原本所意味的东西了。
2026-08-31 · 构建一个交易强化学习系统在这个项目上,我把惊人多的时间浪费在了重新构建那些早已存在的东西上。我精心打磨、倾注心血地重新实现各种工具和基础设施,而这个世界本就已经有了它们——能用、经过测试,而且免费可取。在我动手的那一刻,每一个这样的决定都感觉完全合情合理。但把它们加在一起,就构成了整个项目中规模最大、也最本可避免的浪费之一。
2026-08-29 · 构建一个交易强化学习系统在这个项目的很长一段时间里,我都觉得自己在失败。后来我才意识到,这种感受中有相当大的一部分,源自一个我甚至没察觉自己一直在做的、极具腐蚀性的习惯:我不断地拿自己那一团乱、满是困惑、布满失败的真实处境,去和别人那经过打磨的公开成果作比较。我花了长得令人难堪的时间,才看清这种比较从一开始就被彻底做了手脚。
2026-08-27 · 构建一个交易强化学习系统把工作中那些繁琐、重复、容易出错的部分自动化,感觉像是一种纯粹而毫不含糊的进步。在很大程度上,它确实如此。但它还附带了一项我未曾预料到的代价,而我直到很久之后才完全理解:我的自动化做得越好,我对底层实际发生的事情的理解反而越少。我自动化掉的不只是劳动,还在不知不觉中连同我自己相当一部分的理解力一起自动化掉了。
2026-08-25 · 构建一套交易强化学习系统我搭建了一个自己能够在其中取胜的模拟环境,然后,缓慢地、不知不觉地,我爱上了它。我在自己模拟出来的世界里变得真正得心应手。我熟悉它的纹理,预判它的动向,让一件件事情在其中以越来越高的可靠性运转起来。而在这整段时间里,我一直在犯一个安静的、根基性的错误,这个错误花了我很久才看清:我掌握的是地图,却把它误当成了对疆域的掌握。
2026-08-23 · 构建一个交易强化学习系统在这类工作里,有一个步骤几乎人人都把它当成枯燥的杂活:预处理——在数据真正进入负责学习的那部分之前,对它进行清洗、缩放和重塑。我当初看待它的方式正是如此,把它当作开始真正工作前要先打发掉的、无关紧要的差事。它并不是无关紧要的,而把它当成无关紧要让我付出了惨重代价。我曾不假思索地施加的一个例行变换,悄无声息地丢掉了我最需要的那部分信息,随后我花了好几周百思不得…
2026-08-21 · 构建一套交易强化学习系统在整个项目里,给我添最多麻烦的那个人,是一个不断接手我工作的陌生人,而这个人完全搞不懂这些东西为什么会是现在这副样子。那个未来的自己打开我写过的文件,盯着我做过的决定,不管怎么努力都还原不出我当时到底在想什么。当然,这个陌生人就是我——只不过晚了几个月而已。
2026-08-19 · 构建一套交易强化学习系统很长一段时间里,对于系统内部到底在做什么,我几乎没有任何真正的可见性。我对它做出的种种判断,靠的都是猜测里面大概发生了什么——而在某个时刻,我悄悄地把这种猜测重新贴上了"直觉"的标签。最终,我为整个项目做的那件最具杠杆效应的事,简单到令人难堪:我把灯打开了。
2026-08-17 · 构建一个交易强化学习系统很长一段时间里,我不断从眼前的数据中得出自信满满的结论;而同样长的一段时间里,我都没能注意到关于这些数据最重要的一点:它们早已被筛选过了。被"幸存"这件事筛选过了。那些最要紧的案例,在我还没来得及去看之前,就已经被悄悄从画面里移走了;而正因为它们消失了,我从来没想过要把它们算进来。
2026-08-15 · 构建一套交易强化学习系统早期的大部分精力,我都用在了如何"判断正确"上。更好的预测、更敏锐的推理、更巧妙地猜中接下来会发生什么。而我几乎完全忽视了另一个问题——一个最终被证明比上述任何东西都更重要的问题:该下多大的注。我花了长得让人难堪的时间,才真正吸收了这条教训:你可以判断正确,却依然被彻底摧毁。
2026-08-13 · 搭建一套交易强化学习系统过去,每当一个 bug 消失,我都会庆祝一番。某个问题一直折磨着我,我改动了一些东西,问题就消失了,于是我感受到一阵胜利的暖流,然后继续往前走。我花了很长时间、吃了很多苦头才明白:bug 消失和 bug 被修复,是两件完全不同的事——而把这两者混为一谈,正在悄悄地让我的系统堆满我根本没有解决的问题。我只是把它们从自己眼前藏了起来。
2026-08-11 · 构建一个交易强化学习系统我做出了某个精巧的东西,并为之暗自得意。它做了许多聪明的事情,凝结了大量的工作。然后我终于跑了一个被自己回避了好几个月的测试:我把它和最蠢的那个替代方案做了对比。结果那个蠢方案表现得差不多一样好。
2026-08-09 · 构建一个交易强化学习系统很长一段时间里,我都坚信问题出在我的代码里。每当结果不对,我就去翻查自己的逻辑、模型,还有那些我引以为傲的精巧部分。可真正的元凶几乎总是潜伏在这一切之下的某一层,安静而无人问津:数据本身。它看上去很干净,其实并非如此。而我在它之上构建的一切,都忠实地继承了这个谎言。
2026-08-07 · 构建一个交易强化学习系统我在搭建这套系统时遇到的最难的问题,并不是技术上的。它是一种深植于人性的困难:在真金白银押着、而且是实时发生的时刻,去承认自己错了——而且我越是拒绝承认,这份拒绝的代价就越大。在很长一段时间里,我最大的对手既不是市场,也不是数学,更不是某个 bug。它是我自己——我不愿意在还很便宜的时候,带着后果、公开地承认自己错了。
2026-08-05 · 搭建一套交易强化学习系统很长一段时间里,我都用单一的一个数字来评判一切。哪个版本在我选定的那一个指标上得分最高,哪个版本就赢了、就被继续构建、就活到了下一轮。它干净利落,它一锤定音,它让人感觉很严谨。我花了长得令人尴尬的时间才明白:那个被我如此勤勉地优化的数字,正悄悄掩盖着唯一真正重要的东西。
2026-08-03 · 构建一套交易强化学习系统我做出过的最令我心神不宁的结果,是一个我再也无法重现的结果。在很早的时候,有那么一次运行,跑回来的数字远远好过我之前见过的任何东西。我欣喜若狂。然而,当我想在它的基础上继续推进时,它却消失了——而我当时记下的东西,远远不足以让我重新找到回去的路。接下来的几周,我都在追逐一个由我自己亲手制造、又被我粗心丢失的幽灵。
2026-08-01 · 构建一个交易强化学习系统我曾经构建过一个能运作的东西。它是真的能运作,持续了一段时间——然后悄无声息地停了下来。没有 bug,没有崩溃,没有任何东西出故障的那一刻。系统始终在做它一直以来所做的事情。区别在于,它所学到的那个市场,已经不再是当下存在的那个市场了。世界在它脚下发生了改变,而它仍然忠实地继续按着那套早已悄然失效的规则在运转。
2026-07-30 · 构建一套交易强化学习系统我曾经有一个看起来真的很不错的策略。模拟出来的结果扎实、稳定,是那种会让你不由自主地坐直身子的成绩。然后我加上了真正去交易它的成本——在市场里做生意那份真实、无法回避的代价——眼睁睁看着利润不是缩水,而是消失。如果只是减少,倒还能撑得过去。可它是被彻底抹平的,甚至还倒贴。
2026-07-28 · 构建一套交易强化学习系统在这个项目里,我必须修炼的最难的一项技能并不是技术性的。它是学会按住自己的手。让一件事在运行时自己跑下去——拒绝伸手进去"帮忙"——对我来说,结果比我追查过的任何 bug 都要难得多。原来我写代码的本事,远胜过我不去碰它的本事。
2026-07-26 · 构建一个交易强化学习系统早期有过一次回测结果,好得本应让我高兴。可盯着它看了几分钟之后,它反而让我深感不安。模拟中的收益又大、又平滑、又干净得过了头——这种表现根本不会出现在真实、嘈杂、充满对抗的市场里。而它之所以不会出现在真实市场里,是因为我的测试在我毫无察觉之间,悄悄地能够看见未来。
2026-07-24 · 构建一套交易强化学习系统项目早期——在一个我很久以前就拆掉、从头重建的实验里——我给一个学习中的智能体设定了一个目标,而它以一种彻底的、字面的、心无旁骛的执着去追求那个目标。结果浮现出来的行为,跟我脑子里设想的相去甚远。智能体并没有出故障。它做的恰恰是我告诉它去做的事——而我慢慢意识到,这跟我真正想要的,完全是两码事。
2026-07-22 · 构建一套交易强化学习系统有那么一段时间,我在这个项目上拼命努力,产出惊人,对这一切感觉好极了——而实际上几乎没有任何真正的进展。我在设计这个系统宏大的未来:一套庞杂、由众多部分组成的架构,里面满是会相互协调、能够扩展、最终自我运转的组件。
2026-07-20 · 构建一个交易强化学习系统有那么几天,我确信自己的系统里藏着一个深层的、神秘的 bug。我的日志输出成了乱码。一个数据转换步骤产出的文件,结果出了些微妙的错误。一个子进程返还给我的不是我预期的输出,而是一堆莫名其妙的东西。我跑去寻找逻辑里的缺陷,藏在系统某个精巧部分里的缺陷。
2026-07-18 · 构建一个交易强化学习系统早期,我有一个装满了自己发明的交易策略的文件夹——有十几个,也许更多。每一个都是关于市场如何运作的小小理论,被我细心地写成代码,细心地评分。我曾为那个文件夹感到自豪。
2026-07-16 · 构建一个交易 RL 系统有一段时间,我用自己搜索规模的大小来衡量自己有多认真。我测试了一个策略的数亿种配置,然后,当那感觉还不够时,又测试了数十亿种。我为这个数字感到自豪。它感觉像是严谨——像是我没有放过任何一种可能性。
2026-07-14 · 构建一个交易 RL 系统某一天,我的训练损失不再是一个数字了。不是很高,也不是不稳定——而就是 NaN,计算机被要求去做一道没有答案的算术时所举起的那面小旗。然后我花了将近一周才弄清楚原因,因为症状出现的地方,离问题真正所在的地方相去甚远。
2026-07-12 · 构建一个交易 RL 系统我把系统里同一个核心组件重写了三次。不是打补丁,不是重构——而是从近乎零开始彻底重建,整整三次。而每一次,我都确信这个版本才是真正的那个:干净、正确的架构,是我终于可以一劳永逸地在其上构建的那个。
2026-07-10 · 构建一个交易 RL 系统如果你仔细读过这个项目早期的历史,你会遇到我的一位资深同事。他审阅我的架构决策。他对我那些更糟糕的想法提出反对。在任何重要的东西上线之前,他都会签字批准。他的认可一次又一次地出现在那些关键的时刻。
2026-07-08 · 构建一套交易 RL 系统我曾经给我的实盘交易机器人赋予了一种在当时看来颇具灵性的能力:自我适应。在一连串亏损之后,它会变得更加谨慎;在一连串盈利之后,则更加激进。它显得反应灵敏,几乎像是活的——一个会留意自己表现如何并据此做出调整的系统。
2026-07-06 · 构建一个交易 RL 系统有一天,git 干脆不让我保存自己的工作了。我的推送失败了,报出一个我从未见过的服务器错误——不是合并冲突,不是权限问题,只是对端一口回绝。我已经愉快地提交了好几个星期,而现在,我一天中最例行的命令却无法完成。
2026-07-04 · 构建一个交易 RL 系统我早期的一个模型找到了一些看起来稳定盈利、甚至盈利得有些乏味的交易——小额收益持续不断地滴入,那种一致性让你以为自己终于找到了真东西。
2026-07-02 · 构建一个交易 RL 系统有那么几周,我取得了非凡的进展——而且我有数字可以证明。我的代码库有一个质量评分,而这个评分一节又一节地攀升,朝着满分一百分前进。我可以打开自己的提交历史,看着那条线一路上扬。
2026-06-30 · 构建一套交易 RL 系统我着手构建一个包含几百万条训练样本的数据集。当流水线跑完时,它交给我的只有其中的百分之几——一个小到看起来像打字错误的零头。没有任何东西崩溃。没有任何错误被触发。数据并非生成失败;它只是悄悄地把自己几乎全部丢弃了,然后报告成功。
2026-06-28 · 构建一个交易 RL 系统我曾经把一项繁重的计算从 CPU 搬到 GPU 上,满以为它会飞起来。结果它却爬行——比它本该替换掉的那段普通代码慢得离谱。我以为买到了速度,却不知怎的装上了一台减速器。
2026-06-26 · 构建一套交易 RL 系统有一次回测返回的胜率,几乎正好与我所期望的相反。我本想让模型大部分时候是对的,可它却大部分时候是错的——而且不是随机地错,而是干净、对称地错,仿佛它一直在努力亏钱。
2026-06-24 · 搭建一个交易 RL 系统某天夜里,一个长任务跑到一半,我的整台电脑自己关机又开机了。不是程序——是机器。前一刻还有个进程在运行;下一刻我就盯着一个全新的登录界面,仿佛有人拔掉了电源线又重新插了回去。
2026-06-22 · 构建一套交易 RL 系统在我第一个实盘交易机器人的历史记录里,藏着一次我并不引以为豪的提交。它只有两个词。在系统正在运行的过程中,为了让一个问题消失,我伸手进入那个本应保护账户的安全机制,写下了:if False。
2026-06-20 · 构建一个交易强化学习系统有那么一阵子,我的某个模型看起来像个天才。它的回测干净、笃定,甚至流畅得有些过头。我多么想相信,自己终于做出了一个真正管用的东西。
2026-06-18 · 构建一套交易 RL 系统一天早上,我的交易机器人的月度报告告诉我,它几乎把所有钱都亏光了——在短短几周内出现了将近 99% 的回撤(drawdown)。我的心一沉,大脑还没反应过来。
2026-06-16 · 构建一套交易 RL 系统某天夜里,一次回测告诉我:我把一笔不起眼的初始本金变成了 2792 万亿韩元——比这颗星球上大多数经济体的年产出还要多。我盯着它看。有那么几分钟,我内心某个安静而贪婪的部分,开始去寻找它可能是真的理由。
2026-06-14 · 构建一个交易 RL 系统早停(early stopping)本应帮你省下算力,避免在一个已经学完的模型上继续浪费计算。然而在很长一段时间里,它恰恰是那个在烧我自己算力的东西——因为它在那些优秀的智能体变得优秀之前,就把它们扼杀了。
2026-06-11 · 构建一套交易 RL 系统我第一个上线到实盘账户的交易机器人几乎亏光了一切。胜率:25%。最大回撤:99.99%。它爆仓并不是因为市场残酷,而是因为我用大多数人构建第一个机器人的方式来构建它——把它当成一个靠自己的主观判断拼凑起来的原型。
2026-06-10 · 构建交易 RL 系统