AlphaFeed Blog

如何用 Python 计算动量震荡指标 AO(Awesome Oscillator)?不用 TA-Lib

分析与指标 · 代码验证于 2026-10-18

如何用 Python 计算动量震荡指标 AO(Awesome Oscillator)?

一句话回答: AO(Awesome Oscillator,动量震荡指标)由 Bill Williams 提出,公式极简:AO = 中价的 5 日 SMA − 中价的 34 日 SMA,其中中价 = (最高价+最低价)/2。它围绕零轴摆动——AO 在零轴之上=短期动量强于中期(偏多)、之下=偏空;常用零轴穿越、双峰(saucer)判动量转折。用 AlphaFeed 取前复权日线一两行就能算,不需要 TA-Lib。

为什么会有这个问题 / 传统做法的痛点

MACD 用收盘价的 EMA 之差,AO 则用中价(更能代表当日中枢)的两条 SMA 之差,衡量”短期动量 vs 中期动量”的强弱对比。它的优点是直观、零轴清晰、几乎无参数争议(5/34 几乎是定式)。痛点仅在于:有人把中价写成收盘价、或 SMA 写成 EMA,就不是标准 AO 了。

分步骤解决(每步配可运行代码)

第 1 步:取前复权日线(要 high/low)

from alphafeed import AlphaFeed
import numpy as np, pandas as pd

af = AlphaFeed(api_key="your-api-key")  # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()

df = af.klines.get("600519.SH", period="1d", count=200,
                   adjust="forward", to_dataframe=True)
df = df.sort_values("trade_date").reset_index(drop=True)

第 2 步:实现 AO(中价 5 日 SMA − 34 日 SMA)

def awesome(df, s=5, l=34):
    med = (df["high"] + df["low"]) / 2          # 中价
    return med.rolling(s).mean() - med.rolling(l).mean()

df["ao"] = awesome(df)
print(df[["trade_date", "ao"]].tail())

实测(tools/verify_new_2026-10-18.py,SDK 0.1.4):贵州茅台近 200 日 AO 尾值 ≈ 8.06(零轴之上,偏多),区间 −88.55 ~ 106.44,期间 AO 上穿零轴 4 次。AO 的绝对值随价格水平变化,看方向与相对大小而非固定阈值。

第 3 步:零轴穿越与双峰(saucer)判读

cross_up   = (df["ao"].shift(1) <= 0) & (df["ao"] > 0)     # 上穿零轴 → 偏多
cross_down = (df["ao"].shift(1) >= 0) & (df["ao"] < 0)     # 下穿零轴 → 偏空
print("最近 AO 上穿零轴:", df.loc[cross_up, "trade_date"].tail(1).tolist())

Williams 的经典信号:零轴穿越(AO 由负转正偏多)、双峰(saucer)(零轴同侧连续柱子的颜色/高度变化)、以及 AO 与价格的背离。

参数与字段说明

参数/概念含义备注
adjust="forward"前复权必须,除权缺口会扭曲中价
med(high+low)/2 中价AO 用中价,不是收盘
s=5短期 SMABill Williams 定式
l=34长期 SMABill Williams 定式
AO5SMA − 34SMA围绕零轴摆动
零轴穿越多空切换核心信号

关键坑与注意事项

常见问题(FAQ)

Q:AO 和 MACD 有什么区别? A:AO = 中价的 5/34 SMA 之差;MACD = 收盘价的 12/26 EMA 之差再配信号线。AO 更强调”中价 + 简单均线 + 零轴”,是 Bill Williams 交易体系的一部分;MACD 更通用。两者都围绕零轴看动量。

Q:AO 适合所有周期吗? A:日线最常用。更短周期(分钟)也能算,但噪声更大;5/34 的参数是 Williams 的定式,一般不改。

Q:需要付费吗? A:单只股票日线在免费额度内即可;若要对全市场批量扫 AO 零轴上穿的票,需要 klines.batch + universes(Starter 及以上),详见官网定价页。

小结

AO 用中价的 5 日与 34 日简单均线之差衡量短期 vs 中期动量,围绕零轴摆动,用零轴穿越、双峰和背离判转折。用 AlphaFeed 的前复权 high/low 一两行即可实现——记住用中价与 SMA、AO 无固定阈值看方向与零轴、震荡市零轴附近易骗线、前复权必须。

相关链接:


免责声明:本文仅为技术与数据接口使用示例,代码与策略仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。