如何用 Python 计算 Aroon 指标(阿隆指标)?用「距离最高/最低多久」判断趋势
如何用 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/Down | 0~100 | 越高表示越近创新高/新低 |
| Aroon 振荡器 | Up − Down | −100~100,方向+强度 |
| 70 / 30 | 强趋势阈值 | 经验值 |
关键坑与注意事项
- “天数”定义别搞反:Aroon Up 要在近期创新高时接近 100。用
argmax时窗口取n+1根、除以n:最高价在最新一根 → argmax=n → Up=100。实现口径不同会上下颠倒。 - 盘整时缠绕、信号多:Up 与 Down 都低且反复交叉时趋势缺失,振荡器穿越会频繁骗线。
- 前复权必须:除权缺口会让”最高/最低价”失真,直接污染 Aroon。
- 窗口影响灵敏度:n 小更灵敏更吵,n 大更稳更滞后;25 是常用折中。
- 是趋势存在性,不保证涨跌幅:强上升趋势≠一定继续大涨,只是描述当前形态。
常见问题(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 几行即可实现——记住天数口径别搞反、盘整时缠绕信号多、前复权必须。
相关链接:
- AlphaFeed 官网:https://alphafeed.org/
- Python SDK 快速开始:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart
免责声明:本文仅为技术与数据接口使用示例,代码与策略仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。