还在熟悉supermind中,设计了一种多因子组合代码实现,后续的回测中只需要调入调出指标,并调整指标权重就可以完成测试
本策略主要逻辑如下
1、将股票的基本指标组合成一张大宽表
2、使用排名对因子标准化
3、合计因子值 从大到小排序
4、选择前N个股票调仓
选择因子并分配权重
weight_index = {
# -----非归一指标------
# "5均量比":0.3,
# -----归一指标------
# "当前/最高_归一": 1,
# "当前/最低_归一": 0.5,
# "总市值_归一": 0.5,
# "流通市值_归一": 0.5,
"市净率MRQ_归一": 0.5,
# "市盈率TTM_归一": 0.5,
"总收/市值_归一": 1,
"净利/市值_归一": 1,
"股息率TTM_归一": 2,
# "净利润/营业总收入_归一": 0.5,
"营业总收入(同比增长率)_归一": 0.5,
"归母净利润(同比增长率)_归一": 0.5,
"扣非净利润(同比增长率)_归一": 1.5,
"每股净资产(相对年初增长率)_归一": 0.5,
"总资产(同比增长率)_归一": 1,
"总资产收益率(%)_归一": 0.5,
}
排名公式 (2n-N-2)/N
for key, orderBy in normalization_indexes.items():
stocks = stocks.sort_values(by=[key], ascending=(not orderBy)).reset_index(drop=True)
stocks[key + "_归一"] = np.where(
pd.isnull(stocks[key]) | (stocks[key].astype(str) == ''), # 检查空值条件
0, # 如果为空,则归一化值为0
((np.arange(len(stocks)) + 1) * 2 - stocks_count - 2) / stocks_count # 归一化计算
)