TAVolume
成交量指标综合策略示例
本文档提供成交量指标(OBV、AD)的实战策略示例。
策略 1:OBV + AD 双重确认策略
策略逻辑
使用 OBV 和 AD 双重确认资金流向,提高信号可靠性。
python
def main():
while True:
records = exchange.GetRecords()
if len(records) < 50:
Sleep(1000)
continue
highs = [r['High'] for r in records]
lows = [r['Low'] for r in records]
closes = [r['Close'] for r in records]
volumes = [r['Volume'] for r in records]
# 计算成交量指标
obv = TA.OBV(closes, volumes)
ad = TA.AD(highs, lows, closes, volumes)
# OBV 和 AD 的短期趋势
obv_trend = obv[-1] - obv[-5]
ad_trend = ad[-1] - ad[-5]
# 双重确认买入
if obv_trend > 0 and ad_trend > 0:
Log("OBV + AD 双重确认资金流入")
if closes[-1] > closes[-2]:
Log("✅ 价格上涨 + 成交量支持,买入信号")
# exchange.Buy(...)
# 双重确认卖出
elif obv_trend < 0 and ad_trend < 0:
Log("OBV + AD 双重确认资金流出")
if closes[-1] < closes[-2]:
Log("❌ 价格下跌 + 成交量支持,卖出信号")
# exchange.Sell(...)
# 分歧(需要谨慎)
elif obv_trend > 0 and ad_trend < 0:
Log("⚠️ OBV 和 AD 出现分歧,观望")
Sleep(60000)策略优势
- 双重确认减少假信号
- OBV 和 AD 从不同角度验证资金流向
- 结合价格确认提高胜率
策略 2:价格 + 成交量 + 趋势综合策略
策略逻辑
结合价格趋势、成交量指标,进行全面分析。
python
def main():
while True:
records = exchange.GetRecords()
if len(records) < 100:
Sleep(1000)
continue
highs = [r['High'] for r in records]
lows = [r['Low'] for r in records]
closes = [r['Close'] for r in records]
volumes = [r['Volume'] for r in records]
# 趋势指标
sma20 = TA.SMA(closes, 20)
sma50 = TA.SMA(closes, 50)
# 成交量指标
obv = TA.OBV(closes, volumes)
ad = TA.AD(highs, lows, closes, volumes)
# 判断趋势
if sma20[-1] > sma50[-1]:
trend = "上升"
elif sma20[-1] < sma50[-1]:
trend = "下降"
else:
trend = "震荡"
# 判断成交量支持
volume_support = obv[-1] > obv[-5] and ad[-1] > ad[-5]
# 综合判断
if trend == "上升" and volume_support:
Log("✅ 上升趋势 + 成交量支持,强势,可持有或加仓")
elif trend == "上升" and not volume_support:
Log("⚠️ 上升趋势但缺乏成交量支持,谨慎,可能即将回调")
elif trend == "下降" and not volume_support:
Log("💡 下降趋势但抛压不强,可能反弹,寻找做多机会")
elif trend == "下降" and volume_support:
Log("❌ 下降趋势 + 成交量支持下跌,弱势,不宜做多")
Sleep(60000)策略优势
- 多维度分析提高决策质量
- 趋势 + 成交量结合更可靠
- 适合中长期趋势跟踪
策略 3:成交量突破确认策略
策略逻辑
使用成交量指标验证价格突破的有效性。
python
def main():
while True:
records = exchange.GetRecords()
if len(records) < 50:
Sleep(1000)
continue
highs = [r['High'] for r in records]
lows = [r['Low'] 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:])
# 计算支撑位(20 周期最低价)
support = min(lows[-20:])
# OBV 和 AD 确认
obv = TA.OBV(closes, volumes)
ad = TA.AD(highs, lows, closes, volumes)
# 向上突破阻力位
if current_price > resistance:
if obv[-1] > obv[-2] and ad[-1] > ad[-2]:
Log("✅ 价格突破阻力位且 OBV + AD 双重确认,有效突破")
# exchange.Buy(...)
else:
Log("⚠️ 价格突破但成交量未确认,可能是假突破")
# 向下突破支撑位
elif current_price < support:
if obv[-1] < obv[-2] and ad[-1] < ad[-2]:
Log("❌ 价格跌破支撑位且 OBV + AD 双重确认,有效跌破")
# exchange.Sell(...)
else:
Log("💡 价格跌破但成交量未确认,可能是假跌破")
Sleep(60000)策略优势
- 有效识别真假突破
- 减少突破失败的损失
- 提高突破交易胜率
策略 4:背离交易策略
策略逻辑
利用价格与成交量指标的背离寻找反转机会。
python
def main():
while True:
records = exchange.GetRecords()
if len(records) < 100:
Sleep(1000)
continue
highs = [r['High'] for r in records]
lows = [r['Low'] for r in records]
closes = [r['Close'] for r in records]
volumes = [r['Volume'] for r in records]
# 成交量指标
obv = TA.OBV(closes, volumes)
ad = TA.AD(highs, lows, closes, volumes)
# 辅助指标
rsi = TA.RSI(closes, 14)
# 检测顶背离
price_new_high = closes[-1] == max(closes[-20:])
obv_not_new_high = obv[-1] < max(obv[-20:])
ad_not_new_high = ad[-1] < max(ad[-20:])
if price_new_high and obv_not_new_high and ad_not_new_high:
if rsi[-1] > 70:
Log("⚠️ 三重确认顶背离:价格新高 + OBV/AD 未新高 + RSI 超买")
Log("强烈卖出信号")
# exchange.Sell(...)
# 检测底背离
price_new_low = closes[-1] == min(closes[-20:])
obv_not_new_low = obv[-1] > min(obv[-20:])
ad_not_new_low = ad[-1] > min(ad[-20:])
if price_new_low and obv_not_new_low and ad_not_new_low:
if rsi[-1] < 30:
Log("✅ 三重确认底背离:价格新低 + OBV/AD 未新低 + RSI 超卖")
Log("强烈买入信号")
# exchange.Buy(...)
Sleep(60000)策略优势
- 背离是强烈的反转信号
- 多重确认提高可靠性
- 适合逆势交易
策略 5:资金流向强度策略
策略逻辑
分析资金流入/流出的强度,判断趋势延续性。
python
def main():
while True:
records = exchange.GetRecords()
if len(records) < 100:
Sleep(1000)
continue
highs = [r['High'] for r in records]
lows = [r['Low'] for r in records]
closes = [r['Close'] for r in records]
volumes = [r['Volume'] for r in records]
# 成交量指标
ad = TA.AD(highs, lows, closes, volumes)
# 计算资金流向强度
ad_change_5 = (ad[-1] - ad[-5]) / abs(ad[-5]) if ad[-5] != 0 else 0
ad_change_20 = (ad[-1] - ad[-20]) / abs(ad[-20]) if ad[-20] != 0 else 0
# 价格动量
price_change = (closes[-1] - closes[-5]) / closes[-5]
# 强势资金流入
if ad_change_5 > 0.05 and ad_change_20 > 0.10:
if price_change > 0:
Log("✅ 强势资金流入 + 价格上涨,追涨信号")
# exchange.Buy(...)
else:
Log("💡 资金流入但价格未涨,可能即将启动")
# 强势资金流出
elif ad_change_5 < -0.05 and ad_change_20 < -0.10:
if price_change < 0:
Log("❌ 强势资金流出 + 价格下跌,追跌信号")
# exchange.Sell(...)
else:
Log("⚠️ 资金流出但价格未跌,谨慎")
# 资金流向不明确
elif abs(ad_change_5) < 0.02:
Log("观望:资金流向不明确")
Sleep(60000)策略优势
- 量化资金流向强度
- 早期发现趋势变化
- 适合短线交易
策略参数建议
通用参数
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 短期回溯 | 5 | 短期资金流向判断 |
| 中期回溯 | 10-20 | 背离检测、趋势确认 |
| 长期回溯 | 50 | 长期趋势分析 |
| 趋势均线 | 20, 50 | 判断价格趋势 |
背离检测参数
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 背离周期 | 20-50 | 寻找新高/新低的时间窗口 |
| RSI 周期 | 14 | 辅助确认超买超卖 |
| 确认周期 | 2-3 | 背离确认所需的 K 线数 |
突破确认参数
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 阻力/支撑周期 | 20-50 | 计算关键价位的周期 |
| 成交量确认 | OBV + AD | 双重确认提高可靠性 |
风险控制要点
1. 止损设置
- 突破失败时及时止损
- 背离交易设置较紧的止损
- 止损幅度:2-3% 或关键支撑/阻力位
2. 仓位管理
- 强势信号(多重确认):较大仓位
- 单一信号:较小仓位
- 分批建仓/减仓
3. 信号过滤
- 避免在震荡市场频繁交易
- 结合更大时间周期确认
- 重要支撑/阻力位附近谨慎
4. 市场环境
- 单边市场:趋势跟踪策略
- 震荡市场:背离交易策略
- 低流动性市场:成交量信号不可靠
实战技巧总结
买入时机
- ✅ OBV + AD 双重确认资金流入
- ✅ 价格突破阻力 + 成交量确认
- ✅ 底背离 + RSI 超卖
- ✅ 上升趋势 + 成交量支持
卖出时机
- ❌ OBV + AD 双重确认资金流出
- ❌ 价格跌破支撑 + 成交量确认
- ❌ 顶背离 + RSI 超买
- ❌ 下降趋势 + 成交量支持
观望时机
- ⚠️ OBV 和 AD 信号矛盾
- ⚠️ 价格突破但无成交量确认
- ⚠️ 资金流向不明确
- ⚠️ 震荡市场,无明确趋势