期货日线策略:我在 PandaAI 上构建期货回测工作流的一次尝试–趋势主导型复合因子
因为要进行这个期货工作流链接实盘仿真验证,临时研究了一下期货因子,所以临时开始梳理一下期货因子的研究和回测路径。
之前我是做股票回测的,为什么这套思路直接搬到期货上不太够,以及我这次在 PandaAI 上是怎么先搭一版基础期货回测工作流的。
一、我以前做股票回测,更多是“规则型因子”思路
之前做股票回测时,我比较常见的做法是:
- 把通达信里的选股条件拆出来
- 转成 0/1 因子,或者简单线性因子
- 再做一些加权组合,观察收益、回撤、胜率、分组表现等
这种方式其实很适合快速验证想法。
因为很多股票逻辑本身就带有明显的事件筛选、形态筛选、趋势筛选色彩,比如:
- 均线多头排列
- 放量突破
- 涨停回踩
- 连板结构
- 某种固定技术形态满足与否
这类条件改成回测表达式以后,上手非常快,也能迅速形成自己的因子库。
但这套思路有一个问题:本质上它更像“规则特征”,而不是严格意义上的连续型量化因子。
很多特征要么是 0/1,要么是简单线性组合,更多是“满足条件就选”,而不是“给每个标的连续评分”。
在股票里,这种方式是能用的。
但当我开始想把工作流切到期货上,并且进一步往仿真和实盘验证靠时,就明显感觉到:期货的研究范式和股票还是不太一样。
二、为什么切到期货以后,原来的思路不太够了
我这次做期货策略,不是单纯为了看一个回测曲线,而是想把整个流程打通:
因子构建 → 因子分析 → 策略组合 → 回测验证 → 仿真连接
会遇到几个问题:
1. 期货更偏时序结构,而不是单纯截面筛选
股票里很多时候是在做“今天哪些票更强”。
而期货里很多 alpha 更藏在时间序列结构里,比如:
- 一段时间内是否持续趋势
- 波动是否突然放大
- 量价关系是否确认
- 不同期限、不同品种之间是否存在相对偏离
2. 期货更强调风险归一化
同样都是涨 3%,不同品种的含义差异可能很大。
有些品种本身就是高波动,有些则偏稳定。
所以期货里经常不能只看“涨了多少”,还要看:
- 这段上涨是不是在正常波动范围内
- 这段趋势是否足够平滑
- 这个信号是否值得分配相同风险预算
3. 期货因子的经济含义通常更强
股票里有很多形态型、博弈型因子。
期货里除了趋势和量价,还经常会落到更有“结构意义”的东西上,例如:
- 期限结构
- 基差与 carry
- 波动率状态
- 持仓变化
- 跨品种价差
- 产业链传导关系
也就是说,期货不是不能做简单因子,而是它天然更适合往“连续评分 + 风险缩放 + 结构信号”的方向走。
三、我临时补课后,对期货因子的一个简化理解
这次为了先搭工作流,我没有一开始就追特别复杂的研究,而是先把期货因子大致拆成几个基本维度,帮助自己建立框架。
1)趋势 / 动量维度
这是最容易上手的一类。
核心问题是:这个品种过去一段时间是否存在可延续的方向性。
常见思路:
- 过去 20 日、60 日、120 日收益
- 均线偏离
- 连续上涨/下跌强度
- 趋势斜率
如果进一步严谨一点,就会从“裸动量”升级到风险调整动量。
2)波动率 / 风险状态维度
不是所有上涨都一样。
有些上涨是平滑推进,有些上涨是高波动乱跳。
所以可以用波动率来衡量:
- 近期市场是否进入放大波动阶段
- 当前趋势质量是否足够高
- 是否需要压缩仓位或降低信号置信度
这也是我这次第一版策略里重点引入的部分。
3)成交量 / 活跃度维度
单纯价格上涨,可能并不可靠。
如果量能也在同步放大,通常意味着这个方向有更多资金参与,趋势更“被确认”。
常见角度包括:
- 成交量相对过去均量是否放大
- 放量上涨是否比缩量上涨更可信
- 某些品种的阶段性活跃切换
4)持仓变化维度
这一块是我后面想继续做的。
期货和股票很不一样的一点是,期货里“持仓”本身就是非常重要的行为变量。
比如:
- 价格上涨同时持仓增加,可能意味着趋势强化
- 价格上涨但持仓下降,可能更多是空头回补
- 某些阶段的持仓集中度变化,本身就可能有信息量
这部分我这次还没放进第一版,只是留作下一步升级方向。
5)期限结构 / 跨品种结构维度
这是期货最有特色的部分,也是后面更“研究员化”的部分。
例如:
- 近远月结构
- 基差与升贴水
- 跨期斜率
- 产业链相关品种之间的价差关系
但这块同时也更复杂,因为会涉及:
- 合约映射
- 主力连续口径
- 换月处理
- 不同合约间的可比性
所以我这次没有上来就做这一层,而是先把最基础的工作流跑通。
四、这次我的原则:先不要追求“复杂研究”,先跑通流程
我这次在 PandaAI 上做第一版期货策略,目标并不是立刻挖出一个很高级的 alpha。
更重要的是先验证下面这条链路是否顺畅:
因子想法 → 因子表达 → 因子分析 → 回测结果 → 后续可继续迭代
五、我这次实现的第一版策略:风险调整动量 + 量能确认 + 短期过热惩罚
最后我给自己定的第一版尝试,是一个比较适合日线回测工作流的合成因子。
它大致由三部分组成:
1)风险调整动量
过去 20 天涨得好,同时不是靠纯高波动乱跳涨上去的。
2)量能确认
上涨最好伴随量能活跃,这样趋势更可信。
3)短期过热惩罚
如果最近 5 天冲得太急,就稍微扣一点分,避免纯追高。
构建过程
最后,基于和AI的交流,构建了一个以风险调整中期动量为核心、叠加量能确认和日内收盘强度、再用短期过热惩罚与双均线状态过滤进行稳健化的期货日线趋势截面因子。
AI助手生成的工作流
工作流第一轮设计还是有点问题,回测的部分,重新生成:
进一步查看代码验证策略的正确性
简单修改了一下
进行运行验证
因子分析验证
其实我也不是很懂这个因子
问下AI:
这个因子已经表现出比较明显的分组单调性:
分组1到分组5基本是递增的
多空组合拉得比较开
IC 和 Rank_IC 也不低
单调性接近 0.95
这说明它不是那种“回测偶然跑出来的杂乱信号”,而是确实有一个比较清楚的排序能力。
看下策略回测结果
来问一下外部Ai对我的因子解释:
这个因子本质上是一个日线截面选强的中短周期趋势因子,风格上属于:
趋势跟随为主,量价确认增强,短期过热抑制,双均线做状态过滤。
我把它拆成 5 层来理解。
- 核心主线:找“涨得稳、涨得真”的品种
你最核心的信号其实是这一项:
也就是 20 日动量 / 20 日波动率。
这不是简单找“20 天涨得最多”的品种,而是在找:
过去 20 天有明显上涨
同时这段上涨不是特别乱、不是高噪声抖出来的。所以它本质上是一个风险调整后的趋势强度因子。
这是整个因子的“主心骨”。
- 第二层:用量能确认趋势,不要无量空涨
你又加了:
这层的含义很直白:
如果一个品种趋势在走强,同时量能也比过去一段时间更活跃
那么这个趋势更可能是“被资金参与确认”的,而不是虚的。所以这个因子不是单纯趋势,而是带有一点趋势确认的味道。
- 第三层:看日内收盘质量,避免只看收盘涨跌
你加的 close_strength:
这个很好理解,就是看:
收盘是不是更靠近日内高点,还是冲高回落,收在中下部
如果收盘更接近最高点,说明当天多头控制力更强。
所以这层其实是在补一个日内博弈强弱维度。
也就是说,你这个因子不只是看“最近涨没涨”,还看“今天收得强不强”。
- 第四层:短期过热惩罚,避免追太急
rev5 虽然名字叫反转项,但你这里本质是拿它当一个短期过热惩罚:
意思就是:中期趋势好可以加分。但最近 5 天如果已经冲太猛,就稍微扣点分
这会让因子更偏向:中期趋势正在形成或延续,不是去追局部最极端的加速段所以它其实在做一个**“顺势但不盲目追高”**的平衡。
- 第五层:双均线过滤,把逆势环境打折
这一层是你这个版本里很重要的“策略化处理”。
你没有只做因子打分,而是又加了一层:
ma20 > ma60
close > ma20
满足时 trend_coef = 1.0
不满足时 trend_coef = 0.5
这一步不是直接把逆势信号清零,而是打五折。
这个设计很实用,因为它比硬开关更柔和,能减少来回翻转、降低换手。
所以从研究角度看,这层不是在创造 alpha,而是在做:
状态过滤 + 信号稳健化 + 降低交易抖动
这个因子比较适合:
商品或期货品种之间存在明显强弱分化
有中短期趋势延续
量价结构比较清楚的阶段
它不太占优的环境通常是:
高频切换、来回打脸的震荡市
趋势很弱但日内噪声很大的阶段
量能信号失真的特殊阶段。
好 保存工作流~
链接实盘验证
创建账号和实盘连接
最后再去换了个时间回测了一下因子以及策略回测
感觉肯定存在什么问题,不可能这样完美,后面有空再研究吧