# 成交量指标 成交量指标通过结合交易成交量数据来分析买卖压力。成交量确认价格走势,并可能预示趋势反转。 --- ## OBV - 能量潮 能量潮是一个累积成交量指标,在上涨日增加成交量,在下跌日减少成交量。它衡量买卖压力。 ### 公式 $$OBV_t = \begin{cases} OBV_{t-1} + volume_t & \text{if } close_t > close_{t-1} \\ OBV_{t-1} - volume_t & \text{if } close_t < close_{t-1} \\ OBV_{t-1} & \text{if } close_t = close_{t-1} \end{cases}$$ ### 特性 | 属性 | 值 | |------|-----| | 输入 | OHLCV (close, volume) | | 输出 | 单个值(累积 OBV) | | 回看期 | 0(从第一个 K 线开始有效) | | 内存 | O(1) | ### API 用法 ::::{tab-set} :::{tab-item} Python ```python from techkit import OBV # Object-oriented obv = OBV() result = obv.update_ohlcv(open, high, low, close, volume) if result.valid: print(f"OBV: {result.value:.0f}") # Batch from techkit import talib_compat as ta obv_values = ta.OBV(close, volume) ``` ::: :::{tab-item} Node.js ```javascript const tk = require('techkit'); // Streaming const obv = tk.obv(); const result = obv.updateOHLCV({open, high, low, close, volume}); // Batch const values = tk.OBV(close, volume); ``` ::: :::{tab-item} C++ ```cpp #include techkit::OBV obv; techkit::OHLCV bar{open, high, low, close, volume}; auto result = obv.update(bar); ``` ::: :::{tab-item} C ```c tk_indicator obv = tk_obv_new(); tk_ohlcv bar = {open, high, low, close, volume}; tk_result r = tk_update_ohlcv(obv, &bar); tk_free(obv); ``` ::: :::: ### 交易用法 - **趋势确认**: OBV 随价格上涨 = 上升趋势确认 - **背离**: 价格创新高但 OBV 没有 = 看跌背离 - **突破**: OBV 突破通常先于价格突破 - **成交量分析**: - 上升的 OBV + 上升的价格 = 强势上升趋势 - 下降的 OBV + 下降的价格 = 强势下降趋势 - 上升的 OBV + 下降的价格 = 潜在向上反转 - 下降的 OBV + 上升的价格 = 潜在向下反转 ### 局限性 - OBV 在长期内可能累积误差 - 不考虑成交量强度(仅考虑方向) - 需结合价格行为使用 --- ## AD - 累积/派发线 累积/派发线通过考虑价格在周期范围内的收盘位置来衡量资金流量。它比 OBV 更复杂。 ### 公式 $$CLV = \frac{(close - low) - (high - close)}{high - low}$$ $$AD_t = AD_{t-1} + CLV_t \times volume_t$$ 如果 $high = low$,则 $CLV = 0$。 ### 特性 | 属性 | 值 | |------|-----| | 输入 | OHLCV (open, high, low, close, volume) | | 输出 | 单个值(累积 AD) | | 回看期 | 0(从第一个 K 线开始有效) | | 内存 | O(1) | ### API 用法 ::::{tab-set} :::{tab-item} Python ```python from techkit import AD ad = AD() result = ad.update_ohlcv(open, high, low, close, volume) if result.valid: print(f"A/D: {result.value:.0f}") ``` ::: :::{tab-item} Node.js ```javascript const ad = tk.ad(); const result = ad.updateOHLCV({open, high, low, close, volume}); ``` ::: :::{tab-item} C++ ```cpp techkit::AD ad; auto result = ad.update(bar); ``` ::: :::{tab-item} C ```c tk_indicator ad = tk_ad_new(); tk_result r = tk_update_ohlcv(ad, &bar); ``` ::: :::: ### 交易用法 - **资金流量**: 上升的 AD = 累积(买入压力) - **背离**: 价格下跌但 AD 上升 = 潜在反转 - **趋势确认**: AD 应跟随价格趋势 - **CLV 解释**: - CLV > 0: 价格在上半部分收盘(累积) - CLV < 0: 价格在下半部分收盘(派发) - CLV = 0: 价格在中间收盘 ### 比较: OBV vs AD | 方面 | OBV | AD | |------|-----|-----| | 计算 | 简单(上涨/下跌) | 按范围内位置加权 | | 敏感性 | 敏感性较低 | 敏感性较高 | | 用途 | 基本成交量趋势 | 详细资金流量 | --- ## ADOSC - 蔡金 A/D 振荡器 蔡金 A/D 振荡器是累积/派发线的快速和慢速 EMA 之间的差值。它为 A/D 线提供动量信号。 ### 公式 $$ADOSC = EMA(AD, fast) - EMA(AD, slow)$$ 其中: - $fast$ = 快速 EMA 周期(默认: 3) - $slow$ = 慢速 EMA 周期(默认: 10) ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | fast_period | int | 3 | 1-100000 | 快速 EMA 周期 | | slow_period | int | 10 | 1-100000 | 慢速 EMA 周期(必须 > fast) | ### 特性 | 属性 | 值 | |------|-----| | 输入 | OHLCV (open, high, low, close, volume) | | 输出 | 单个值(振荡器) | | 回看期 | slow_period - 1 | | 内存 | O(1) | ### API 用法 ::::{tab-set} :::{tab-item} Python ```python from techkit import ADOSC adosc = ADOSC(fast_period=3, slow_period=10) result = adosc.update_ohlcv(open, high, low, close, volume) if result.valid: print(f"A/D Oscillator: {result.value:.0f}") ``` ::: :::{tab-item} Node.js ```javascript const adosc = tk.adosc(3, 10); const result = adosc.updateOHLCV({open, high, low, close, volume}); ``` ::: :::{tab-item} C++ ```cpp techkit::ADOSC adosc(3, 10); auto result = adosc.update(bar); ``` ::: :::{tab-item} C ```c tk_indicator adosc = tk_adosc_new(3, 10); tk_result r = tk_update_ohlcv(adosc, &bar); ``` ::: :::: ### 交易用法 - **动量**: 正 ADOSC = 累积增加 - **交叉**: ADOSC 穿越零线 = 动量转换 - **背离**: ADOSC 与价格背离 = 反转信号 - **信号解释**: - ADOSC > 0: 累积动量 - ADOSC < 0: 派发动量 - ADOSC 上升: 买入压力增加 - ADOSC 下降: 卖出压力增加 ### 常用周期 | 快速 | 慢速 | 用途 | |------|------|------| | 3 | 10 | 标准(最常用) | | 5 | 15 | 较慢,敏感性较低 | | 2 | 8 | 较快,敏感性较高 | --- ## MFI - 资金流量指标 资金流量指标是一个成交量加权的 RSI,衡量买卖压力。范围从 0 到 100。 ### 公式 $$TP = \frac{high + low + close}{3}$$ $$MF = TP \times volume$$ $$+MF = \sum MF \text{ where } TP > TP_{prev}$$ $$-MF = \sum MF \text{ where } TP < TP_{prev}$$ $$MFI = 100 - \frac{100}{1 + \frac{+MF}{-MF}}$$ ### 参数 | 参数 | 类型 | 默认值 | 范围 | 描述 | |------|------|--------|------|------| | period | int | 14 | 1-100000 | 平均周期数 | ### 特性 | 属性 | 值 | |------|-----| | 输入 | OHLCV (open, high, low, close, volume) | | 输出 | 单个值(0-100) | | 回看期 | period | | 内存 | O(period) | ### API 用法 ::::{tab-set} :::{tab-item} Python ```python from techkit import MFI mfi = MFI(period=14) result = mfi.update_ohlcv(open, high, low, close, volume) if result.valid: if result.value > 80: print("Overbought") elif result.value < 20: print("Oversold") ``` ::: :::{tab-item} Node.js ```javascript const mfi = tk.mfi(14); const result = mfi.updateOHLCV({open, high, low, close, volume}); ``` ::: :::{tab-item} C++ ```cpp techkit::MFI mfi(14); auto result = mfi.update(bar); ``` ::: :::{tab-item} C ```c tk_indicator mfi = tk_mfi_new(14); tk_result r = tk_update_ohlcv(mfi, &bar); ``` ::: :::: ### 交易用法 - **超买/超卖**: - MFI > 80: 超买(潜在卖出) - MFI < 20: 超卖(潜在买入) - **背离**: MFI 与价格背离 = 反转信号 - **成交量确认**: MFI 通过成交量加权确认 RSI - **与 RSI 比较**: - RSI: 基于价格的动量 - MFI: 成交量加权的动量 - 结合使用以获得更强的信号 ### 常用周期 | 周期 | 用途 | |------|------| | 14 | 标准(最常用) | | 21 | 长期 | | 9 | 短期,更敏感 | --- ## 成交量指标比较 | 指标 | 计算 | 范围 | 最佳用途 | |------|------|------|----------| | OBV | 累积成交量 | 无界 | 基本成交量趋势 | | AD | 加权累积 | 无界 | 资金流量分析 | | ADOSC | A/D 动量 | 无界 | 动量信号 | | MFI | 成交量加权 RSI | 0-100 | 超买/超卖 | --- ## 相关指标 - **Volume Price Trend (VPT)**: 类似于 OBV,但使用百分比变化 - **Volume Rate of Change**: 衡量成交量动量 - **Price-Volume Trend**: 结合价格和成交量变化