市值中性化

大部分因子当中都包含了市值的影响,所以当我们通过一些指标选择股票的时候, 每个因子都会提供市值的因素,选择的股票就会比较集中, 及选股的标准不太好。市值中性化就是排除市值影响后的因子。

计算方法:
回归法去除
建立目标因子 y 和市值 x 的回归方程,然后计算目标因子和其预测值之间的偏差,偏差就是不受市值影响的部分,即市值中性化后的结果
例如股票振幅,要计算市值中性化后的股票振幅,过程如下:
1. 获取两个因子数据,即股票振幅和市值数据
2. 对目标值因子股票振幅进行去极值,然后标准化
3. 建立市值 x 与股票振幅 y 的回归方程
4. 通过回归系数, 预测新的因子结果 y_predict
5. 求出目标因子 y 与 y_predict 的偏差即为新的因子值

指标参数:

y

中性化股票振幅输出列。

S

序表,公司基本面数据


函数代码:


A

B

……

……

13

func NSA(A,$y,S)

=A.derive@o(:nsa_totalshare,:nsa_totalvalue,:nsa_amp,:nsa_amppre)

14


=EXT@c(A,S,"totalShare:nsa_totalshare")

15


=A.run(nsa_totalshare* 收盘:nsa_totalvalue)

16


=A.run(if(#==1,0,( 最高 - 最低)/ 收盘 [-1]):nsa_amp)

17


=A.sert("nsa_amp")

18


=B17(1).numnorm()

19


=A.([lg(nsa_totalvalue)] | 1)

20


=linefit(B19,B18(1)).conj()

21


=A.run(lg(nsa_totalvalue)*B20(1)+B20(2):nsa_amppre)

22


=A.run(nsa_amp-nsa_amppre: ${y})

23


=A.alter(;nsa_totalshare,nsa_totalvalue,nsa_amp,nsa_amppre)

函数保存到 indicator.splx。

举例:

调用脚本计算浦发银行 2024 年的中性化股票振幅。


A

B


4

=call@f("indicator.splx")

登记脚本中的函数

5

K线数据

6

公司基本面数据

7

=A5.derive(:NSA)

增加要返回的指标字段

8

=NSA(A7,NSA,A6)

调用函数计算指标

运行效果:

..