AI助手—将传统主观交易的部分条件进行因子化和回测的思考和过程(股票)
  了不起的阿斗 2026年02月14日 566 7

AI助手—将传统主观交易的部分条件进行因子化和回测的过程(股票)

作者:了不起的阿斗
本文记录从主观条件选股→量化因子思维转变的完整过程,包括对平台AI助手使用的心得,以及第一个因子分析实验与股票回测的结果与反思。


一、背景:一个主观交易选手为什么想试试量化

我本人做A股短线交易很久,主要方向是主观交易的题材热点驱动的主升这类。

交易体系其实早就有一套自己的,其中有一个复盘环节就是,每天盘后扫一遍全市场,先用若干自己整理的条件选股条件把几千只股票压缩到几十只候选,然后结合市场和一些额外条件,手动计划定下次日的操作(这里不展开具体)。

胜率还算可以,但是这个过程是否有统计意义,自己其实说不清楚。

早之前,我在JoinQuant上尝试过把这些条件用代码实现,做程序化回测。写的东西本质上就是:

IF 条件A AND 条件B AND 条件C → 买入
IF 持有N天 OR 跌破某位置 → 卖出

其实就是基于程序化规则的选股。跑出来的净值曲线有时候挺好看,但更大的问题是,比如我加了10个条件,到底哪几个是真正在起作用的,哪几个纯属噪声,甚至是在帮倒忙——完全不知道。

后来偶然接触到PandaAI这个平台,看到它有一套完整的因子分析框架,可以对每一个单独的选股条件做统计检验——而且有AI助手辅助搭建工作流、生成代码。这让我觉得也许可以用一种更系统的方式,回答那个一直悬着的问题:我用来筛股票的那些条件,到底有没有真实的预测价值?

不过在动手之前,我意识到自己对"量化"这件事的理解其实停留在很浅的层面。曾经我以为量化就是"把选股条件写成代码自动执行",但和平台AI助手深入交流之后才发现,这两件事之间有一道真正的思维鸿沟需要跨越。

二、理解量化因子:思维上经历的几次转变

第一次转变:从"时间轴"到"横截面"

一开始我完全不理解"横截面"是什么意思。听到"截面因子"这个词,脑子里是空白的。

后来用一个具体的画面才理解:

我以前的思路,是沿着时间轴看某些股票——这只股票今天该不该买、什么情况后该不该卖,视线是纵向的,盯着一只股票的历史走势。

因子量化的思路,是在某一天的横截面上扫描全市场——今天这个时刻,给全市场5000多只股票每人算一个分数,然后按分数排队,视线是横向的,一次性扫描所有股票的相对强弱。

这个视角的转变让我想明白了一件事:我每天盘后扫股、筛候选的动作,其实本质上就是在做横截面分析——我只是没意识到这一点。我在某一天的截面上,对全市场股票做筛选和排序,只不过我的"排序方式"是粗糙的0/1:满足条件的进池,不满足的直接忽略。

第二次转变:条件选股是粗粒度的因子

这个领悟来得比较自然,但让我觉得很爽。

既然因子本质上是给每只股票打一个分数,然后排序——那我原来的"满足所有条件才买",其实就是一个特殊的因子:满足 = 因子值1,不满足 = 因子值0。所有1的排在前面,所有0的排在后面。

区别只是精度太粗。原来的0/1因子丢掉了大量信息,例如"8日涨幅28%刚过门槛"和"8日涨幅45%强势飙升",在我的条件里都是同样的1,但它们代表的强度完全不同。

把条件变成连续数值,就是在把这个信息找回来:

原来:8日涨幅 > 27% → 是/否
现在:8日涨幅 / 27%  → 1.04 or 1.67,强度差距被保留

这个认知让我对"因子化"这件事不再陌生——它不是什么神秘的新东西,就是把我原来已经在做的事情,做得更精细、更可测量。

第三次转变:IC/IR不是抽象数学,是"对答案"

一开始看IC的定义(Spearman相关系数、横截面相关性……)完全懵,感觉像在看考研数学。

后来换了一个理解方式:IC就是"对答案"的过程。

你今天按因子给5000只股票排了序,预测排名靠前的下周涨得多。下周收盘后,你把你的排名和真实涨幅的排名对比——吻合程度就是这期的IC。IC = 1代表你完全猜对了,IC = 0代表你的排名和真实结果毫无关系,相当于瞎猜。

实际上IC能到0.03-0.05就算有价值了——不需要每次都猜对,只需要长期平均来看,你排名靠前的比排名靠后的多涨那么一点点,用几百只股票分散风险,长期就能积累出超额收益。

IR的理解也类似——它回答的是"这个IC稳不稳"的问题。一个因子平均IC是0.04但每期波动很大(时而0.15时而-0.12),和另一个因子平均IC也是0.04但每期都稳定在0.03-0.05,哪个更好用?显然是稳定的那个——因为不稳定意味着某个月可能给你带来大亏损,你不敢持续重仓押注。

第四次转变:因子反向,不一定是坏事,是信息

第一轮测试完,看到IC_mean是负数、分组收益从组1到组5单调递减,当时感觉是我的因子其实效果不大、策略没用。

后来才意识到:负向因子也是有价值的因子,只是使用方向反过来——做多低因子值的股票,或者用它来过滤掉高因子值的股票。

更有意思的是第二轮测试出现了倒U型分布——不是单调递减,而是中间组最好、两端都差。这让我想起来,我测试的主升浪因子高分的股票对应的其实是"已经涨了很多、主升浪特征非常明显"的状态,放在全市场5000只股票的截面里,这恰恰是高位股的信号,自然跑不赢中等位置的股票。

这个倒U型其实和我主观交易的直觉高度一致——我从来不去接已经涨了一大截、特征过于明显的股票,因为那往往是末升浪。因子分析只是用数据证实了这个直觉。

量化思维真正的价值,不是给你一个"对"或"错"的答案,而是帮你把模糊的直觉转化成可以测量、可以迭代的信号。

一些基本概念梳理:

因子量化的本质差异

因子量化的逻辑完全不同,核心的范式转变只有一句话:

不再问"这只股票满不满足条件",而是问"在全市场所有股票里,这只股票的排名是多少"。

"横截面"是什么意思?

横截面就是时间的一个切片——某一天,全市场5000只股票的快照。

我以前的思路是沿着时间轴看一只股票:这只股票在第1天该不该买、第3天该不该卖。

因子量化的思路是在某一天的截面上横向扫描所有股票:今天,按这个指标,谁排第一、谁排最后。

"因子值"是什么?

就是给每只股票打的一个分数。以动量因子为例——过去20天的涨幅,这只股票算出来是多少,就是它的因子值(暴露值)。所有股票都能算,然后按大小排序,买分数排在最前面的那批。

IC(Information Coefficient)——这个排名有多准?

每一期,你按因子给全市场排了顺序,预测"排名越高的股票下期涨越多"。

下期收盘后对答案:你排名第1的股票,下期真的涨了第1名吗?

IC就是衡量"你排的顺序"和"真实涨幅顺序"之间的吻合程度。

IC值 含义
IC = 1 排名和真实结果完全一致,神预测
IC = 0 排名和真实结果毫无关系,瞎猜
IC = 0.05 有一点微弱的正向预测力

实际上IC能到0.03-0.05就算有用,不需要每次都对——长期来看排名靠前的比排名靠后的平均多涨一点点,用大量股票分散后就能持续盈利。

IR(Information Ratio)——这个IC稳不稳?

假设因子X的IC序列:0.08, -0.06, 0.12, 0.09, -0.07… 均值0.045,但波动极大。

因子Y的IC序列:0.04, 0.05, 0.03, 0.06, 0.04… 均值0.045,非常稳定。

两个因子均值一样,显然选Y——每个月都稳定贡献一点正收益,而X时好时坏,某个月可能给你带来大亏损。

IR = 平均IC / IC的波动性,衡量的就是这种稳定性。IR越高,说明因子信号可靠、可以持续押注。


四、从条件选股到因子——转化过程

原始的条件

这里简单展示了我之前个人交易中作为初选股池的一个条件选股。
每个条件的经济含义:

条件 描述的现象
8日涨幅>25% 强势上涨,排除弱势股
均价贴5日线 股价在5日线上方运行,不破线
最高价触5日线 5日线是支撑而非压力
最高价触10日线 10日线也是强支撑
7日内有涨停 有主力资金参与的强度确认

这五个条件组合在一起,描述的是趋势强度 + 均线支撑结构 + 主力参与度的复合形态。

当然这只是曾经我最基础做股池初筛的一个方式,并非交易策略!

因子化的核心思路

每个"是/否判断"变成"程度数值":

原条件 转化后的因子
8日涨幅>25%(是/否) 实际涨幅/0.25,过了门槛得1分,越超越高,上限2
均价贴5日线≥7/8天 8天内均价在5MA上方的比例(0~1连续值)
触5日线≥6/7天 与上合并,计算"均线贴合综合强度"
触10日线(是/否) 扩展为三均线多头排列打分(0/1/2/3)
7日内有涨停(是/否) 7日内涨停次数,打分上限3

在PandaAI上搭建工作流

平台的可视化工作流节点非常清晰,搭建流程如下:

Python代码输入节点
        ↓
线性因子构建节点(编码方式选Python,设置时间区间和股票池)
        ↓
因子权重调整节点(归一化,权重设1.000)
        ↓
因子分析节点(设置调仓周期、分组数量、股票池)

使用AI助手的过程:

平台的AI助手在这里帮了大忙。我把原来的条件公式和转化思路贴给AI助手,它直接帮我生成了可以在平台上运行的Python代码,并且自动处理了几个关键问题:

  1. 涨停阈值的板块差异:主板10%、创业板/科创20%、北交所30%,AI助手自动用股票代码前缀做了区分
  2. CLIP函数的平台适配:平台不支持CLIP,AI助手改成了MIN(MAX(...))的形式
  3. 前视偏差检查:确认所有计算只用历史数据

首先,是创建一个空白工作流,然后使用AI助手创建一个基本的框架
CleanShot 20260214 at 01.59.262x.jpg
然后我将我的策略因子化后让AI助手写入,并进行修改。针对单独的python代码节点,亦可以点开节点进行代码修改,这是封装好的,节点有属于节点的自己的AI助手可以进行修改,并且在后续运行时报错的时候可以让节点的AI助手检查错误并提供修改~

例如我对python代码这个因子节点进行细化
CleanShot 20260214 at 02.04.412x.jpg

运行的时候,当出现报错,可以在左边日志上看到错误节点,右边AI修复报错,可以调用这个节点的AI进行检查
CleanShot 20260214 at 02.05.392x.jpg

最终运行完成
CleanShot 20260214 at 02.07.122x.jpg

五、测试的结果与分析

先看因子分析部分:

CleanShot 20260214 at 02.09.062x.jpg

结果:

指标 结果
IC_mean -0.0178
Rank_IC -0.0472
IC_IR -0.1895
IR -1.2804

分组收益出现了一个有意思的现象——不是单调递减,而是倒U型

分组 年化收益率 超额年化
组1(最低分) 46.33% -3.52%
组2 56.23% +6.37%
组3(中间) 61.69% +11.83%
组4 53.81% +3.95%
组5(最高分) 32.76% -17.09%

结果图解读——几个图的含义

分组收益图(最核心的图)

CleanShot 20260214 at 02.09.332x.jpg

每一天按因子值把全市场分成5组,各组持仓,看累计收益曲线。

理想情况下应该是彩虹状——组5在最上面,组1在最下面,单调递增。

我的结果出现了倒U型,这不是简单的"因子反向"问题,而是有更深的含义:

  • 组1(因子极低):这些股票根本没有主升浪特征,收益平平
  • 组3(因子中等):刚刚形成主升浪形态、处于上升初中期的股票,收益最好
  • 组5(因子极高):主升浪特征过于明显,说明已经涨了很多了,处于末期,容易回调

这个倒U型和我主观交易的直觉完全吻合——我不会去接一个刚刚开始启动的股票(太早),也不会去接一个已经连涨8天、涨幅超过30%还有大量涨停的股票(太晚风险高),我找的是那个"刚好进入主升浪节奏"的股票,对应的恰好是因子分处于中等偏上区间的股票。

IC衰减图(时间维度的预测力)

这张图展示因子值对未来第N天收益的预测力随时间的衰减。

我的结果里,第1-4天出现了几根正向的IC柱,第5天之后全部是负的。

含义:主升浪因子高分的股票,买入后1-3天可能还有一点点继续上涨,5天后开始跑输市场。

这和我的实际交易逻辑高度吻合——主升浪股票本来就是短线逻辑,不是拿来做长线的,2-5天的持有期是合适的窗口。

IC分布图和IC时间序列图

IC分布图显示我的IC分布很宽散(IC_std=0.0945),中心在0附近,说明每期预测力非常不稳定。

IC时间序列的累积IC曲线向下,代表整个测试区间内这个因子累计是负贡献的。
CleanShot 20260214 at 02.09.472x.jpg


七、股票回测

直接继续运行,看AI助手默认的交易策略下的股票回测结果
CleanShot 20260214 at 02.39.252x.jpg
运行自动的AI分析
CleanShot 20260214 at 02.40.582x.jpg

经过测试,得到几个重要结论:

1. 主升浪不适合作为全市场横截面选股因子

主升浪条件高分的股票,在全市场比较中是"已经涨了很多的那批",截面预测力自然偏弱甚至反向。这不代表选股条件没用,而是它的使用场景不是在5000只股票中做排名。

2. 它的真实价值是作为"股池过滤器"而非"截面排名因子"

我在主观交易里本来也是这么用的——主升浪条件筛出的20-50只股票作为候选池,然后在这个池子里再做进一步的选择。这两件事的逻辑层次是不同的:

第一层(股池过滤):主升浪条件  → 筛出候选池(20-50只)
第二层(个股决策):情绪判断 + 位置 + 板块强度 → 最终选出2-3只

因子分析测试的是第一层,但我更真实的alpha可能在第二层。

3. 倒U型分布提示了一个改进方向

既然中间组最好,一个更合适的使用方式是:用因子作为"区间门控"而不是线性排名——设定一个合理的分数区间(比如raw_score在0.3~1.2之间),只关注在这个区间内、且因子分还在上升趋势中的股票,这才是真正对应"刚进入主升浪、还没到末期"的状态。

在结果详情页面,右上角的AI分析还可以调用AI助手直接对图标进行详细ai解读,对新人友好:
CleanShot 20260214 at 02.15.572x.jpg

**因此,我对回测的交易策略部分,让AI助手修改来了一下买卖细节,结合了一些自己个人的交易思路和策略、仓位配比。这些都可以让节点的AI助手帮忙写成代码。
CleanShot 20260214 at 02.15.342x.jpg
CleanShot 20260214 at 02.16.552x.jpg
CleanShot 20260214 at 02.17.112x.jpg
CleanShot 20260214 at 02.17.192x.jpg

最后,回测了2025年一年
因子分析:
CleanShot 20260214 at 02.44.132x.jpg
变化不大


八、关于PandaAI平台使用体验的一些感受

这是我在PandaAI上完整跑一个因子分析+回测工作流,几点体验:

可视化工作流的优势: 节点连接的方式让整个因子研究的逻辑链条非常清晰——代码输入 → 因子构建 → 权重调整 → 因子分析,每个环节一目了然,不容易出现"逻辑接错了都不知道"的情况。

AI助手的实际价值: 我把条件的公式语法直接贴给AI助手,它能理解每个函数的含义并翻译成平台支持的Python算子,省去了大量查文档的时间。尤其是涨停阈值因板块不同这类细节处理,AI助手自动帮我考虑到了。

因子分析节点的输出非常完整: 分组收益、IC时间序列、IC衰减图、IC分布图、IC自相关图一站式给全,不需要自己写可视化代码,对于快速验证因子有效性非常高效。

一个Suggestion:有一些报错代码希望可以针对性给出解决方案,尤其是常见的,内存超限、字段为空等等问题


九、下一步思考

基于这次实验的结论,继续:
情绪择时因子
我在主观交易中还有一套市场情绪判断体系(炸板率、昨日连板平均收益率、板块热度等),这类因子和主升浪因子属于完全不同的层次——它们是市场级别的择时信号,不是个股横截面因子。计划用策略回测的方式单独验证这些情绪因子的有效性,看看它们对"特定行情下出击的成功率"是否有统计意义上的提升。


本文是第一次系统性尝试量化研究的过程记录,很多认知还在持续修正中。欢迎有经验的朋友交流指正。

最后一次编辑于 2026年02月14日 3

XPQuant

顶上去+1

2026-02-26 20:17:12      回复

iacky

赞~学习学习

2026-02-25 14:30:50      回复

PandaAI-宁宁子

写得好

2026-02-24 16:32:15      回复

酒精过敏

写的太好了

2026-02-14 19:48:46      回复

18510540701

倒u形,说明中间值效果好,两头极端值效果差。 是不是可以优化因子:factor - factor平均值,作为因子,在做测试

2026-02-14 12:39:41      回复

yanglaiyang

顶上去!

2026-02-14 12:38:56      回复

PandaAI-宁宁子

写得太好了 很有启发

2026-02-14 12:34:24      回复

推荐阅读