Pharos
TAKline

TA.CDLENGULFING() - 吞没形态

Engulfing Pattern 吞没形态,第二根K线实体完全包含第一根K线实体,是常见的反转信号。

返回K线形态目录


语法

python
TA.CDLENGULFING(opens, highs, lows, closes)

参数

参数类型说明
opensarray开盘价序列
highsarray最高价序列
lowsarray最低价序列
closesarray收盘价序列

返回值

返回整数数组:

  • 100:看涨吞没(底部反转)
  • -100:看跌吞没(顶部反转)
  • 0:未识别到

形态特征

看涨吞没(底部)

  1. 第一根:阴线(下跌)
  2. 第二根:阳线,完全吞没第一根
  3. 第二根开盘 < 第一根收盘
  4. 第二根收盘 > 第一根开盘

看跌吞没(顶部)

  1. 第一根:阳线(上涨)
  2. 第二根:阴线,完全吞没第一根
  3. 第二根开盘 > 第一根收盘
  4. 第二根收盘 < 第一根开盘

识别标准

python
# 看涨吞没
Close[-2] < Open[-2]  # 第一根阴线
Close[-1] > Open[-1]  # 第二根阳线
Open[-1] < Close[-2]  # 开盘低于前收
Close[-1] > Open[-2]  # 收盘高于前开

# 看跌吞没
Close[-2] > Open[-2]  # 第一根阳线
Close[-1] < Open[-1]  # 第二根阴线
Open[-1] > Close[-2]  # 开盘高于前收
Close[-1] < Open[-2]  # 收盘低于前开

信号强度

特征强度说明
完全吞没⭐⭐⭐⭐实体完全包含
跳空吞没⭐⭐⭐⭐⭐有缺口更强
放量吞没⭐⭐⭐⭐⭐成交量放大
趋势末端⭐⭐⭐⭐⭐反转可能大

基础示例

python
def engulfing_detection():
    records = exchange.GetRecords()
    if len(records) < 20:
        return
    
    opens = [r['Open'] for r in records]
    highs = [r['High'] for r in records]
    lows = [r['Low'] for r in records]
    closes = [r['Close'] for r in records]
    
    pattern = TA.CDLENGULFING(opens, highs, lows, closes)
    
    if pattern[-1] == 100:
        Log("✅ 看涨吞没形态")
        
        # 确认在低位
        rsi = TA.RSI(closes, 14)
        if rsi[-2] < 35:
            Log("低位看涨吞没 → 做多")
            exchange.Buy(-1, 0.8)
    
    elif pattern[-1] == -100:
        Log("⚠️ 看跌吞没形态")
        
        # 确认在高位
        rsi = TA.RSI(closes, 14)
        if rsi[-2] > 65:
            Log("高位看跌吞没 → 做空")
            exchange.Sell(-1, 0.8)

高级应用

吞没形态趋势反转策略

python
def engulfing_reversal_strategy():
    records = exchange.GetRecords()
    opens = [r['Open'] for r in records]
    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]
    
    pattern = TA.CDLENGULFING(opens, highs, lows, closes)
    sma20 = TA.SMA(closes, 20)
    atr = TA.ATR(records, 14)
    
    # 看涨吞没
    if pattern[-1] == 100:
        # 确认下降趋势
        in_downtrend = closes[-3] < sma20[-3]
        
        # 检查成交量
        avg_vol = sum(volumes[-10:-1]) / 9
        volume_confirm = volumes[-1] > avg_vol * 1.2
        
        if in_downtrend and volume_confirm:
            Log("下降趋势中出现放量看涨吞没")
            
            entry = closes[-1]
            stop_loss = lows[-1] - 0.5 * atr[-1]
            target = entry + (entry - stop_loss) * 2
            
            exchange.Buy(-1, 1)
            Log(f"做多 - 入场:{entry:.2f} 止损:{stop_loss:.2f} 目标:{target:.2f}")
    
    # 看跌吞没
    elif pattern[-1] == -100:
        # 确认上升趋势
        in_uptrend = closes[-3] > sma20[-3]
        
        # 检查成交量
        avg_vol = sum(volumes[-10:-1]) / 9
        volume_confirm = volumes[-1] > avg_vol * 1.2
        
        if in_uptrend and volume_confirm:
            Log("上升趋势中出现放量看跌吞没")
            
            entry = closes[-1]
            stop_loss = highs[-1] + 0.5 * atr[-1]
            target = entry - (stop_loss - entry) * 2
            
            exchange.Sell(-1, 1)
            Log(f"做空 - 入场:{entry:.2f} 止损:{stop_loss:.2f} 目标:{target:.2f}")

吞没 + 支撑阻力

python
def engulfing_support_resistance():
    records = exchange.GetRecords()
    opens = [r['Open'] for r in records]
    highs = [r['High'] for r in records]
    lows = [r['Low'] for r in records]
    closes = [r['Close'] for r in records]
    
    pattern = TA.CDLENGULFING(opens, highs, lows, closes)
    
    # 计算支撑阻力
    resistance = TA.MAX(highs[-50:-2], 48)[-1]
    support = TA.MIN(lows[-50:-2], 48)[-1]
    
    # 看涨吞没在支撑位
    if pattern[-1] == 100:
        near_support = abs(lows[-2] - support) / support < 0.02  # 2%范围内
        
        if near_support:
            Log("支撑位看涨吞没 → 强烈看涨")
            exchange.Buy(-1, 1.2)  # 加大仓位
            
            atr = TA.ATR(records, 14)
            stop = support - atr[-1]
            Log(f"止损设在支撑下方: {stop:.2f}")
    
    # 看跌吞没在阻力位
    elif pattern[-1] == -100:
        near_resistance = abs(highs[-2] - resistance) / resistance < 0.02
        
        if near_resistance:
            Log("阻力位看跌吞没 → 强烈看跌")
            exchange.Sell(-1, 1.2)
            
            atr = TA.ATR(records, 14)
            stop = resistance + atr[-1]
            Log(f"止损设在阻力上方: {stop:.2f}")

信号解读

位置决定方向

  1. 下降趋势底部 + 看涨吞没

    • 反转向上
    • 可靠性高
    • 建议做多
  2. 上升趋势顶部 + 看跌吞没

    • 反转向下
    • 可靠性高
    • 建议做空
  3. 横盘震荡 + 吞没

    • 可能突破
    • 谨慎对待
    • 等待确认

增强信号

跳空吞没(最强)

python
# 看涨跳空吞没
if opens[-1] < closes[-2]:  # 向下跳空开盘
    if closes[-1] > opens[-2]:  # 吞没
        Log("跳空看涨吞没 - 极强信号")

# 看跌跳空吞没
if opens[-1] > closes[-2]:  # 向上跳空开盘
    if closes[-1] < opens[-2]:  # 吞没
        Log("跳空看跌吞没 - 极强信号")

多重吞没

python
# 吞没不止一根K线
body_size = abs(closes[-1] - opens[-1])
prev_body = abs(closes[-2] - opens[-2])

if body_size > prev_body * 2:
    Log("大幅吞没 - 信号增强")

确认条件

必要条件

  • ✅ 第二根完全吞没第一根实体
  • ✅ 两根K线颜色相反
  • ✅ 出现在趋势末端

增强条件

  • 🔥 成交量放大(>1.5倍均量)
  • 🔥 出现在支撑/阻力位
  • 🔥 配合RSI超买超卖
  • 🔥 第三根K线继续同方向

止损止盈

python
def engulfing_risk_management():
    records = exchange.GetRecords()
    opens = [r['Open'] for r in records]
    highs = [r['High'] for r in records]
    lows = [r['Low'] for r in records]
    closes = [r['Close'] for r in records]
    
    pattern = TA.CDLENGULFING(opens, highs, lows, closes)
    atr = TA.ATR(records, 14)
    
    if pattern[-1] == 100:  # 看涨
        entry = closes[-1]
        stop = lows[-1] - 0.5 * atr[-1]  # 吞没K线低点下方
        risk = entry - stop
        
        target_1 = entry + risk * 1.5  # R:R = 1:1.5
        target_2 = entry + risk * 3    # R:R = 1:3
        
        Log(f"看涨吞没 - 入场:{entry:.2f}")
        Log(f"止损:{stop:.2f} (风险:{risk:.2f})")
        Log(f"目标1:{target_1:.2f}, 目标2:{target_2:.2f}")
    
    elif pattern[-1] == -100:  # 看跌
        entry = closes[-1]
        stop = highs[-1] + 0.5 * atr[-1]  # 吞没K线高点上方
        risk = stop - entry
        
        target_1 = entry - risk * 1.5
        target_2 = entry - risk * 3
        
        Log(f"看跌吞没 - 入场:{entry:.2f}")
        Log(f"止损:{stop:.2f} (风险:{risk:.2f})")
        Log(f"目标1:{target_1:.2f}, 目标2:{target_2:.2f}")

参数优化

时间周期

周期可靠性反转幅度建议
日线⭐⭐⭐⭐⭐最佳
4小时⭐⭐⭐⭐较好
1小时⭐⭐⭐需确认
15分钟⭐⭐很小不推荐

注意事项

  1. 位置最重要:必须在趋势末端
  2. 成交量确认:放量更可靠
  3. 完全吞没:必须实体完全包含
  4. 等待确认:第三根K线确认方向
  5. 假信号:横盘中频繁出现,可靠性低

常见错误

python
# ❌ 错误:不看位置盲目交易
if pattern[-1] != 0:
    trade()  # 错误!

# ✅ 正确:结合趋势和位置
if pattern[-1] == 100:
    if in_downtrend and at_support:
        buy()  # 正确!

实战技巧

  1. 分批入场:形态出现买50%,确认后加50%
  2. 移动止损:盈利后将止损移至入场价
  3. 部分止盈:第一目标平50%锁定利润
  4. 趋势过滤:仅在明确趋势末端交易
  5. 成交量确认:无放量不交易

相关形态


返回K线形态目录 | 返回 TA 指标总目录