Skip to content

斜率动量指标详解

一、什么是斜率动量指标?

斜率动量指标(Slope Momentum)是一种量化投资中常用的趋势强度指标,通过线性回归分析价格走势的"斜率"来评估资产的动量。相比简单的价格涨跌幅,斜率指标能更科学地捕捉趋势的方向速度稳定性

核心思想

将资产价格走势看作一条"趋势线",通过以下两个维度评估:

  • 斜率(Slope):反映价格上涨或下跌的速度(趋势方向和强度)
  • 拟合优度(R²):反映价格走势与趋势线的贴合程度(趋势稳定性)

最终的斜率动量得分 = 年化收益率 × ,既考虑了收益率,又考虑了趋势的确定性。

二、计算步骤详解

第一步:数据准备

python
# 获取指定周期的收盘价数据
close_prices = df['close'].values[-momentum_period:]

说明:提取最近 N 天(momentum_period)的收盘价数据,确保按时间顺序排列(最旧→最新)。

第二步:对数转换

python
y = np.log(close_prices)
x = np.arange(len(y))

为什么使用对数?

  • 对数收益率具有时间可加性:连续多天的对数收益率可以直接相加
  • 对数转换能更好地处理复利效应,让价格变化更符合正态分布
  • 例如:价格从 100 → 110 → 121,对数收益率分别为 9.53% 和 9.53%,直接相加得到总收益

坐标系构建

  • x:时间序列,[0, 1, 2, ..., N-1]
  • y:对数价格,[ln(P₀), ln(P₁), ..., ln(Pₙ₋₁)]

第三步:线性回归拟合

有两种回归方式:

3.1 等权回归

python
slope, intercept = np.polyfit(x, y, 1)

所有数据点的权重相同,平等对待历史和近期数据。

3.2 加权回归

python
weights = np.linspace(1, 2, len(y))
slope, intercept = np.polyfit(x, y, 1, w=weights)

权重设计:从 1 线性增长到 2

  • 最旧的数据权重 = 1.0
  • 最新的数据权重 = 2.0
  • 中间数据权重线性插值

加权的意义

  • 更重视近期趋势,认为最新数据更能代表当前动量
  • 减少远期噪音对趋势判断的影响
  • 适合快速变化的市场环境

回归结果

  • slope(斜率):每单位时间(天)的对数收益率
  • intercept(截距):趋势线的起始点

第四步:计算年化收益率

python
annualized_returns = math.exp(slope * 250) - 1

计算逻辑

  1. slope 是每天的对数收益率
  2. slope * 250 是一年(250个交易日)的对数收益率
  3. exp(slope * 250) - 1 将对数收益率转换为实际收益率

举例

  • 如果 slope = 0.002(每天0.2%的对数增长)
  • 年化收益率 = exp(0.002 × 250) - 1 = exp(0.5) - 1 ≈ 64.87%

第五步:计算R²(拟合优度)

python
y_pred = slope * x + intercept

# 残差平方和
ss_residual = np.sum((y - y_pred) ** 2)

# 总平方和
ss_total = np.sum((y - np.mean(y)) ** 2)

# R²
r_squared = 1 - (ss_residual / ss_total)

R² 的含义

  • 范围:0 ~ 1
  • R² = 1:所有数据点完美落在趋势线上(完美趋势)
  • R² = 0.8:80%的价格变化能被趋势解释(强趋势)
  • R² = 0.3:仅30%能被解释(弱趋势或震荡)

加权R²:如果使用加权回归,R²计算也要加权,确保评估标准一致。

第六步:综合评分

python
slope_momentum = annualized_returns * r_squared

最终得分 = 年化收益率 × R²

举例对比

资产年化收益率斜率动量得分特征
A50%0.90.45稳定上涨 ✅
B80%0.40.32高收益但波动大
C20%0.950.19稳定但增速慢

结论:资产A得分最高,因为它既有不错的收益率,又有很高的趋势稳定性。

三、等权 vs 加权回归的选择

等权回归

优点

  • 全面考虑整个周期的趋势
  • 不容易被短期波动误导
  • 适合识别中长期趋势

适用场景

  • 市场相对平稳
  • 周期较长(如60天、120天)
  • 追求稳健的趋势判断

加权回归

优点

  • 对市场变化反应更灵敏
  • 能快速捕捉趋势转折
  • 更符合"动量延续"的短期特性

适用场景

  • 市场快速变化
  • 周期较短(如20天、30天)
  • 需要快速响应趋势变化

实战建议

  • 短周期(≤30天):建议使用加权回归
  • 长周期(≥60天):等权回归更稳健
  • 可同时计算两种,构建多维度评分体系

四、在ETF轮动策略中的应用价值

4.1 核心作用:资产排序与筛选

ETF轮动策略的关键是定期选出最强势的资产持有。斜率动量指标提供了科学的排序依据:

python
# 计算所有ETF的斜率动量
etf_scores = []
for etf in etf_pool:
    score = calculate_slope_momentum(etf.data, period=60)
    etf_scores.append({'etf': etf.name, 'score': score})

# 按得分排序,选出Top N
top_etfs = sorted(etf_scores, key=lambda x: x['score'], reverse=True)[:N]

4.2 三大优势

优势1:同时考虑收益与稳定性

传统涨跌幅只看收益率,可能选到"虚高"的资产:

指标简单涨跌幅斜率动量
ETF-A:稳定上涨+30%0.27(30% × 0.9)
ETF-B:暴涨后回调+40%0.16(40% × 0.4)
选择结果❌ 选B✅ 选A

结论:斜率动量能过滤掉不稳定的"虚假强势"。

优势2:平滑噪音,识别真实趋势

线性回归本质上是一种去噪拟合,能过滤短期波动:

价格波动: 100 → 105 → 103 → 108 → 106 → 112
简单涨跌: +12%(但中间反复震荡)
斜率拟合: 识别出稳定的+2%/天趋势(R²高)

优势3:多周期组合,提升稳健性

可以结合不同周期构建评分体系:

python
# 短期(捕捉近期动量)
score_20d = calculate_slope_momentum(df, 20, use_weighted_regression=True)

# 中期(确认趋势延续)
score_60d = calculate_slope_momentum(df, 60, use_weighted_regression=False)

# 长期(避免追高)
score_120d = calculate_slope_momentum(df, 120, use_weighted_regression=False)

# 综合评分
final_score = 0.5 * score_20d + 0.3 * score_60d + 0.2 * score_120d

五、总结

斜率动量指标的核心价值

  1. 科学量化趋势:用数学模型替代主观判断
  2. 兼顾收益与稳定:R²加权避免追逐虚假动量
  3. 灵活适配场景:通过参数调整适应不同市场环境
  4. 易于实现与回测:计算简单,历史数据充足

在ETF轮动中的独特优势

  • ✅ 客观排序,消除情绪干扰
  • ✅ 趋势过滤,提高胜率
  • ✅ 多周期组合,提升稳健性
  • ✅ 适应性强,牛熊皆可用

蜀ICP备20013273号-1 | 返回主站