Vibe-Trading 一目均衡表五线计算详解:从指标公式到信号引擎实战
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
一目均衡表(Ichimoku Kinko Hyo)是日本技术分析学派中自成体系的完整趋势评估框架,它以五条线(转换线、基准线、先行带A、先行带B、迟行线)和由先行带围合而成的"云带"(Kumo)为核心,把价格趋势、动量与时间周期统一到同一张图表中。本指南以 Vibe-Trading 仓库中的 五线计算参考文档 为骨架,结合同目录下的 信号系统参考文档 与 示例信号引擎源码,完整讲解五条线的数学定义、云带的判读方法,以及 Vibe-Trading 中基于 TK 交叉与三重过滤的纯 pandas 信号引擎实现。读完本文,你将掌握五线的逐行计算公式、各参数周期含义、云带多空判读,并能直接运行仓库自带的 OKX 行情信号示例。
一目均衡表的五线体系
Vibe-Trading 将一目均衡表定位为一套"standalone Japanese technical-analysis framework"(独立日本技术分析框架),五条线各司其职,共同构成对趋势的完整评估。五条线的核心定义如下表:
| 线名 | 日文 | 计算公式 | 含义 |
|---|---|---|---|
| 转换线 | Tenkan-sen | (9周期最高 + 9周期最低) / 2 | 短期趋势 |
| 基准线 | Kijun-sen | (26周期最高 + 26周期最低) / 2 | 中期趋势 |
| 先行带A | Senkou Span A | (转换线 + 基准线) / 2,前移26周期 | 云带上沿 |
| 先行带B | Senkou Span B | (52周期最高 + 52周期最低) / 2,前移26周期 | 云带下沿 |
| 迟行线 | Chikou Span | 收盘价,后移26周期绘制 | 趋势确认 |
转换线(Tenkan-sen):短期的价格中点
转换线是五线中最灵敏的一条,其公式为:
tenkan = (highest_high(9) + lowest_low(9)) / 2其中highest_high(9)为最近 9 根K线的最高价最大值,lowest_low(9)为最近 9 根K线的最低价最小值。它反映的是短期(约2周交易日)的价格中点,本质上是周期为 9 的 Donchian 通道中线。
在仓库源码 example_signal_engine.py 中,这一计算被抽象为通用的_donchian_mid辅助方法,用 pandas 一行实现:
def _donchian_mid(self, high: pd.Series, low: pd.Series, period: int) -> pd.Series: return (high.rolling(period).max() + low.rolling(period).min()) / 2可以看到,转换线计算只需传入tenkan_period=9即可复用同一函数,这也保证了后续所有 Donchian 中线类指标实现的一致性与可测试性。
基准线(Kijun-sen):中期的均衡点
基准线公式:
kijun = (highest_high(26) + lowest_low(26)) / 2它取最近 26 根K线的价格中点,反映中期(约1个月)价格中点。文档特别强调:基准线也是价格的**"均衡点"**——在实际盘面中,价格回踩基准线常被视为重要的支撑/阻力参考。从 swarm 面板配置 的 Ichimoku 分析师指令中也可以看到,"Price re-tests of Kijun as S/R"(价格回测基准线视为支撑/阻力)是五要素判读中的重要一环。
先行带A(Senkou Span A):云带上沿
先行带A是转换线与基准线的简单平均,再前移26周期绘制:
span_a = (tenkan + kijun) / 2 # 前移26周期由于它由快慢两线均值构成,本身融合了短期与中期信息;前移 26 周期意味着它被画在"未来",用于提前呈现当前价格区间对应的支撑/阻力前景。
先行带B(Senkou Span B):云带下沿
先行带B是更长周期(52)的 Donchian 中线,同样前移 26 周期:
span_b = (highest_high(52) + lowest_low(52)) / 2 # 前移26周期52 周期大约对应一个季度(约3个月的交易日),因此先行带B反映的是更长期的价格均衡区间,通常比先行带A更平滑、更滞后。
迟行线(Chikou Span):趋势确认线
迟行线最为直观——它就是把当前收盘价后移26周期绘制:
chikou = close # 后移26周期绘制迟行线的用途是确认趋势:当迟行线位于当前价格上方时,表明过去 26 周期前价格持续走强,为多头确认;位于下方则为空头确认。在 example_signal_engine.py 中,源码注释给出了其 pandas 实现方式(close.shift(-self.displacement)),并注明"不参与信号计算"——迟行线在 Vibe-Trading 的信号引擎中只作为确认要素存在,不直接进入买卖触发逻辑。
云带(Kumo):先行带之间的多空战场
先行带A与先行带B之间的区域称为云带(Kumo)。云的形状直接决定了趋势判读的方向性:
- A > B:看涨云(通常绘制为绿色),价格位于云上方时趋势看多;
- A < B:看跌云(通常绘制为红色),价格位于云下方时趋势看空;
- 云带厚度反映支撑/阻力强度——云越厚,代表该区域的均衡区间越宽,被突破的难度越大。
从源码实现看,example_signal_engine.py 对云的处理值得注意:由于先行带 A、B 分别前移了 26 周期,源码用pd.concat对两条先行带逐行取最大/最小值来构造云的上沿与下沿:
cloud_top = pd.concat([span_a, span_b], axis=1).max(axis=1) cloud_bottom = pd.concat([span_a, span_b], axis=1).min(axis=1) above_cloud = close > cloud_top below_cloud = close < cloud_bottom bullish_cloud = span_a > span_b bearish_cloud = span_a < span_b其中above_cloud/below_cloud判断价格与云的相对位置,bullish_cloud/bearish_cloud判断云自身的方向——这两组布尔序列正是三重过滤中后两道过滤器的基础。
从五线到交易信号:TK 交叉与三重过滤
五线本身是"结构描述",而 Vibe-Trading 的一目均衡表技能(见 SKILL.md)把它落地为一套完整的信号生成体系。信号只在 TK 交叉事件发生时触发,并叠加三重过滤。
TK 交叉(核心信号)
转换线(T)与基准线(K)的交叉是信号触发的唯一扳机:
金叉(看涨)——转换线从下方穿越基准线,按交叉发生位置分档:
- 强金叉:交叉发生在云带上方;
- 中金叉:交叉发生在云带内部;
- 弱金叉:交叉发生在云带下方。
死叉(看跌)——转换线从上方穿越基准线,同理按位置分档:
- 强死叉:交叉发生在云带下方;
- 中死叉:交叉发生在云带内部;
- 弱死叉:交叉发生在云带上方。
交叉本身只能说明短期动能相对中期的转变,其"强弱"取决于所处云位,因此在信号引擎里交叉还必须与下面两道过滤配合。
三重过滤
为提升信号质量,引擎对每一个 TK 交叉事件施加三重过滤(参见 信号系统参考文档):
- TK 交叉:作为触发条件(第一道闸门);
- 价格与云的关系:价格在云上方偏多,在云下方偏空(方向确认);
- 云的方向:先行带A > B 为看涨云,A < B 为看跌云(趋势确认)。
三个条件必须全部一致才会产生信号,否则一律观望。对应到 SKILL.md 中的信号约定:
- 强买入(Strong buy):看涨 TK 交叉 + 价格位于云上方 + 看涨云(A > B);
- 强卖出(Strong sell):看跌 TK 交叉 + 价格位于云下方 + 看跌云(A < B);
- 其余所有情况:观望(stand aside)。
信号值采用统一约定:1= 做多,-1= 做空,0= 观望。
源码中的信号生成逻辑
example_signal_engine.py 的SignalEngine.generate方法把上述规则翻译成了纯 pandas 向量化实现:
# --- TK 交叉检测 --- tk_cross_up = (tenkan > kijun) & (tenkan.shift(1) <= kijun.shift(1)) tk_cross_down = (tenkan < kijun) & (tenkan.shift(1) >= kijun.shift(1)) # --- 三重过滤信号 --- buy = tk_cross_up & above_cloud & bullish_cloud sell = tk_cross_down & below_cloud & bearish_cloud signal = buy.astype(int) - sell.astype(int)tk_cross_up通过"当前周期 tenkan > kijun 且上一周期 tenkan <= kijun"精确捕捉金叉发生的那一根K线(死叉同理),随后用布尔与运算一次性完成三重过滤,buy.astype(int) - sell.astype(int)把信号压缩为 1 / -1 / 0。整套实现不依赖任何外部技术分析库,仅需 pandas 即可运行,依赖清单(见 SKILL.md)为:
pip install pandas numpy requests其中requests仅用于示例中从 OKX 拉取行情。
预热要求:为什么需要 78 根K线
一目均衡表的各条线周期不同、位移不同,因此信号引擎存在硬性的预热(warm-up)要求:至少需要78 根K线才能产生有效信号。这个数字的来源在 信号系统参考文档 中解释得很清楚:52 周期计算(先行带B的最长回看窗口)+ 26 周期位移。
源码 example_signal_engine.py 将其落实为运行时校验:
warmup = self.senkou_b_period + self.displacement for symbol, df in data_map.items(): signal = pd.Series(0, index=df.index, dtype=int) if len(df) < warmup: result[symbol] = signal continue数据不足 78 根K线的标的会直接返回全 0 信号(即全程观望),而不是产生残缺或误导性的结果。这意味着在实际使用中,日线、小时线等任何周期的数据回看窗口都应至少覆盖 78 根,才能让云带完整前移并得到可靠的交叉判定。
参数与默认值
SignalEngine构造函数暴露了全部四个核心参数,默认值与一目均衡表的经典周期设定完全一致:
| 参数 | 默认值 | 作用 |
|---|---|---|
tenkan_period | 9 | 转换线回看周期 |
kijun_period | 26 | 基准线回看周期 |
senkou_b_period | 52 | 先行带B回看周期 |
displacement | 26 | 先行带前移 / 迟行线后移周期 |
在 example_signal_engine.py 中,这四个参数在__init__中被逐一保存为实例属性,generate方法内部通过self.tenkan_period等引用它们。参数化设计意味着你可以针对不同市场调整周期(例如短线交易者缩短 tenkan 周期以提高灵敏度),但需要注意:预热窗口warmup = senkou_b_period + displacement会随参数同步变化,调整senkou_b_period或displacement时必须同步增加数据回看长度。
实战运行:用 OKX 行情生成 BTC / ETH / SOL 信号
仓库在 example_signal_engine.py 中提供了可直接运行的完整示例:从 OKX 公开 API 拉取日线K线,送入SignalEngine生成信号并统计。
数据获取部分通过 OKXGET /api/v5/market/candles接口实现,拉取instId(如BTC-USDT)、bar(默认1D)、limit(默认 300 根)三个参数,随后把 API 返回的时间戳毫秒值转换为 pandas datetime 索引,并把open/high/low/close转为浮点类型,构造标准的 OHLCV DataFrame。
示例入口(example_signal_engine.py)的流程为:
- 依次获取
BTC-USDT、ETH-USDT、SOL-USDT三个标的各 300 根日线; - 用默认参数构造
SignalEngine(); - 调用
engine.generate(data_map)得到每个标的的信号序列; - 统计每个标的的做多/做空信号数量,并打印最近一次信号发生的日期。
将脚本置于agent/src/skills/ichimoku/目录下直接运行(python example_signal_engine.py),即可看到类似"=== 一目均衡表信号引擎 ==="的三标的信号统计输出。也可以在其他行情源上复用同一套逻辑——generate的输入约定非常明确:Dict[str, pd.DataFrame]映射,DataFrame 需包含open/high/low/close四列且 index 为 datetime,任何满足该约定的 OHLCV 数据(如 Vibe-Trading 的行情加载体系所提供的数据)都可直接接入。
在 Vibe-Trading 中的定位与扩展
一目均衡表技能在 Vibe-Trading 中不是孤立的指标工具,而是技术分析能力矩阵的一员。从 agent/SKILL.md 的能力清单可以看到,技术分析方向涵盖 candlestick(K线)、Elliott wave(波浪)、Ichimoku、SMC、harmonic(谐波)、chanlun(缠论)等多个学派。
更值得注意的是 swarm 面板配置 中的用法:面板内设有一位专门的Ichimoku Analyst智能体角色,其指令明确要求使用load_skill("ichimoku")加载本技能,并按五要素完成完整判读:
- 云带(Kumo):Senkou Span A = (Tenkan+Kijun)/2 前移 +26;Senkou Span B = (52周期高低点)/2 前移 +26;云带内 A 穿越 B(Kumo twist)视为潜在的市场制度切换信号;
- 转换线 / 基准线:Tenkan = (9高+9低)/2 为短期趋势,Kijun = (26高+26低)/2 为中期趋势,价格回踩 Kijun 视为支撑/阻力;
- 迟行线(Chikou):高于 26 根前的价格为多头确认,低于则为空头确认,同时观察 Chikou 与云的交叉;
- 五要素共振:价格 / Tenkan / Kijun / Chikou / 云的排列一致性;
- Ichimoku 评分:以 −5 到 +5 的数值化打分呈现方向与置信度。
此外,该面板让 Ichimoku、经典技术指标、谐波、波浪、SMC 等分析并行运行,再由信号聚合器对共识与共振进行加权计分。这与本文所讲的五线计算一脉相承:五线是"计算层",TK 交叉与三重过滤是"信号层",而 swarm 面板则把它们提升为"多智能体协作判读层"。
结语
一目均衡表的五线计算并不复杂——三条 Donchian 中线(9/26/52)、一条均值(先行带A)、一条收盘价位移线(迟行线),加上统一的前移/后移 26 周期位移,就构成了整套框架的数学基础。但真正的价值在于围绕这五条线的系统性判读:TK 交叉找时机,云带位置定方向,云带方向定趋势,迟行线做确认。Vibe-Trading 的 示例信号引擎 用不到百行纯 pandas 代码就把这套逻辑完整落地,并且通过 78 根K线的预热校验与参数化设计,保证了信号在不同市场、不同周期上的可用性。无论是想快速理解五线公式、直接复用信号引擎,还是在 swarm 中扮演 Ichimoku 分析师,本仓库中的 五线计算文档、信号系统文档、SKILL.md 与示例源码都是最直接的参考起点。
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考