AI助手多样化研究分享——以成交量线性单因子研究为例
  XPQuant 16天前 80 0

一 成交量单因子分析

第一周完成了期货策略回测。这周尝试用AI助手完成单因子分析。我自己是个小白,走了一遍,也希望能够教会小白。接下来我会详细介绍整个流程。先选个模板吧。以官网模板为例。选择因子大赛-单因子模版。删除因子大赛模块后,包含4个模块。
ScreenShot_20260301_131031_428.png

1.1 模块1:以成交量为单因子的python代码输入

class MomentumFactor(Factor): def calculate(self, factors): volume = factors['volume'] mean_volume = SUM(volume, 63)/63 fac = volume / mean_volume -1 return fac

AI的解释

逐行解释: 1)class MomentumFactor(Factor): 定义了一个名为 MomentumFactor 的因子类 这个类继承自 Factor,说明它是一个“因子”,用于在整个股票池上、逐日地计算数值 2)def calculate(self, factors): 所有因子类都必须实现 calculate 方法 factors 是一个“基础因子字典”,里面有各种基础数据:'close'、'open'、'volume' 等 你的因子逻辑都写在这个函数里 3)volume = factors['volume'] 取出所有股票、所有交易日的成交量序列 结果是一个以 (symbol, date) 为索引的时间序列矩阵 4)mean_volume = SUM(volume, 63)/63 SUM(volume, 63) 表示:对每只股票,在“过去 63 个交易日”上的成交量求和(滚动窗口) 再除以 63,相当于计算过去 63 日的平均成交量 换成更熟悉的形式就是: mean_volume_t = (V_t + V_{t-1} + ... + V_{t-62}) / 63 这里 63 个交易日大约是 3 个月的交易日数,因此这是一个“近 3 个月平均成交量” 5)fac = volume / mean_volume - 1 对当前成交量和过去 63 日平均成交量做一个比值,再减 1: fac_t = V_t / mean_V_63_t - 1 经济含义: fac > 0:当前成交量高于过去 3 个月的平均水平(放量) fac < 0:当前成交量低于过去 3 个月的平均水平(缩量) 这其实是一个“成交量放大倍数减 1”的度量,可以理解成“相对成交量动量/活跃度因子” 6)return fac 返回这个因子的数值序列 这个序列会用于回测、选股、排序等 概括一下: 你写的是一个“成交量相对过去三个月平均水平的偏离度”因子 它不是价格动量,而是“量的动量/活跃度”

最后一句“它不是价格动量,而是“量的动量/活跃度”。表明代码助手发现了自己生成代码命名的不够精确。由此联想到不白老师和濮老师提到的通过AI自我的交互来实现代码的进步迭代是一个很好的工作流。我们要做的就是做好问题定义,控制好逻辑链路即可。

1.2 模块2:综合因子构建节点

有以下几个变量

  • 开始时间:20240601
  • 结束时间:20250101
  • 因子类型:股票
  • 编码方式:Python

1.3 模块3:因子分析

  • 调仓周期:1
  • 分组数量:5
  • 因子方向:0(表示负向)
  • 股票池:沪深全A

1.4 模块4:因子分析结果

启动工作流后我们看因子分析结果,并AI评价分析结果
image.png

整体来看,这个“成交量”单因子质量处于中等偏上的 B 级,方向为“低因子值更优”(IC 为负),具有一定选股能力,但稳健性和解释力还不算顶级。 从截面相关看,IC_mean 约 -0.0365、Rank_IC 约 -0.054,|Rank_IC| 已经超过 0.05 的优秀门槛,而 IC 均值略低于强因子常见的 0.04~0.06 区间,说明方向判断较清晰,但单期预测强度一般;IC_std 约 0.088、IC_IR 约 -0.41,波动不算小,持久性中等,属于“有用但不稳定”的那一档。IC 分布上,IC<- -0.02 的概率约 58%,IC>0.02 只约 23%,进一步确认“因子方向为负向”且负向期占明显优势。 分组回测方面,多空组表现亮眼:例如“多空组合1”年化超额收益接近 30%,最大回撤只有 3% 左右,夏普接近 5、信息比率也在 5 附近,属于非常优秀的超额—回撤配比;说明在极端多空对冲框架下,因子区分度相当强,且风险控制良好。普通多空组合2 年化超额约 10%、最大回撤约 1.6%、夏普在 1.5~2 之间,也反映出分组间收益是明显单调递增的。 优点方面:一是方向清晰、单调性好,多空价差大、超额收益曲线质量高;二是多空组合的回撤极低,回撤控制远好于常见风格因子;三是信息比率、夏普比在部分组合上处于机构可直接使用的水准。缺点在于:IC 均值和 IC_IR 偏低,说明日/期截面预测噪声较大,需要靠分组拉长持有期或多因子组合来平滑;其次,过高的换手率(接近 100%)意味着交易成本敏感,对真实落地有一定挑战;另外,样本期特定(2024-06 至 2025-01),在其他市场阶段的稳健性尚待验证。 实务建议:1)在实盘或更真实回测中显式计入手续费与冲击成本,看看高换手对夏普和超额的侵蚀;2)可以适当拉长调仓周期(例如从日度/周度改为更低频),观察 IC 衰减曲线,寻找最合适的持有期;3)将该因子作为“成交量风格”因子,与价值、质量、动量等其他因子做正交/多因子组合,降低单因子噪声;4)重点关注多空组之间收益差的稳定性,如在不同行情子样本中分别检验,以确认不是阶段性因子;5)若希望进一步提升单调性,可尝试对极值做更精细的去极值与标准化,或者分行业中性后再分组。

不得不说这个AI分析真的很强。我自己都学到很多。不过多废话,我自己写几点小小的感悟,抛砖引玉。
由于我们设置因子方向为负,意味着策略逻辑是“反向操作”,即选取截面上fac最低的组合买入,即组1。而fac最高组,即组5不买入(A股无做空机制,不买入也是一种做空)。
这与我日常交易观察很贴合,其内在逻辑在于成交量急剧放大的股票(过度拥挤)未来会下跌,而缩量的股票未来会反弹。特别是前期大涨过的票某天放出天量,这时候一般都是短期高点。此外还有几点细节:

  1. 组合1-4收益曲线贴合紧密,而组合5与它们拉开显著差距,暗示这个因子值为正时具有较强的负向指标作用。实践中,可以将这个组合5的股票剔除潜在买入池。
  2. |Rank_IC| 已经超过 0.05 的优秀门槛,其设置作用在于屏蔽个别股票的异常值,而将原来IC计算公式中的fac的离均差,收益率的离均差转化为排序来计算。
  3. 我的疑问点:根据python代码如果fac是此处的因子值,为何2024-12-31的多只股票因子值全部相同,不知道是怎么计算的?

总结

👍pandaAI将主观交易的感觉性的东西直观的量化了出来是极好的。后续继续补充。抛砖引玉,欢迎大家一起讨论。👍

最后一次编辑于 16天前 1

暂无评论

推荐阅读
  tyler   24小时前   16   0   0 新手入门