文章链接 量化研究---小果因子分析系统使用教程,可转债macd因子为例子 (qq.com)
因子分析是一种多维变量统计分析方法,用于从多个变量中提取少数公共因子。
具体来说,因子分析的核心目的是通过研究变量之间的相关性,将多个相关联的变量归结为几个较少的公共因子。这些公共因子能够代表原始变量中的大部分信息,而每个原始变量则可以表示为这些公共因子和一个特殊因子(独特性)的线性组合。以下是因子分析的几个关键点:
-
提取共性因子:因子分析最早由心理学家C.E.斯皮尔曼提出,他在研究学生的各科成绩时发现,不同科目之间存在一定的相关性,即一科成绩好的学生往往在其他科目上也有不错的表现。这种相关性启发了他从中提取共性因子的想法。
-
可观测变量与隐变量:在因子分析中,可观测的变量通常受到背后的公共因子(也称为隐变量)的影响。样本在公共因子上的取值变化会影响其在可观测变量上的取值。
-
降维处理:因子分析常用于对多个观测变量进行降维处理,例如将多个问卷题目降维为几个公共因子,这有助于简化数据结构,更容易地进行后续分析。
-
多元统计分析方法:它是一种多元统计方法,通过研究指标相关矩阵内部的依赖关系,将信息重叠、具有复杂关系的变量归结为少数几个不相关的综合因子。
-
计算因子权重和综合得分:除了用于降维,因子分析还可以用来计算因子权重,以及基于这些权重计算加权的综合得分。
股票因子分析是量化交易中用于评估因子有效性的一种方法。
在股票投资领域,因子分析是一种重要的量化研究手段,它通过对各种可能影响股票价格和收益率的因素进行分析,来预测股票的未来表现。这些因素被称为“因子”,它们可以是宏观经济数据、公司基本面信息、市场情绪指标等。以下是一些常见的股票因子:
-
规模因子:通常指的是公司的总市值,它是衡量公司大小的一个指标。
-
估值因子:如市盈率(Price to Earnings Ratio, P/E),用以评估股票的估值水平。
-
成长因子:例如营业利润同比增长率,反映公司的成长性。
-
盈利因子:如净资产收益率(Return on Equity, ROE),衡量公司的盈利能力。
-
动量反转因子:以前1个月的涨跌幅来衡量,反映股票的价格动量。
-
交投因子:以前1个月日均换手率来表示,反映股票的交易活跃程度。
-
波动因子:以前1个月的波动率来衡量,反映股票的价格波动性。
-
股东因子:如户均持股比例变化,显示股东结构的变化情况。
1导入因子分析框架
from trader_tool.unification_data import unification_data
from factor_analysis_frame.factor_analysis_frame import factor_analysis_frame
from trader_tool import jsl_data
from finta import TA
from tqdm import tqdm
import pandas as pd
data=unification_data(trader_tool='ths')
data=data.get_unification_data()
2获取全部的可转债代码
#计算计算指标
bond=jsl_data.get_all_cov_bond_data()
bond
3计算可转债全部的macd因子
#macd为例子
# factor_data:pandas.DataFrame格式,形如
# instrument date hf_fz_ykws
# 0 000001.SZ 2017-01-03 1.564644
# 1 000001.SZ 2017-01-04 1.521567
# 2 000001.SZ 2017-01-05 1.519973
# 3 000001.SZ 2017-01-06 1.553225
# 4 000001.SZ 2017-01-09 1.367971
'''
factor_return数据格式
instrument date daily_ret
127005 2018-03-12 NaN
127005 2018-03-13 NaN
2 127005 2018-03-14 NaN
3 127005 2018-03-15 NaN
4 127005 2018-03-16 NaN
.
84620 110095 2023-08-25 0.0
'''
stock_list=bond['转债代码'].tolist()
factor_data=pd.DataFrame()
factor_return=pd.DataFrame()
for i in tqdm(range(len(stock_list))):
factor_data_df=pd.DataFrame()
factor_return_df=pd.DataFrame()
stock=stock_list[i]
instrument=stock
hist=data.get_hist_data_em(start_date='20160101',end_date='20500101',stock=stock)
macd=TA.MACD(hist)
hist['MACD']=macd['MACD']
factor_data_df['date']=pd.to_datetime(hist['date'])
factor_return_df['date']=pd.to_datetime(hist['date'])
factor_data_df['MACD']=hist['MACD']
factor_return_df['daily_ret']=hist['close'].pct_change()
factor_data_df['instrument']=instrument
factor_return_df['instrument']=instrument
factor_data=pd.concat([factor_data,factor_data_df],ignore_index=True)
factor_return=pd.concat([factor_return,factor_return_df],ignore_index=True)
因子数据
收益数据
分组参数
#group_num分组
#factor_field因子名称
#instruments参考市场
#benchmark参考指数
#factor_direction因子方向
params = {'group_num':5, 'factor_field':'MACD', 'instruments':'全市场',"benchmark":'00300', 'factor_direction':1}
执行因子回测框架
models=factor_analysis_frame(params=params,factor_data=factor_data,factor_return=factor_return)
models.render()
分析的结果
完美看因子最大的值的标的
***********因子值最大的标的**************
date factor instrument
137083 2024-04-18 17.9279 113615
101673 2024-04-18 13.5632 123118
283583 2024-04-18 8.9575 123018
121191 2024-04-18 8.6597 123106
89769 2024-04-18 8.6009 123127
***********因子值最小的标的**************
date factor instrument
1604 2024-04-18 -16.6805 127097
1803 2024-04-18 -13.1377 127096
296804 2024-04-18 -10.0244 123013
300924 2024-04-18 -6.7810 128041
1503 2024-04-18 -5.4322 123230
( date factor instrument
137083 2024-04-18 17.9279 113615
101673 2024-04-18 13.5632 123118
283583 2024-04-18 8.9575 123018
121191 2024-04-18 8.6597 123106
89769 2024-04-18 8.6009 123127,
date factor instrument
1604 2024-04-18 -16.6805 127097
1803 2024-04-18 -13.1377 127096
296804 2024-04-18 -10.0244 123013
300924 2024-04-18 -6.7810 128041
1503 2024-04-18 -5.4322 123230)
因子分析选股交易