大家好,我是正在量化路上摸索的小白。最近在用PandaAI这个个人量化工具,发现它真的挺适合我们这种不想折腾底层代码的人。今天想和大家分享一个经典的研究——市值因子,看看A股的小市值股票是不是真的像传说中那样,能在未来几天跑赢大盘股。
这篇文章完全是我个人的学习笔记,希望能帮到同样刚入门的朋友。我们不用纠结复杂的数学公式,就用PandaAI的界面和简单操作,一步步验证这个因子。
一、为什么想到研究市值因子?
刚接触量化的时候,总听前辈说“小市值效应”:市值小的公司,长期收益往往比大公司高。理由嘛,可能是小公司成长空间大,或者有壳价值等等。但到底是不是真的?我得自己动手验证一下,不能光听别人说。
于是我就给自己定了三个小目标:
因子有效性:市值小的股票,未来5天真的涨得更多吗?(用对数市值作为因子值).
稳定性:这种关系是天天都有,还是时灵时不灵?(看IC的波动).
实战策略:如果每天买入最小市值的股票,同时卖空最大市值的,能不能赚钱?(模拟多空组合).
二、为什么选PandaAI?
之前我用Python自己写代码,从数据清洗到回测,每一步都要小心翼翼,一不留神就出bug。后来发现了PandaAI这个工具,它把很多脏活累活都封装好了,我只需要关注因子和策略的逻辑。最重要的是:
内置了A股数据,不用自己到处找接口,因子计算、IC分析、回测都有现成的模块,画图也方便,结果一目了然,特别适合我这种想快速验证想法的小白。
三、研究步骤详解(PandaAI版)
在PandaAI里,获取全A股数据只需要几行指令。我在工作流中选取了“Phython代码输入”工作节点,拖到工作流画布中,在工作流种,利用节点自带的AI助手(PandaAI-CQ2)直接用自然语言告诉AI我需要做的事情:
第1步:准备数据
取了2025年全年的股票列表,排除ST股和退市股,然后获取每天的收盘价和总市值。
第2步:计算因子值——对数市值
市值因子其实就是“市值大小”。但直接用原始市值有个问题:茅台几万亿,小公司几亿,数字差太多,分析起来不方便。所以通常取自然对数,把市值压缩到一个合理的范围。比如茅台ln(20000亿)≈30,小公司ln(10亿)≈23,差距就小了。在PandaAI里,我新建了一个自定义因子,公式就是 ln(市值)。工具自动帮我算出了每天每只股票的对数市值。
第3步:计算未来5天收益
要预测未来,当然得有未来数据。我们想知道今天选出的股票,接下来5天到底涨了多少。PandaAI有个“未来收益率”功能,我设置好持有期5天,它自动帮我算出每天对应的未来收益(注意:它巧妙地避免了未来数据,用的是T日收盘后预测T+1到T+5的收益,逻辑上没问题)。
第4步:计算IC——因子与收益的相关性
IC(信息系数)就是看因子值和未来收益有没有关系。如果IC为正,说明因子值越大未来收益越高;为负则相反。我们关心的是“小市值涨得好”,因为我们对数市值越小(数字小),希望未来收益越大,所以期待看到负的IC(负相关)。但为方便理解,有些软件会做符号处理,我们只要看绝对值。
第5步:分组回测——模拟多空策略
理论验证完了,还得模拟交易。我采用最经典的方法:每天把全市场股票按对数市值从小到大排序,等分成5组。买入第一组(最小市值),卖出第五组(最大市值),等权重配置,每天换仓。
在PandaAI的回测引擎里,我只需要在策略里写:
获取当天的因子值,排序并分组,返回买入列表和卖出列表。其他事情(成交价、手续费、滑点)工具都帮我考虑了。跑完回测,直接看到累计收益曲线和绩效指标。
PandaAI的因子分析模块能计算出Pearson IC(线性相关)和Rank IC(排序相关,更稳健)。结果会生成一张IC走势图。
四、结果怎么样?
回测完成后的结果,AI助手还可以为我们分析回测结果数据,给出优点、缺点、注意事项与改进建议、后续的微调方案等:
整体来看,这个“因子分析结果-1日调仓”表现中规中矩、偏一般,远达不到优秀单因子水准,但也并非完全不可用,更适合作为组合中的辅助因子。
从核心截面指标看,IC_mean≈0.018、Rank_IC≈0.02,说明单期解释力偏弱,只略高于噪声;IC_IR≈0.16,稳定性也一般,达不到稳健可交易的单因子标准(通常希望|Rank_IC|>0.03–0.05、IC_IR>0.3–0.5)。但IR≈1.30,说明用它构建多空组合后,整体收益/波动还算过得去,交易层面的表现明显好于“纯IC印象”。
优点:
多空组合1的收益-回撤匹配较好:年化近12%、回撤约6%、夏普接近2,在单一多空组合维度是可圈可点的。
分组收益存在明显极端差异,高组与低组之间有较好的区分度,说明因子方向基本正确。
1日调仓+高换手下仍能拿到正向IR,说明信号在短周期下有一定有效性。
缺点:
|IC|和|Rank_IC|整体偏低,单期预测能力有限,容易被噪声和交易摩擦掩盖。
IC_IR不高,说明时间序列稳定性偏弱,某些阶段可能完全失效。
不同多空组合构建方式之间表现差异很大(一个很好,一个很差),暴露出策略对参数/细节高度敏感,鲁棒性不够。
换手率接近100%,在实际交易中成本压力会很大,高频调仓很难按回测收益原样兑现。
注意事项与改进建议:
注意这个因子更像“局部结构有效”,在样本外/不同市场环境中可能大幅走样,实盘前建议做更长周期、滚动窗口和跨市场验证。
目前是1日调仓+5组分组,可以重点测试:
调仓周期改为3日/5日,看IC衰减节奏,是否存在更合适的持有期;
调整分组方式,如仅做极端两组(1、5组)或改变分组比例(如10%/10%)。
结合其他风格因子(如质量、盈利、动量)做多因子合成,在打压噪声的同时提升整体IC_IR,避免单一规模因子导致的风格暴露过度。
在实盘模拟中引入更现实的交易成本(含冲击成本)和容量约束,高换手因子建议控制资金规模或降低调仓频率。
若你希望提高单因子质量,可尝试对市值做截断/行业中性/市值非线性变换(如分行业做市值排序),看看是否能提高|Rank_IC|和IC_IR。
五、心得与避坑指南
数据要干净:一定要剔除ST股、停牌股、上市不满60天的新股,否则结果会失真。PandaAI有自动清洗选项,省心。
成本不能忘:小市值股票交易成本高,回测时我设了千分之二的滑点和手续费,结果依然不错,但收益降了一些。
过拟合风险:我只测了2025年一年,还不够。建议大家多测几年,看看因子是不是长期有效。
因子组合:市值因子虽然有效,但单独使用波动大,可以结合其他因子(如估值、动量)一起用,效果更好。
六、总结
通过这次实践,我算是亲手验证了小市值效应的存在。用PandaAI这样的工具,大大降低了入门门槛,让我能把精力放在思考和验证上,而不是和代码搏斗。
如果你也在学习量化,不妨从市值因子开始!