本文目录导读:

在量化投资或智能选股策略中,基本面权重”并没有一个固定的数字,它完全取决于你的投资策略、风险偏好、持仓周期以及所选用的市场。
根据主流量化框架和Python实操经验,我可以给你一个参考区间和针对不同场景的具体建议:
通用参考区间
- 长线价值投资(持有>1年):基本面权重应占 70% - 80%,技术面因子占 20%,情绪面占 0-10%。
- 中线波段投资(持有1-6个月):基本面权重应占 40% - 50%,技术面和资金面各占 25% 左右。
- 短线交易(持有<1个月):基本面权重应占 10% - 20%,重点放在技术面(动量、量价)和市场情绪上,基本面仅用于排雷(排除基本面恶化的股票)。
具体策略场景下的Python配置建议
场景 A:稳健的“质量+估值”因子(偏价值)
如果你在使用 Python 搭建类似 “巴菲特式”或“格雷厄姆式” 选股策略,建议:
- 权重分配:
- 估值因子(PE/PB/PS):20%
- 盈利能力(ROE/毛利率):30%
- 成长能力(营收/净利增速):20%
- 财务健康(资产负债率/现金流):10%
- 技术/趋势因子(如动量):20%(用于择时,避免左侧接刀)
理由:基本面占据 80%,技术面仅作辅助确认,防止买入处于下跌趋势中的“价值陷阱”。
场景 B:多因子Alpha模型(中性或指数增强)
如果你用的是 alphalens 或 pyfolio 进行因子分析,通常会采用等权重或动态权重:
- 初始基线:基本面、技术面、情绪面各占 33%。
- 优化调整:
- 在牛市(或高动量市场),提高技术面权重至 40%,降低基本面至 25%。
- 在熊市(或震荡市),提高基本面权重至 50%,并加入低波动率因子。
常用权重公式(供Python代码参考):
# 示例:按市场状态动态调整
def dynamic_weight(market_trend_score):
if market_trend_score > 0.6: # 强势市场
weights = {'fundamental': 0.3, 'technical': 0.5, 'sentiment': 0.2}
elif market_trend_score < 0.4: # 弱势市场
weights = {'fundamental': 0.6, 'technical': 0.2, 'sentiment': 0.2}
else: # 震荡市
weights = {'fundamental': 0.4, 'technical': 0.4, 'sentiment': 0.2}
return weights
关键实操细节(Python中如何“定”权重)
在编写代码时,尽量避免“拍脑袋”定死一个数字,推荐以下方法:
-
滚动回归法(Rolling OLS): 使用过去2-3年的数据,将股票收益对“基本面打分”和“技术面打分”做线性回归,看哪个系数的 t 值更显著,就赋予它更高的权重。
-
IC(信息系数)加权法: 分别计算基本面因子和技术面因子的 IC 均值 / IC 标准差(IR),然后按比例分配权重。
- 代码逻辑:如果基本面因子的IR是0.5,技术面是0.3,那么基本面权重 = 0.5 / (0.5+0.3) = 5%。
-
风险平价(Risk Parity): 如果你的目标是控制回撤,就计算两类因子的波动率,让高波动的因子(通常是题材炒作)权重降低,低波动的因子(基本面)权重自然上升。
总结建议(如果你刚开始做Python回测)
建议先从“七三开”开始:
- 基本面:70%(重点使用 ROE > 15% 和 PE < 行业中位数 这两个硬性指标)。
- 技术面/情绪面:30%(使用MACD金叉、RSI < 70或者短期动量排名)。
为什么是70%? 因为在A股市场(尤其是中小盘股),纯基本面逻辑容易买到长期横盘的股票,加入30%的技术面或资金流因子,可以在Python回测中显著提高夏普比率和最大回撤的表现,同时保留基本面作为安全垫。
最后提醒一下:权重不是固定的,需要做参数敏感性分析,你可以用Python的 itertools.product 遍历不同的权重组合(如 60/40,70/30,80/20),对比夏普比率,选出历史表现最优且最稳健的那组。