每天早上6点,在写一行代码之前,我都在盯着期货图表。ES(标普500)、NQ(纳斯达克)、CL(原油)、GC(黄金)——NinjaTrader上的8个品种,寻找交易机会。
我交易多年。而随着我同时做这两件事——交易和开发软件——我越发意识到,它们本质上是同一套纪律,只是披着不同的外衣。
第一课:风险管理 > 判断正确
在交易中,你可以在60%的情况下判断错误,却依然盈利。听起来不可能,但数学很简单:如果盈利单的规模是亏损单的2倍,你只需要34%的胜率就能保本。
软件开发也是如此。你不需要每个架构决策都完美无缺。你需要的是让失败代价足够小,让成功不断累积。
正因如此,我会:
- 部署小规模变更(小亏损交易)
- 用功能开关控制风险变更(止损)
- 保留回滚流程(退出策略)
- 绝不在周五部署(绝不持仓过周末)
把全部账户押在一笔交易上的交易者会爆仓。把未经测试的大规模变更部署到生产环境的开发者也会崩盘。同样的道理。
第二课:交易框架比入场时机更重要
新手交易者痴迷于入场时机。"我应该在4521.25还是4521.50买入?"这根本不重要。重要的是交易框架:趋势是否对你有利?是否有明确的失效点?风险回报比是否至少达到2:1?
新手开发者痴迷于技术选型。"应该用Prisma还是Drizzle?"这也不重要。重要的是架构:数据模型是否合理?API设计是否良好?未来能否在不重写整个系统的情况下改变主意?
具体工具是入场点,架构是交易框架。把框架做扎实,工具选择就变成了一个可以忽略的误差。
第三课:记录一切
我有一本交易日志。每笔交易:入场、出场、理由、情绪、市场背景、结果、教训。6个月后,模式浮现出来:我周一容易过度交易;疲惫时我会持有亏损单太久;连胜之后我会过于激进地加仓。
现在我也有了工程领域的对应物:架构决策记录(ADR)。每个重大决策:我选择了什么、拒绝了什么、为什么、将来会改变什么。经过一年的Nexural开发,模式已经清晰:我在早期对错误处理投入不足;我过度设计了认证系统;我始终低估了数据库迁移的复杂度。
通过文档实现自我认知。同样的实践,不同的领域。
第四课:幸存者都很"无聊"
我认识的最成功的交易者都很"无聊"。他们日复一日地交易同样的2-3种模式,使用同样的风险参数。没有梭哈操作,没有"今天感觉运气不错"。只是持续执行经过验证的优势策略。
我参与过的最好的代码库也同样"无聊"。一致的代码模式,可预测的文件结构,标准的命名规范。没有花哨的黑客技巧,没有"我发现了一种很酷的实现方式"。只有可靠、可维护、表里如一的代码。
在两个领域,"无聊"都被低估了。
第五课:你是在和自己交易
市场不在乎你。它们不是针对你。每一笔亏损都是你决策的结果,而非市场的恶意。
软件也不在乎你。Bug不是针对你个人。生产环境宕机不是宇宙在惩罚你。它们是决策的结果——通常是几周前在完全不同的约束条件下做出的。
承担责任(在交易中,这叫"对自己的盈亏负责")是区分专业人士和业余爱好者的关键,在两个领域都是如此。
元课程
交易和软件工程都是在不确定性下管理复杂性的学科。在交易中,不确定性来自市场方向。在软件中,不确定性来自用户行为、系统负载和边界情况。
工具不同,但原则完全相同:
- 先管理风险,再追求回报
- 执行之前先有计划
- 记录发生了什么并从中学习
- 保持一致性,而非耍小聪明
- 活到足够久,让优势持续累积
因为交易,我写出了更好的软件。因为开发软件,我交易得更好。这种跨领域融合是真实存在的。
