TAVolume
TA.OBV() - 能量潮
能量潮 (On Balance Volume)
通过累积成交量的方向性变化来衡量买卖压力。
语法
python
TA.OBV(close, volume)参数
| 参数名 | 类型 | 必选 | 默认值 | 说明 |
|---|---|---|---|---|
| close | any | 否 | - | 收盘价数组 |
| volume | any | 否 | - | 成交量数组 |
返回值
返回 OBV 值数组,与输入数组长度相同。
计算方法
能量潮通过累积成交量的方向性变化来计算:
- 当日收盘价 > 昨日收盘价:OBV += 当日成交量
- 当日收盘价 < 昨日收盘价:OBV -= 当日成交量
- 当日收盘价 = 昨日收盘价:OBV 不变
OBV 的绝对值不重要,重要的是其趋势方向。
信号解读
基本信号
- OBV 上升 + 价格上升:健康的上升趋势,买盘强劲
- OBV 下降 + 价格下降:健康的下降趋势,卖盘强劲
- 价格上升 + OBV 下降:顶背离,可能见顶
- 价格下降 + OBV 上升:底背离,可能见底
趋势确认
- OBV 创新高确认上升趋势
- OBV 创新低确认下降趋势
- OBV 突破均线显示趋势加强
基础示例
价量关系判断
python
def main():
while True:
records = exchange.GetRecords()
if len(records) < 30:
Sleep(1000)
continue
closes = [r['Close'] for r in records]
volumes = [r['Volume'] for r in records]
obv = TA.OBV(closes, volumes)
# 价量关系判断
if obv[-1] > obv[-2] and closes[-1] > closes[-2]:
Log("价量齐升,强势信号")
elif obv[-1] < obv[-2] and closes[-1] < closes[-2]:
Log("价量齐跌,弱势信号")
elif obv[-1] < obv[-2] and closes[-1] > closes[-2]:
Log("价涨量跌,背离,可能见顶")
elif obv[-1] > obv[-2] and closes[-1] < closes[-2]:
Log("价跌量涨,背离,可能见底")
Sleep(60000)高级应用
OBV 趋势确认策略
python
def main():
while True:
records = exchange.GetRecords()
if len(records) < 50:
Sleep(1000)
continue
closes = [r['Close'] for r in records]
volumes = [r['Volume'] for r in records]
obv = TA.OBV(closes, volumes)
# 计算 OBV 的移动平均
obv_sma = TA.SMA(obv, 20)
# OBV 突破其均线
if obv[-1] > obv_sma[-1] and obv[-2] <= obv_sma[-2]:
Log("OBV 突破均线,成交量支持上涨,买入信号")
# 可以考虑买入
elif obv[-1] < obv_sma[-1] and obv[-2] >= obv_sma[-2]:
Log("OBV 跌破均线,成交量支持下跌,卖出信号")
# 可以考虑卖出
Sleep(60000)突破有效性验证
python
def main():
while True:
records = exchange.GetRecords()
if len(records) < 50:
Sleep(1000)
continue
highs = [r['High'] for r in records]
closes = [r['Close'] for r in records]
volumes = [r['Volume'] for r in records]
current_price = closes[-1]
# 计算阻力位(20 周期最高价)
resistance = max(highs[-20:])
# OBV 确认
obv = TA.OBV(closes, volumes)
# 向上突破阻力位
if current_price > resistance and obv[-1] > obv[-2]:
Log("价格突破阻力位且 OBV 上升,有效突破")
# exchange.Buy(...)
# 假突破(价格突破但 OBV 未确认)
elif current_price > resistance and obv[-1] < obv[-2]:
Log("价格突破但 OBV 未确认,可能是假突破,观望")
Sleep(60000)OBV 背离检测
python
def main():
while True:
records = exchange.GetRecords()
if len(records) < 100:
Sleep(1000)
continue
closes = [r['Close'] for r in records]
volumes = [r['Volume'] for r in records]
obv = TA.OBV(closes, volumes)
# 检测顶背离
# 价格创新高但 OBV 未创新高
price_new_high = closes[-1] == max(closes[-20:])
obv_new_high = obv[-1] == max(obv[-20:])
if price_new_high and not obv_new_high:
Log("⚠️ 顶背离:价格创新高,但 OBV 未创新高,警惕回调")
# 检测底背离
# 价格创新低但 OBV 未创新低
price_new_low = closes[-1] == min(closes[-20:])
obv_new_low = obv[-1] == min(obv[-20:])
if price_new_low and not obv_new_low:
Log("✅ 底背离:价格创新低,但 OBV 未创新低,可能反弹")
Sleep(60000)参数优化建议
OBV 本身无参数,但可以配合其他指标优化:
| 配合指标 | 参数建议 | 说明 |
|---|---|---|
| SMA | 10-20 周期 | OBV 的均线,判断趋势 |
| EMA | 12 周期 | 更快反应 OBV 变化 |
| 回溯周期 | 20-50 | 检测背离的时间窗口 |
与其他指标配合
OBV + 移动平均线
python
obv = TA.OBV(closes, volumes)
obv_ma = TA.SMA(obv, 20)
# OBV 在均线上方 = 上升趋势
if obv[-1] > obv_ma[-1]:
Log("OBV 趋势向上")OBV + AD 双重确认
python
obv = TA.OBV(closes, volumes)
ad = TA.AD(highs, lows, closes, volumes)
obv_trend = obv[-1] - obv[-5]
ad_trend = ad[-1] - ad[-5]
# 双重确认资金流入
if obv_trend > 0 and ad_trend > 0:
Log("OBV + AD 双重确认资金流入")OBV + 趋势指标
python
obv = TA.OBV(closes, volumes)
sma20 = TA.SMA(closes, 20)
sma50 = TA.SMA(closes, 50)
# 上升趋势 + OBV 支持
if sma20[-1] > sma50[-1] and obv[-1] > obv[-5]:
Log("趋势向上且有成交量支持")注意事项
- 相对值重要:OBV 的绝对数值无意义,关注其趋势方向
- 背离信号:价格与 OBV 的背离是重要的反转预警
- 时间周期:OBV 在较长周期(日线、周线)更可靠
- 配合使用:OBV 应与价格走势、其他指标结合使用
- 假突破识别:价格突破但 OBV 未确认,通常是假突破
- 单边市场:在单边上涨/下跌市场,OBV 会持续同向累积
- 震荡市场:在震荡市场,OBV 信号可能不明显
相关指标
- AD - 累积/派发线 - 考虑价格位置的成交量指标
- MFI - 资金流量指标 - 结合价格和成交量的动量指标
- CMF - 蔡金资金流 - 另一个资金流量指标
实战要点
买入信号
✅ OBV 突破均线 + 价格上涨 ✅ 底背离出现(价跌量涨) ✅ OBV 创新高确认趋势
卖出信号
❌ OBV 跌破均线 + 价格下跌 ❌ 顶背离出现(价涨量跌) ❌ OBV 创新低确认趋势
风险控制
- 背离信号需要价格确认才能交易
- 结合其他指标(RSI、MACD)综合判断
- 在重要支撑/阻力位附近关注 OBV 表现