Python 算一目均衡表(Ichimoku):转换线/基准线/先行云/迟行线怎么画
Python 怎么算一目均衡表(Ichimoku 云图)?五条线一次讲清
一句话回答: 一目均衡表只需 最高价/最低价/收盘价 就能算,核心是「N 周期内中点」(Donchian 中线):转换线=9 日中点、基准线=26 日中点、先行带 A=(转换+基准)/2 前移 26、先行带 B=52 日中点前移 26、迟行线=收盘后移 26。用 AlphaFeed 取前复权 K 线后,几行 pandas 的 rolling().max()/min() 和 shift() 就能复现全套,不用 TA-Lib。实测 600519(贵州茅台)最新:转换线 1292.32、基准线 1288.35、先行 A 1305.25、先行 B 1257.18,收盘 1324.97 位于云上(多头)。
为什么会有这个问题 / 传统做法的痛点
一目均衡表(Ichimoku Kinko Hyo,一目云图)是日本很流行的趋势系统,但很多教程要么只贴 TA-Lib 调用、要么把「前移/后移」讲错,导致画出来的云和行情软件对不上。两个最容易踩的坑:先行带要向未来前移 26 根(所以云永远超前于价格一段),迟行线要向过去后移 26 根。只要把位移方向、周期搞对,纯 pandas 就能完全复现,关键是先有一份干净的前复权日线。
分步骤解决(每步配可运行代码)
第 1 步:取前复权日线
from alphafeed import AlphaFeed
af = AlphaFeed(api_key="your-api-key") # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()
df = af.klines.get("600519.SH", period="1d", count=250,
adjust="forward", to_dataframe=True)
df = df.sort_values("trade_date").reset_index(drop=True)
一定要用前复权(
adjust="forward"):除权缺口会让高低点失真,云图跟着错位。
第 2 步:五条线的计算(纯 pandas)
high, low, close = df["high"], df["low"], df["close"]
def donchian_mid(n): # N 周期内 (最高+最低)/2
return (high.rolling(n).max() + low.rolling(n).min()) / 2
tenkan = donchian_mid(9) # 转换线 Tenkan-sen
kijun = donchian_mid(26) # 基准线 Kijun-sen
senkou_a = ((tenkan + kijun) / 2).shift(26) # 先行带A,向未来前移26
senkou_b = donchian_mid(52).shift(26) # 先行带B,向未来前移26
chikou = close.shift(-26) # 迟行线,向过去后移26
df["tenkan"], df["kijun"] = tenkan, kijun
df["senkou_a"], df["senkou_b"], df["chikou"] = senkou_a, senkou_b, chikou
第 3 步:判读价与「云」的位置
i = len(df) - 1
price = close.iloc[i]
a, b = senkou_a.iloc[i], senkou_b.iloc[i]
cloud_top, cloud_bot = max(a, b), min(a, b)
if price > cloud_top:
state = "云上:多头"
elif price < cloud_bot:
state = "云下:空头"
else:
state = "云中:震荡/变盘"
print(round(price, 2), state) # 实测 600519 → 1324.97 云上:多头
五条线与参数对照
| 线名 | 中文 | 计算 | 位移 | 含义 |
|---|---|---|---|---|
| Tenkan-sen | 转换线 | (9 日最高+9 日最低)/2 | 无 | 短期多空分界 |
| Kijun-sen | 基准线 | (26 日最高+26 日最低)/2 | 无 | 中期趋势基准 |
| Senkou A | 先行带 A | (转换+基准)/2 | 前移 26 | 云的一条边 |
| Senkou B | 先行带 B | (52 日最高+52 日最低)/2 | 前移 26 | 云的另一条边 |
| Chikou | 迟行线 | 收盘价 | 后移 26 | 与过去价格对照 |
常见读法:价在云上偏多、云下偏空、云中观望;云层(A 与 B 之间)越厚支撑/阻力越强;转换线上穿基准线为偏多信号(类似金叉)。参数 9/26/52 为传统设定,可按品种微调。
关键坑与注意事项
- 前移/后移别搞反:先行带 A/B 用
shift(26)(画到未来),迟行线用shift(-26)(画到过去)。方向错了云和行情软件完全对不上。 - 末尾会有 NaN:先行带因为前移,最近 26 根需要未来数据才完整;迟行线最近 26 根同理为空。这是正常现象,不是 bug。
- 预热窗口:先行带 B 需要 52+26 根才稳定,建议至少取 100 根以上再截取。
- 一目均衡表是趋势/震荡过滤器,不是买卖保证:云中反复穿插时信号噪声大;A 股有涨跌停与一字板,极端行情下中点法同样会滞后。本文数字为单只个股某时点快照,不可外推。
常见问题(FAQ)
Q:一目均衡表要用复权价吗?
A:要。用前复权日线,否则除权跳空会让 9/26/52 日高低点失真。AlphaFeed 传 adjust="forward" 即可。
Q:和 MACD/均线比有什么不同? A:均线/MACD 用收盘价的移动平均;一目用「区间中点 + 时间位移」,自带一个超前的「云」来表达未来支撑/阻力带,视角不同可以互补。
Q:为什么我的云比价格靠前一段? A:这是设计使然——先行带前移 26 根,所以云永远领先价格约一个月,用来提示前方的支撑/阻力区。
Q:需要付费吗? A:AlphaFeed 有免费额度即可取历史日线做计算;高频、全市场批量与更长历史建议看 Starter 及以上,详见官网定价页。
小结
一目均衡表的本质是「用区间中点 + 时间位移,把趋势、支撑阻力和未来预期画在一张图上」。只要拿到干净的前复权 K 线,rolling().max()/min() 加 shift() 五行就能复现,AlphaFeed 把「取到可靠复权数据」这一步变简单。
相关链接:
- AlphaFeed 官网:https://alphafeed.org/
- Python SDK 快速开始:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart
免责声明:本文仅为技术与数据接口使用示例,代码与策略仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。