指标解读|滚动平均绝对偏差(Rolling Mean Absolute Deviation):衡量市场稳定性的实用工具
在量化交易和金融数据分析中,我们经常依赖标准差来衡量波动性。然而,标准差对于**极端值(outliers)**过于敏感,有时会高估波动风险。此时,**平均绝对偏差(Mean Absolute Deviation, 简称 MAD)**就成为一种更加稳健、抗干扰的波动性度量方式。
本文将深入介绍 pandas_ta
库中的 mad()
函数,中文命名为“滚动平均绝对偏差指标”,解析其工作原理、实际应用场景,并结合代码示例,帮助你把握这一低调但实用的金融分析工具。
一、滚动平均绝对偏差指标是什么?
平均绝对偏差(MAD)是衡量一组数据与其平均值之间偏离程度的统计量:
$$ \text{MAD} = \frac{1}{n} \sum_{i=1}^{n} |x_i - \bar{x}| $$
在时间序列中,“滚动 MAD”是指对每一个时间点使用固定窗口计算该窗口内的 MAD 值,持续滑动更新,从而得到一个新的时间序列。
相比标准差,MAD:
- 更稳定,不容易被异常价格拉高;
- 更平滑,适合低频交易或长期趋势分析;
- 更通俗,具有直观的波动范围解释力。
二、pandas_ta 中的 mad()
函数用法详解
📘 函数调用方式:
import pandas_ta as ta
df["MAD_30"] = ta.mad(df["close"], length=30)
🔧 参数说明:
参数名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
close | Series | 收盘价时间序列 | 必填 |
length | int | 计算窗口周期(单位:天) | 30 |
offset | int | 时间偏移 | 0 |
🔁 返回结果:
- 返回
Series
,通常命名为MAD_30
,表示基于过去30个交易日的滚动 MAD 值。
三、实战演示:识别低波动区间与潜在爆发点
import pandas as pd
import pandas_ta as ta
import matplotlib.pyplot as plt
# 读取价格数据
df = pd.read_csv("stock_data.csv")
df["MAD_30"] = ta.mad(df["close"], length=30)
# 绘图对比
plt.figure(figsize=(12,6))
plt.subplot(2,1,1)
plt.plot(df["close"], label="收盘价", color="black")
plt.title("收盘价走势")
plt.legend()
plt.subplot(2,1,2)
plt.plot(df["MAD_30"], label="滚动MAD(30日)", color="blue")
plt.axhline(df["MAD_30"].mean(), linestyle="--", color="gray", label="历史均值")
plt.title("市场稳定性指标:滚动平均绝对偏差")
plt.legend()
plt.tight_layout()
plt.show()
四、如何解读 MAD 的变化趋势?
MAD 值变化 | 含义解读 | 策略启发 |
---|---|---|
持续下降 | 市场波动减弱,进入稳定或震荡状态 | 适合布局趋势突破或收敛策略 |
持续上升 | 市场开始活跃,可能酝酿大行情 | 可转向动量交易或波动率策略 |
快速跳升 | 极端行情临近(如突发利空或放量突破) | 建议结合风险控制机制或保护止损 |
MAD 接近 0 | 市场处于“死水期”,大概率无有效交易机会 | 忽略信号,静待变盘 |
五、滚动 MAD 与其他波动性指标对比
指标 | 稳健性 | 易理解性 | 是否抗异常值 | 是否反应敏感 |
---|---|---|---|---|
标准差(Std) | 中 | 中 | 否 | 高 |
波动率(Volatility) | 中 | 中 | 否 | 高 |
平均绝对偏差(MAD) | 高 | 高 | 是 | 适中 |
📌 结论:MAD 是一种适合“长期投资者”和“低频量化策略”使用的稳定波动指标。
六、结合策略建议:MAD 与布林带/均线的组合
- ✅ 布林带缩口 + MAD新低:低波动蓄势阶段,关注后续突破;
- ✅ 均线交叉 + MAD上升:趋势启动,量价共振,有效进场信号;
- ✅ MAD背离价格走势:若价格上涨但 MAD 下降,提示行情虚弱;
七、总结:用 MAD 观察市场的“情绪温度计”
虽然滚动 MAD 是一个非常基础的统计工具,但它在交易中的实际应用却非常广泛。它像一把温度计,帮助你在纷繁复杂的市场中,感知那一份**“波动的真实情绪”**。
结合 pandas_ta
中的 mad()
函数,你可以轻松将 MAD 融入你的量化分析系统,提升对趋势稳定性和风险边界的掌握能力。