1. 从"拍脑袋"到"讲道理":为什么期货AI交易必须死磕特征工程
很多人做期货AI交易,第一步就错了。他们拿到K线数据,把开盘价、最高价、最低价、收盘价、成交量这五个数往模型里一塞,跑出来一个回测曲线,年化收益百分之几百,夏普比率高得离谱,然后兴冲冲地上实盘,结果不到两周就爆仓。这个场景我见过太多次了,问题出在哪里?出在他们把"数据"当成了"特征"。
数据是原始的、未经加工的、充满噪声的原材料,而特征是从数据中提炼出来的、能够反映市场某种规律或状态的、对预测目标有信息量的变量。这两者之间的差距,就像刚从地里挖出来的铁矿石和已经锻造好的刀具之间的差距。你拿铁矿石去切菜,切不动是正常的。
期货市场的数据有几个非常棘手的特性,这些特性决定了特征工程在这个领域不是"锦上添花",而是"生死攸关"。第一,信噪比极低。期货价格每时每刻都在波动,但真正有预测价值的信号可能只占所有波动的百分之一甚至千分之一。第二,非平稳性。市场的统计特性会随时间变化,今天有效的规律明天可能就失效了。第三,多尺度性。同一个品种,在分钟级别、小时级别、日线级别上呈现出的规律可能完全不同,甚至相互矛盾。第四,非线性依赖。价格和成交量、持仓量、波动率之间的关系远不是简单的线性关系。
我刚开始做期货AI的时候,犯过一个典型的错误:用日线数据训练了一个LSTM模型,输入是过去30天的OHLCV,输出是第二天的涨跌方向。回测准确率达到了58%,看起来还不错。但实盘跑了一个月,准确率掉到了49%,基本等于随机猜测。后来我花了很多时间复盘,发现问题出在特征上——我用的特征全是原始价格和成交量,模型学到的是"过去30天涨了,明天大概率还涨"这种动量效应,但期货市场的动量效应非常不稳定,一旦市场从趋势转为震荡,这个规律就完全失效了。
所以,做期货AI交易,特征工程不是第一步,而是贯穿始终的核心工作。你需要从原始数据中构造出能够捕捉市场不同维度状态的变量,包括但不限于:趋势强度、波动率状态、市场微观结构、资金流向、跨品种联动、季节性规律等等。每一个特征背后,都应该有一个清晰的经济学或行为金融学逻辑支撑,而不是"我试了这个特征,回测效果不错"。
1.1 期货特征工程的四个层次:从微观到宏观的完整拼图
我把期货特征工程分为四个层次,从下到上依次是:微观结构层、技术指标层、统计特征层、跨市场层。这四个层次不是孤立的,而是相互补充的。一个健壮的模型,应该同时包含这四个层次的特征。
微观结构层是最底层的特征,直接来源于订单流和成交数据。在期货市场中,这个层次的特征包括:买卖价差、订单簿不平衡度、大单净流入、主动买卖比例、成交量的时间分布等等。这些特征反映的是市场参与者的即时行为,对短周期预测非常有效。但问题是,这些数据通常需要Level-2行情才能获取,而且数据量巨大,处理起来对工程能力要求很高。
技术指标层是最常见的特征来源,包括均线、MACD、RSI、布林带、ATR等等。这些指标本质上是对价格和成交量的某种变换,目的是提取出趋势、动量、超买超卖等信息。但我要提醒的是,不要盲目堆砌技术指标。很多技术指标之间高度相关,比如不同周期的均线,同时放进去只会增加模型复杂度,不会带来额外信息。我的做法是,每个类别只选一两个代表性指标,比如趋势类选一个均线斜率,动量类选一个RSI,波动率类选一个ATR。
统计特征层是我个人认为最有价值但最容易被忽视的一层。这一层包括:收益率的偏度、峰度、自相关性、 Hurst指数、熵值等等。这些特征反映的是价格序列的统计性质,而不是价格本身。举个例子,同样是上涨,一个平稳的上涨和一个剧烈震荡的上涨,对未来的预测意义是完全不同的。统计特征能够捕捉到这种差异。
跨市场层是最高层的特征,包括:相关品种的价差、内外盘价差、期限结构、基差、仓单变化等等。期货市场不是孤立的,螺纹钢和铁矿石、豆油和棕榈油、股指和国债之间都存在联动关系。这些跨市场特征往往能提供单一品种数据中看不到的信息。
下面这张表总结了我常用的特征分类和具体示例:
| 特征层次 | 特征类别 | 具体示例 | 适用周期 |
|---|---|---|---|
| 微观结构 | 订单流 | 买卖价差、订单不平衡 | 分钟级 |
| 微观结构 | 成交行为 | 大单净流入、主动买卖比 | 分钟级 |
| 技术指标 | 趋势 | 均线斜率、ADX | 小时级 |
| 技术指标 | 动量 | RSI、MACD柱 | 小时级 |
| 技术指标 | 波动率 | ATR、布林带宽度 | 小时级 |
| 统计特征 | 分布 | 偏度、峰度 | 日级 |
| 统计特征 | 记忆性 | 自相关、Hurst指数 | 日级 |
| 统计特征 | 复杂性 | 熵值、分形维数 | 日级 |
| 跨市场 | 价差 | 品种间价差、基差 | 日级 |
| 跨市场 | 结构 | 期限结构、仓单变化 | 日级 |
1.2 特征构造的实操细节:以波动率特征为例
光说理论没用,我拿波动率特征来具体演示一下怎么构造。波动率是期货交易中最重要的特征之一,因为它直接关系到风险和仓位管理。但原始的波动率计算有很多种方法,每种方法适用的场景不同。
最简单的是历史波动率,就是过去N天收益率的标准差。但这个指标有个问题:它对所有历史数据一视同仁,但实际上近期的波动对未来的影响更大。所以我会用指数加权移动平均(EWMA)来计算波动率,给近期数据更高的权重。具体公式是:σ_t^2 = λ * σ_{t-1}^2 + (1-λ) * r_{t-1}^2,其中λ通常取0.94。
但EWMA波动率还是不够,因为它假设波动率是平滑变化的。实际上,期货市场的波动率经常出现跳跃,比如突然的政策发布、库存数据公布等。所以我还会构造一个"波动率突变"特征,就是当前波动率与过去一段时间波动率均值的比值。当这个比值超过某个阈值时,说明市场进入了高波动状态。
更进一步,我会计算已实现波动率和隐含波动率的差值。已实现波动率是从历史价格算出来的,隐含波动率是从期权价格反推出来的。两者的差值反映了市场对未来波动的预期与历史实际波动的偏离程度。当隐含波动率显著高于已实现波动率时,说明市场预期未来波动会加大,这往往是一个风险信号。
这些特征构造的细节,决定了你的模型是"能用"还是"好用"。我见过太多人,特征工程做得非常粗糙,然后抱怨AI交易不靠谱。其实不是AI不靠谱,是特征不靠谱。
2. 模型选型:为什么LSTM不是期货预测的万能药
说到期货AI交易,很多人第一反应就是用LSTM,因为LSTM擅长处理时间序列。但我必须说,LSTM在期货预测中的表现,往往没有大家想象的那么好。原因有几个:第一,LSTM参数量大,在期货这种低信噪比数据上极易过拟合。第二,LSTM的训练需要大量数据,但期货的有效历史数据其实很有限。第三,LSTM对特征的质量要求极高,如果输入特征本身噪声很大,LSTM学到的也是噪声。
那用什么模型?我的经验是,不要迷信单一模型,而是要根据预测目标和数据特性来选。对于短周期预测(分钟级到小时级),树模型(XGBoost、LightGBM)往往比深度学习模型更稳定,因为树模型对噪声的鲁棒性更强,而且特征重要性可解释。对于中长周期预测(日级到周级),可以尝试一些简单的线性模型加上精心构造的特征,效果可能比复杂的深度学习模型更好。
2.1 树模型在期货预测中的实战配置
我以LightGBM为例,讲一下具体的配置。首先,目标函数的选择很关键。如果是预测涨跌方向,用二分类的logloss;如果是预测收益率大小,用回归的MSE或Huber损失。Huber损失对异常值更鲁棒,我通常优先选它。
关键参数方面,num_leaves不要设太大,期货数据噪声大,叶子节点太多容易过拟合,我一般设在15到31之间。learning_rate设小一点,0.01到0.05,配合较多的迭代次数。feature_fraction和bagging_fraction都设0.7到0.8,增加随机性来防止过拟合。min_data_in_leaf设大一点,至少100,确保每个叶子节点有足够的样本。
还有一个非常重要的参数是early_stopping_rounds。期货数据的非平稳性意味着模型很容易在验证集上过拟合,所以必须用早停。我通常把验证集设为时间序列的最后20%,如果验证集损失在50轮内没有改善,就停止训练。
但光调参还不够,特征工程和标签构造同样重要。标签构造方面,我不用简单的"第二天涨跌",而是用"未来N天的风险调整后收益"。具体来说,标签 = 未来N天收益率 / 未来N天波动率。这样构造的标签,既考虑了收益方向,也考虑了收益的稳定性。
2.2 深度学习模型在期货场景下的正确打开方式
如果你确实想用深度学习,我的建议是不要直接用原始价格序列,而是用已经构造好的特征向量作为输入。也就是说,把特征工程做在前面,深度学习模型只负责学习特征到标签的映射关系。这样做的好处是,你可以把领域知识注入到特征中,减轻模型的学习负担。
网络结构方面,不要用太深的网络。期货数据有效样本量有限,深层网络很容易过拟合。我通常用2到3层的全连接网络,或者1到2层的LSTM。激活函数用ReLU或GELU,输出层根据任务选择sigmoid(二分类)或线性(回归)。
正则化方面,Dropout是必须的,比率设在0.2到0.5之间。Batch Normalization也有帮助,可以加速训练并提高稳定性。还有一个技巧是权重衰减,L2正则化系数设在1e-4到1e-3之间。
训练策略上,我强烈建议用集成学习。训练多个不同初始化、不同超参数的模型,然后对它们的预测结果取平均。这样做的原因是,单个模型在期货数据上的方差很大,集成可以显著降低方差,提高预测稳定性。
3. 风控架构:AI交易系统的"刹车"和"安全气囊"
我见过太多人,模型做得很好,回测曲线很漂亮,但实盘一跑就亏钱。问题往往不在模型,而在风控。风控不是简单地设一个止损线就完事了,它是一个多层次的、动态的、与模型预测联动的完整体系。
3.1 仓位管理:凯利公式在期货中的修正应用
仓位管理是风控的第一道防线。很多人用固定比例仓位,比如每次用10%的资金。但更好的做法是根据模型的预测置信度和市场波动率来动态调整仓位。
凯利公式是一个经典的工具:f = (bp - q) / b,其中f是仓位比例,b是赔率,p是胜率,q是败率。但直接用凯利公式在期货上有问题,因为期货的赔率和胜率都是估计值,而且期货有杠杆,凯利公式算出来的仓位可能过大。
我的做法是用"半凯利"甚至"四分之一凯利",也就是把凯利公式算出来的仓位乘以0.5或0.25。同时,我会根据波动率进一步调整:仓位 = 基础仓位 * (目标波动率 / 当前波动率)。这样做的逻辑是,当市场波动加大时,自动降低仓位,控制风险暴露。
还有一个重要的原则是"总仓位上限"。不管模型多么自信,单个品种的仓位不超过总资金的20%,所有品种的总仓位不超过总资金的60%。这是为了防止极端行情下的连锁反应。
3.2 止损体系:从固定止损到动态止损的进化
止损是风控的第二道防线。固定止损,比如亏损2%就平仓,简单但不够灵活。更好的做法是动态止损,根据市场波动率来调整止损幅度。
我常用的方法是ATR止损:止损距离 = k * ATR,其中k通常取2到3。这样做的逻辑是,当市场波动大时,止损距离自动放宽,避免被正常波动扫出去;当市场波动小时,止损距离收紧,控制单笔亏损。
但ATR止损也有问题,它只考虑了波动率,没有考虑模型的预测。所以我会结合模型预测来调整:如果模型预测方向与持仓方向一致且置信度高,可以适当放宽止损;如果模型预测方向反转,则收紧止损甚至主动平仓。
还有一个高级技巧是"时间止损"。如果一笔交易在N天内没有达到预期收益,即使没有触发价格止损,也主动平仓。这样做的逻辑是,期货市场的时间价值很重要,资金被占用在没有表现的仓位上,机会成本很高。
3.3 回撤控制:从单笔止损到组合层面的风险预算
单笔止损控制的是单次交易的风险,但组合层面的回撤控制同样重要。我见过很多人,单笔止损做得很好,但连续亏损几次后,总资金回撤还是很大。
我的做法是设置"回撤阈值":当总资金从最高点回撤超过某个比例(比如10%)时,强制降低仓位;回撤超过15%时,暂停交易,重新评估模型和市场状态。这样做的逻辑是,连续回撤往往意味着市场状态发生了变化,模型可能暂时失效,这时候最好的策略是观望而不是硬扛。
另外,我会用"风险预算"的方法来分配不同品种的仓位。具体来说,先确定总的风险预算(比如总资金的2%),然后根据每个品种的波动率和相关性来分配。相关性高的品种,分配的风险预算要降低,因为它们可能同时亏损。
4. 从回测到实盘:那些只有踩过坑才知道的事
回测和实盘之间的差距,是期货AI交易中最难跨越的鸿沟。我见过太多回测年化50%的策略,实盘跑出来年化-20%。问题出在哪里?出在回测中的一些"隐性假设"在实盘中不成立。
4.1 回测中的五个致命陷阱
第一个陷阱是"未来函数"。这是最常见的错误,比如用当天的收盘价计算指标,然后用这个指标预测当天的涨跌。实盘中你不可能在收盘前知道收盘价。避免方法是,所有特征的计算只能使用当前时刻之前的数据。
第二个陷阱是"幸存者偏差"。如果你只回测当前还在交易的品种,那些已经退市的品种就被忽略了。但那些退市的品种,往往是因为表现不好才退市的。避免方法是,回测时要包含所有历史上有交易的品种,包括已经退市的。
第三个陷阱是"滑点和手续费低估"。回测中很多人用理想价格成交,但实盘中买卖价差、滑点、手续费都会侵蚀收益。我的做法是,在回测中至少扣除双边万分之五的成本,对于流动性差的品种,还要额外扣除滑点。
第四个陷阱是"过拟合"。这是最隐蔽的陷阱。当你反复调整参数、反复优化特征,直到回测曲线完美时,你很可能已经过拟合了。避免方法是,留出一段"样本外"数据,在模型完全确定之前,绝对不看这段数据。
第五个陷阱是"市场状态变化"。回测期间的市场状态,可能与实盘期间完全不同。比如回测期间是趋势市,实盘期间是震荡市,那么趋势策略就会失效。避免方法是,在回测中要包含不同类型的市场状态,并且要监控实盘中的市场状态是否与回测一致。
4.2 实盘监控:你需要盯住的五个核心指标
实盘上线后,不是就不管了。你需要持续监控一些核心指标,及时发现模型失效的迹象。
第一个指标是"预测准确率"。如果准确率持续低于回测水平,说明模型可能失效了。但要注意,准确率有随机波动,不要因为一两天的下降就恐慌。
第二个指标是"盈亏比"。如果盈亏比持续下降,说明模型可能在某些市场状态下表现不佳。
第三个指标是"最大回撤"。如果回撤超过了预设阈值,需要触发风控措施。
第四个指标是"换手率"。如果换手率异常升高,说明模型可能对噪声过度反应。
第五个指标是"特征重要性漂移"。如果某些特征的重要性突然变化,说明市场结构可能发生了变化。
4.3 模型迭代:什么时候该重新训练,什么时候该推倒重来
模型不是训练一次就一劳永逸的。市场在变化,模型也需要迭代。但迭代的频率和方式很重要。
我的做法是,定期(比如每月)用最新数据重新训练模型,但不会频繁调整模型结构。如果重新训练后,模型在验证集上的表现没有显著下降,就继续使用。如果表现显著下降,就需要深入分析原因。
如果是因为市场状态变化导致的失效,可能需要重新设计特征或调整模型结构。如果是因为数据质量问题,需要修复数据管道。如果是因为过拟合,需要简化模型或增加正则化。
但有一种情况需要推倒重来:当市场的基本逻辑发生了根本性变化。比如某个品种的定价机制变了,或者出现了新的参与者结构。这时候,基于旧逻辑构造的特征可能完全失效,需要重新做特征工程。
5. 一个完整的期货AI交易系统架构长什么样
说了这么多,我把一个完整的期货AI交易系统架构梳理一下。这个架构不是理论上的,而是我在实际项目中反复迭代后形成的。
5.1 数据层:从行情接入到特征存储的完整链路
数据层是整个系统的基础。它需要完成以下工作:行情数据接入(包括Level-1和Level-2)、数据清洗(处理缺失值、异常值)、特征计算(实时和离线)、特征存储(供模型训练和推理使用)。
行情接入方面,我通常用消息队列来接收实时行情,确保低延迟和高吞吐。数据清洗方面,要特别注意期货合约的换月问题,不同合约的价格不能直接拼接,需要用复权价格或者价差来调整。
特征计算方面,分为离线计算和实时计算两部分。离线计算用于模型训练,可以处理大量历史数据;实时计算用于模型推理,要求低延迟。两部分计算的特征必须保持一致,否则会出现训练和推理不一致的问题。
特征存储方面,我通常用时序数据库来存储特征,方便按时间范围查询。同时,会维护一个特征版本管理系统,记录每个特征的计算逻辑和参数,确保可复现。
5.2 模型层:训练、验证、推理的工程化实践
模型层负责模型的训练、验证和推理。训练方面,需要自动化训练管道,定期用最新数据重新训练模型。验证方面,需要严格的样本外验证,包括时间序列交叉验证和滚动窗口验证。
推理方面,需要低延迟的推理服务,能够实时接收特征并输出预测。推理服务需要支持模型热更新,在不中断服务的情况下切换模型版本。
还有一个重要的工程实践是"影子模式"。新模型上线前,先让它以影子模式运行一段时间,也就是只记录预测结果但不实际交易,对比新模型和旧模型的预测差异。如果新模型表现更好,再正式切换。
5.3 执行层:从信号生成到订单管理的完整闭环
执行层负责将模型预测转化为实际交易。它包括信号生成、仓位计算、订单生成、订单执行、成交回报处理等环节。
信号生成方面,需要将模型预测转化为具体的交易信号,包括方向、开平仓、数量等。仓位计算方面,需要根据风控规则计算每个品种的目标仓位。订单生成方面,需要根据目标仓位和当前仓位计算需要交易的量。
订单执行方面,需要考虑执行算法,比如TWAP、VWAP等,以减少市场冲击。成交回报处理方面,需要实时更新仓位和盈亏,并触发相应的风控检查。
整个执行层需要与风控层紧密配合,任何交易指令在发送前都要经过风控检查,确保不会超出风险限额。
5.4 风控层:贯穿始终的独立监控体系
风控层是独立于模型层和执行层的,它需要实时监控整个系统的风险状态,并在必要时干预。
风控层包括:事前风控(交易前的风险检查)、事中风控(交易中的实时监控)、事后风控(交易后的风险分析)。
事前风控检查每笔交易是否符合风险限额,包括单品种仓位限额、总仓位限额、单笔亏损限额等。事中风控实时监控市场波动和账户盈亏,在触发阈值时自动降低仓位或暂停交易。事后风控分析历史交易的风险指标,为模型迭代和风控参数调整提供依据。
风控层还需要有"熔断机制"。当市场出现极端行情,或者系统出现异常时,能够自动暂停交易,保护资金安全。
6. 写在最后:一些个人体会
做期货AI交易这些年,我最大的体会是:AI不是魔法,它只是一个工具。这个工具能不能用好,取决于你对市场的理解、对数据的理解、对风险的理解。
我见过很多人,把AI交易当成"圣杯",以为找到一个好模型就能躺着赚钱。但现实是,市场在不断进化,任何模型都会失效。真正能长期存活的,不是某个特定的模型,而是一套完整的、能够持续迭代的体系。
这套体系包括:对市场逻辑的深刻理解、严谨的特征工程、稳健的模型选型、完善的风控架构、以及持续监控和迭代的工程能力。缺了任何一环,系统都可能在某个时刻崩溃。
还有一个体会是:不要追求"完美"的策略。回测中看起来完美的策略,实盘中往往表现很差,因为它很可能过拟合了。相反,那些回测中看起来"还行"但逻辑清晰的策略,实盘中往往更稳定。
最后,我想说的是:期货AI交易是一场马拉松,不是短跑。不要因为短期的亏损就放弃,也不要因为短期的盈利就膨胀。保持敬畏,持续学习,控制风险,这才是长期生存之道。