Pharos
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. 市场环境

  • 单边市场:趋势跟踪策略
  • 震荡市场:背离交易策略
  • 低流动性市场:成交量信号不可靠

实战技巧总结

买入时机

  1. ✅ OBV + AD 双重确认资金流入
  2. ✅ 价格突破阻力 + 成交量确认
  3. ✅ 底背离 + RSI 超卖
  4. ✅ 上升趋势 + 成交量支持

卖出时机

  1. ❌ OBV + AD 双重确认资金流出
  2. ❌ 价格跌破支撑 + 成交量确认
  3. ❌ 顶背离 + RSI 超买
  4. ❌ 下降趋势 + 成交量支持

观望时机

  1. ⚠️ OBV 和 AD 信号矛盾
  2. ⚠️ 价格突破但无成交量确认
  3. ⚠️ 资金流向不明确
  4. ⚠️ 震荡市场,无明确趋势

返回成交量指标目录 | 返回 TA 指标总目录