屏幕上的两条曲线像一道无形的裂痕,横在林晨心头。
那个 18.7% 的回测收益率带来的短暂兴奋早已冷却。此刻,他更关注的是训练集损失曲线平滑下降,而验证集曲线却在某个节点后开始微微上扬的分化现象。过拟合。这个在机器学习领域老生常谈的问题,在量化交易的语境下,意味着模型可能只是“记住”了历史数据的噪音,而非真正学会了市场规律。把这样的模型投入实盘,无异于蒙眼走钢丝。
“不能急着上实盘”。林晨关掉回测图表,向后靠在椅背上,书房里只听得见主机风扇低沉的嗡鸣。窗外的鹏城夜空,零星灯火点缀着密集的楼宇轮廓。他揉了揉发酸的眼眶,思路逐渐清晰。
问题发现了,优化方向也有了,但在这之前,还有一个更根本的环节被他忽略了——风险控制。一个只能预测涨跌(哪怕预测精度尚可)的策略,是残缺的。它没有回答:如果预测错了怎么办?该投入多少资金?亏损到什么程度必须退出?盈利了又该何时落袋为安?
这些,才是交易系统中决定生死存亡的部分。收益决定了你能走多高,而风控决定了你能不能活下来。
接下来的几天,林晨暂时搁置了模型优化的具体编码工作,转而一头扎进了风险管理的知识海洋。他泡在 QuantConnect、聚宽等平台的社区论坛,翻阅那些真正经历过市场牛熊的量化交易者分享的经验帖——尤其是那些关于爆仓、关于回撤控制的血泪教训。同时,他系统性地查阅学术论文和经典书籍,从最基础的《期货市场技术分析》中关于资金管理的章节,到更现代的《主动投资组合管理》中关于风险预算的复杂模型。
他像个海绵一样吸收着,并在笔记本上(这次是真正的纸质笔记本,他感觉有些核心思路需要手写下来加深记忆)梳理出关键点:
仓位管理: 这是风控的第一道闸门。绝对不能把所有资金押注在一次交易上。他学习了固定比例法(每次投入总资金的固定百分比)、凯利公式(在已知胜率和赔率情况下的最优下注比例),以及更具动态性的波动率调整仓位法(市场波动大时自动降低仓位)。
止损策略: 这是防止单次亏损无限扩大的“保险丝”。他研究了固定价格止损、移动止损(如跟踪止损)、技术指标止损(如跌破某条均线)以及基于波动率的百分比止损。每种方法都有其适用场景和优缺点。
止盈策略: 与止损相对,但同样重要,目的是锁定利润,避免坐过山车。除了固定目标止盈,还有移动止盈、分批止盈等更灵活的方式。
组合风险: 当他未来同时运行多个策略、交易多个品种时,还需要考虑策略之间的相关性,避免所有策略在同一时间遭遇同类型风险,导致整体回撤过大。
“最重要的原则”,林晨在笔记本上重重写下,“永远是活下去。收益可以慢慢积累,但本金一旦大幅亏损,需要更高的收益率才能回本,而且心态极易崩溃”。
理论需要落地。他重新打开 PyCharm,在之前那个略显单薄的“策略”类旁边,开始创建一个全新的“RiskManager”(风险管理器)类。这个类将作为未来交易系统的核心组件之一,独立于预测模型,专门负责计算仓位、发出止损止盈指令。
他决定先从相对稳健的方法入手。在仓位管理上,他实现了一个基于账户总净值的固定比例方法,并设置了一个最大单笔仓位上限(比如总资金的 2%)。同时,他写了一个简单的波动率监测模块,计算标的近期价格波动率(如 ATR 指标),当波动率异常升高时,仓位比例会自动下调。
止损方面,他选择了“百分比止损”结合“移动止损”的混合方式。入场后,先设置一个基于入场价的固定百分比作为初始止损(例如 -5%)。一旦价格向有利方向移动超过一定幅度,止损价就自动上移(跟踪止损),锁定部分利润,同时给予行情继续发展的空间。
止盈则相对灵活,他设置了两重止盈:第一重是固定比例止盈(如 +10%),到达后平掉一半仓位,剩下的一半采用更宽松的移动止损,博取更大趋势的可能。
代码敲击声中,一个个函数被构建起来:calculate_position_size、check_stop_loss、update_trailing_stop、check_take_profit……他力求逻辑清晰,参数可配置,方便后续调整和优化。
“光有逻辑还不够,得能直观看到效果”。林晨心想。他修改了回测框架,将新的风控模块整合进去。回测引擎在模拟交易时,每一笔买卖决策不仅要看模型的预测信号,还必须经过 RiskManager 的审核:能买多少?有没有触发止损或止盈?
他选用了同一段历史数据重新回测。这一次,回测报告出来后,累计收益率从之前的 18.7% 下降到了 15.2%。表面看收益降低了,但林晨仔细分析交易明细和资金曲线图后,眉头反而舒展开来
>>>点击查看《AI时代:码农的涅盘重生》最新章节