AlphaFeed Blog

如何用 Python 计算 Aroon 指标(阿隆指标)?用「距离最高/最低多久」判断趋势

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

如何用 Python 计算 Aroon 指标(阿隆指标)?

一句话回答: Aroon(阿隆)指标的独特视角是时间而非价格:Aroon Up = 100×(N − 距最近一次 N 日最高价过去的天数)/N,Aroon Down 同理用最低价。最近频繁创新高则 Aroon Up 接近 100(上升趋势)、频繁创新低则 Aroon Down 接近 100(下降趋势);Aroon 振荡器 = Up − Down(+100~−100)直接给趋势方向与强度。用 AlphaFeed 取前复权日线几行就能实现,不需要 TA-Lib。

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

多数趋势指标盯”价格涨跌幅度”,而 Aroon 由 Tushar Chande 提出,换了个角度盯”多久没创新高/新低了”:如果一只票总在近几天内刷新 N 日最高价,说明上升趋势强且新鲜;一旦很久没创新高,Aroon Up 就快速衰减,提示趋势在转弱。它尤其擅长识别趋势的开始与结束、以及盘整(Up 和 Down 都低且缠绕)。痛点是 TA-Lib 的 AROON 对”天数”的定义容易搞混(是距今几天、还是第几根),本文用清晰的 argmax/argmin 实现。

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

第 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 步:实现 Aroon Up / Down / 振荡器

def aroon(df, n=25):
    # 在最近 n+1 根里,最高价出现在第几根(argmax);越靠右(越近)值越大 → Aroon Up 越高
    up = df["high"].rolling(n+1).apply(lambda x: 100 * np.argmax(x) / n, raw=True)
    dn = df["low"].rolling(n+1).apply(lambda x: 100 * np.argmin(x) / n, raw=True)
    return up, dn, up - dn      # Aroon Up, Aroon Down, Aroon 振荡器

df["aroon_up"], df["aroon_dn"], df["aroon_osc"] = aroon(df, 25)
print(df[["trade_date", "aroon_up", "aroon_dn", "aroon_osc"]].tail())

实测(tools/verify_new_2026-10-15.py,SDK 0.1.4):贵州茅台近 200 日 Aroon Up ≈ 12.0、Aroon Down ≈ 72.0、振荡器 ≈ −60.0——Down 远高于 Up,说明近期更常创 25 日新低、偏下降趋势。数值均落在 0100(振荡器 −100100)。

第 3 步:按经典规则判读

last_up, last_dn = df["aroon_up"].iloc[-1], df["aroon_dn"].iloc[-1]
if last_up > 70 and last_dn < 30:   state = "强上升趋势"
elif last_dn > 70 and last_up < 30: state = "强下降趋势"
elif last_up < 50 and last_dn < 50: state = "盘整/趋势缺失"
else:                               state = "过渡/不明"
print("Aroon 判读:", state)

经典规则:Up>70 且 Down<30 为强上升;反之强下降;两者都低(<50)常是盘整;Up 上穿 Down(振荡器转正)视为趋势转多信号。

参数与字段说明

参数/概念含义备注
adjust="forward"前复权必须,除权缺口会制造假新高/新低
n=25回看窗口Chande 原设 25
argmax(x)最高价在窗口内的位置越靠右=越近,Up 越高
Aroon Up/Down0~100越高表示越近创新高/新低
Aroon 振荡器Up − Down−100~100,方向+强度
70 / 30强趋势阈值经验值

关键坑与注意事项

常见问题(FAQ)

Q:Aroon 和 ADX、DMI 有什么区别? A:ADX/DMI 基于”方向性移动”的幅度衡量趋势强度;Aroon 完全基于”距离创新高/新低的时间”。角度不同:Aroon 对”趋势何时开始/结束”更敏感,可与 ADX 互相印证。

Q:Aroon 振荡器和 Aroon Up/Down 用哪个? A:振荡器(Up−Down)更紧凑,一条线看方向与强度,适合做信号;Up/Down 两条线更能看清”是谁在主导、是否缠绕盘整”。常一起看。

Q:需要付费吗? A:单只股票日线在免费额度内即可;若要对全市场批量扫 Aroon 振荡器刚转正(趋势转多)的票,需要 klines.batch + universes(Starter 及以上),详见官网定价页。

小结

Aroon 指标用”距离最近创新高/新低多久”这个时间视角刻画趋势:Up/Down 的高低与振荡器的正负直接给出方向与强度,尤其擅长识别趋势起止与盘整。用 AlphaFeed 的前复权 high/low 几行即可实现——记住天数口径别搞反、盘整时缠绕信号多、前复权必须。

相关链接:


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