一、多因子问题
8、回测时股票价格数据该如何选择?
1、周期:日、周、月、季(报告期)、年
2、时间设置:固定日期---->,起始日期,截止日期;相对日期---->前推周期(日历日、交易日、周、月、季、年),截止日期
3、日期类型:交易日、日历日、工作日
4、无交易数据处理:沿用之前数据、空值、自设数值(自己输入数值)
5、货币:原始货币、人民币、美元、港币
6、价格修正:(!)、复权方式(适用于股票基金):不复权、前复权、后复权、定点复权 (2)、价格类型(适用债券):净价、全价、市价、收益率
设置汇总:1、周/月 2、相对日期-->周/月 3、日历日 4、空值 5、原始货币 6、复权方式-->前复权
注意:复权应该选择向后复权,这样收益率数据库可以月度更新,如果向前复权,每次向前时点不一致,导致数据不一致。
7、A股比较基准是什么?
沪深300指数 代码 000300.SH 中证500指数 代码 000905.SH
6、在做多因子研究时,如果回测结果较好,把y换成随机数序列y1,用y1回归来看模型预测能力差,是不是说明模型预测能力较好?
5、在因子去极值处理后,因子数据全部变为0,是什么原因?
解答:dividendyield2因子在2008年5月31日数据全为0,因为中位数数据为0,极大值和极小值均为0,最后结果都为0,影响应该不大,这样数据少,以后随着分红变得普遍,就不会有这种情况发生了。
4、数组标准化(变为均值为0,方差为1)后的数据唯一吗?
解答:是唯一的,两个标准化的差别是一个对每列标准化,一个对全部数据标准化。
data=pd.DataFrame(np.array([[0, 0], [0, 0], [1, 1], [1, 1]])) data Out[53]: 0 1 0 0 0 1 0 0 2 1 1 3 1 1 scale_fun = lambda x: (x - x.mean()) / x.std() data1=data.apply(scale_fun) data1 Out[56]: 0 1 0 -0.866025 -0.866025 1 -0.866025 -0.866025 2 0.866025 0.866025 3 0.866025 0.866025 data1.mean() Out[79]: 0 0.0 1 0.0 dtype: float64 data1.std() Out[80]: 0 1.0 1 1.0 dtype: float64 from sklearn import preprocessing scaler=preprocessing.StandardScaler() scaler.fit(data) Out[84]: StandardScaler(copy=True, with_mean=True, with_std=True) data2=scaler.transform(data) data2 Out[87]: array([[-1., -1.], [-1., -1.], [ 1., 1.], [ 1., 1.]]) data2.mean() Out[88]: 0.0 data2.std() Out[89]: 1.0 data3=DataFrame(data2) data3 Out[91]: 0 1 0 -1.0 -1.0 1 -1.0 -1.0 2 1.0 1.0 3 1.0 1.0 data3.mean() Out[92]: 0 0.0 1 0.0 dtype: float64 data3.std() Out[93]: 0 1.154701 1 1.154701 dtype: float64
3、选取回报数据的时候,是否需要复权处理?价格修正方式(股票基金)有4种:不复权、前复权、后复权、定点复权(仅用于支持定点复权指标)
解答:选择前复权,如果不复权,价格不真实
2、有些股票当期不在交易标的中,比如ST、停牌、上市不满三个月等。在做因子数据预处理时是该先丢掉这些数据再做预处理,还是全部因子数据数据预处理完,再丢掉?
解答:先全部预处理完,再丢,这样包含的信息更多。
1、如果当天股票停牌,不考虑后续是否停牌情况下,单个回测周期因子回测时该如何处理?实际交易时如何处理?
回测时:该股票不在投资标的中,所有因子值设置为nan,设置时间分为因子预处理前和预处理后两种情况。
实盘时:如果按照回测时情况来处理,该停牌股票必然会被调出股票持仓中,可能实际上该股票不应该调出,产生无效交易,加大交易成本。
这是一个问题。。。
1、RV选股策略:
2、3+2量化选股策略
原文:https://www.cnblogs.com/bawu/p/7300755.html