TAKline
TA.CDLENGULFING() - 吞没形态
Engulfing Pattern 吞没形态,第二根K线实体完全包含第一根K线实体,是常见的反转信号。
语法
python
TA.CDLENGULFING(opens, highs, lows, closes)参数
| 参数 | 类型 | 说明 |
|---|---|---|
| opens | array | 开盘价序列 |
| highs | array | 最高价序列 |
| lows | array | 最低价序列 |
| closes | array | 收盘价序列 |
返回值
返回整数数组:
- 100:看涨吞没(底部反转)
- -100:看跌吞没(顶部反转)
- 0:未识别到
形态特征
看涨吞没(底部)
- 第一根:阴线(下跌)
- 第二根:阳线,完全吞没第一根
- 第二根开盘 < 第一根收盘
- 第二根收盘 > 第一根开盘
看跌吞没(顶部)
- 第一根:阳线(上涨)
- 第二根:阴线,完全吞没第一根
- 第二根开盘 > 第一根收盘
- 第二根收盘 < 第一根开盘
识别标准
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}")信号解读
位置决定方向
-
下降趋势底部 + 看涨吞没
- 反转向上
- 可靠性高
- 建议做多
-
上升趋势顶部 + 看跌吞没
- 反转向下
- 可靠性高
- 建议做空
-
横盘震荡 + 吞没
- 可能突破
- 谨慎对待
- 等待确认
增强信号
跳空吞没(最强)
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分钟 | ⭐⭐ | 很小 | 不推荐 |
注意事项
- 位置最重要:必须在趋势末端
- 成交量确认:放量更可靠
- 完全吞没:必须实体完全包含
- 等待确认:第三根K线确认方向
- 假信号:横盘中频繁出现,可靠性低
常见错误
python
# ❌ 错误:不看位置盲目交易
if pattern[-1] != 0:
trade() # 错误!
# ✅ 正确:结合趋势和位置
if pattern[-1] == 100:
if in_downtrend and at_support:
buy() # 正确!实战技巧
- 分批入场:形态出现买50%,确认后加50%
- 移动止损:盈利后将止损移至入场价
- 部分止盈:第一目标平50%锁定利润
- 趋势过滤:仅在明确趋势末端交易
- 成交量确认:无放量不交易
相关形态
- 刺透形态 - CDLPIERCING(看涨吞没的弱化版)
- 乌云盖顶 - CDLDARKCLOUDCOVER(看跌吞没的弱化版)
- 孕线 - CDLHARAMI(吞没的反向,小包大)
- 吞没形态原文 - 已有完整文档