分享我的第一个多因子选股策略

用户头像mo_****52320
2024-09-13 发布

还在熟悉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  # 归一化计算
        )
收益&风险
源码

评论