作者: 王宁 原始语言: 中文(简体) 市场聚焦: A股(上海和深圳证券交易所) 交易风格: 基于K线形态识别的激进动量/波段交易
王宁的核心论点是:个股的重大牛市行情几乎总是由一根或多根"暴力"K线所预示——异常大实体的K线伴随着果断的成交量放大。这些K线代表着供需平衡的根本性转变,强势资金正在积极吸筹并压倒卖方。
该理念建立在三大支柱之上:
该方法刻意偏好高胜率、短持仓周期的交易机会(通常3-15个交易日),而非低频率、高确信度的持仓。目标是抓住行情的爆发阶段,而非持仓度过整理期。
当一根K线同时满足以下几个量化标准时,即被视为"暴力"K线(暴力K线):
| 指标 | 最低阈值 | 强信号 |
|---|---|---|
| 日线实体大小(收盘价-开盘价范围) | >= 5% | >= 7% |
| 实体占总振幅比 | >= 60% | >= 75% |
| 相对实体大小 vs. 20日平均实体 | >= 2.0倍 | >= 3.0倍 |
暴力K线必须具有相对于影线的主导实体。较长的上影线或下影线会削弱信号,因为它们表示犹豫不决而非坚定信念。
整个交易日维持的开盘跳空缺口会放大暴力K线信号。>= 2%且全天未被回补的跳空表明买方极度紧迫。
在A股中,每日涨跌幅限制为+10%(创业板/科创板为+20%)。涨停板是终极暴力K线:
单日涨幅 >= 5%,实体饱满且影线极小的K线:
看涨吞没形态中,当前K线的实体完全覆盖前一根K线的实体:
三根K线组合形态:
跳空高开引发暴力K线,且跳空缺口未被回补:
成交量是暴力K线的"灵魂"——没有成交量确认,即使最令人印象深刻的K线也值得怀疑。
最低确认: 成交量 >= 20日均量的1.5倍
标准确认: 成交量 >= 20日均量的2.0倍
强确认: 成交量 >= 20日均量的3.0倍
极端(需谨慎):成交量 >= 20日均量的5.0倍
成交量柱必须在图表上视觉突出。王宁强调,如果你需要仔细辨认成交量是否高于均值,那就不是暴力K线交易机会。
在初始暴力K线之后,理想的跟进显示:
在错误的均线环境中出现的暴力K线是陷阱,而非信号。
理想环境具备:
暴力K线出现时,股价应在20日均线10%范围内。已经远离均线20-30%的股票产生的暴力K线更可能是见顶放量。
最高概率的暴力K线出现在股票突破明确的整理底部时:
| 阻力类型 | 描述 | 突破意义 |
|---|---|---|
| 水平整理顶部 | 被触及2次以上的平台价格上限 | 高 |
| 前期波段高点 | 前次反弹的高点 | 高 |
| 下降趋势线 | 下降通道的上边界 | 中 |
| 整数关口 | 心理价位(10元、20元、50元) | 低-中 |
| 均线阻力 | 60日、120日或250日均线 | 中-高 |
对于实时盯盘的交易者:
function decide_entry(candle, next_day_open, ma5):
if candle.is_violent() and candle.volume_confirmed():
if next_day_open >= candle.close * 0.97:
if next_day_open <= candle.close * 1.03:
return ENTER_AT_OPEN // 开盘入场
else:
return WAIT_FOR_15MIN_PULLBACK // 等待15分钟回调
else:
return SKIP_TRADE // 放弃交易
return NO_SIGNAL // 无信号
王宁提倡基于信号强度的分级投入模型:
| 信号强度 | 仓位比例 | 满足条件 |
|---|---|---|
| 最大仓位 | 资金的30% | 暴力K线 + 成交量 + 均线排列 + 底部突破 + 板块支撑 |
| 标准仓位 | 资金的20% | 暴力K线 + 成交量 + 均线排列 |
| 最小仓位 | 资金的10% | 仅暴力K线 + 成交量 |
function calculate_stop(candle, entry_price):
hard_stop = candle.low
soft_stop = (candle.open + candle.close) / 2
max_loss_pct = (entry_price - hard_stop) / entry_price
if max_loss_pct > 0.08:
return SKIP_TRADE // 风险太大
return hard_stop, soft_stop
= 20%获利后,以5日均线作为移动止损
= 30%获利后,以10日均线作为移动止损
在以下情况立即退出全部仓位:
虽然该方法主要是技术性的,但王宁承认A股受政策影响很大。重大政府政策公告、监管变化或板块特定新闻可以覆盖技术信号。
筛选条件:
body_pct >= 5%
AND body_to_range_ratio >= 0.6
AND volume >= 1.5 * sma(volume, 20)
AND close > sma(close, 20)
AND sma(close, 20) slope >= 0
AND upper_shadow <= body * 0.33
在长期上涨趋势末期出现的暴力K线(股票已从底部上涨50%以上),更可能是见顶放量而非延续信号。避免在已经大幅拉升后出现的暴力K线。
由一次性新闻事件(业绩惊喜、重组公告)引起的暴力K线,如果没有技术底部支撑,往往在5-10日内完全回调。
暴力K线上的极端成交量(>= 5倍均量)可能表示派发——主力资金在散户狂热中卖出。如果成交量极端且股票在第二日未能继续上涨,这很可能是一个陷阱。
如果跳空暴力K线在3日内回补其跳空缺口,则突破已经失败。立即退出。
# ============================================================
# 暴力K线擒大牛 — 完整流程
# ============================================================
def screen_violent_candles(universe, date):
"""在A股全市场中筛选暴力K线信号。"""
candidates = []
for stock in universe:
candle = stock.get_daily_candle(date)
hist = stock.get_history(date, lookback=60)
# --- 步骤1:K线实体资格认定 ---
body = abs(candle.close - candle.open)
total_range = candle.high - candle.low
body_pct = body / candle.open
if body_pct < 0.05:
continue
if total_range == 0 or body / total_range < 0.60:
continue
# --- 步骤2:影线约束 ---
if candle.close > candle.open: # 阳线
upper_shadow = candle.high - candle.close
if upper_shadow > body * 0.33:
continue
else:
continue # 非看涨暴力K线
# --- 步骤3:成交量确认 ---
avg_vol_20 = mean(hist.volume[-20:])
if candle.volume < 1.5 * avg_vol_20:
continue
# --- 步骤4:均线环境 ---
ma20 = mean(hist.close[-20:])
ma60 = mean(hist.close[-60:])
if candle.close < ma20:
continue
ma20_prev = mean(hist.close[-21:-1])
if ma20 < ma20_prev: # 20日均线下行
continue
# --- 步骤5:偏离度检查 ---
if candle.close > ma20 * 1.20:
continue # 偏离过大,可能是见顶放量
# --- 步骤6:信号评分 ---
score = 0
score += 1 if body_pct >= 0.07 else 0
score += 1 if candle.volume >= 2.0 * avg_vol_20 else 0
score += 1 if candle.close > ma60 else 0
score += 1 if is_base_breakout(hist, candle) else 0
score += 1 if sector_is_strong(stock.sector, date) else 0
candidates.append({
'stock': stock,
'candle': candle,
'score': score,
'body_pct': body_pct,
'volume_ratio': candle.volume / avg_vol_20
})
# 按评分降序排列
candidates.sort(key=lambda x: x['score'], reverse=True)
return candidates[:10] # 前10名
def execute_trade(candidate, portfolio, next_day_data):
"""对合格候选股执行入场逻辑。"""
candle = candidate['candle']
score = candidate['score']
stock = candidate['stock']
# 确定仓位大小
if score >= 4:
size_pct = 0.30
elif score >= 3:
size_pct = 0.20
else:
size_pct = 0.10
# 检查组合约束
if portfolio.open_positions >= 3:
return None
if portfolio.invested_pct + size_pct > 0.80:
size_pct = 0.80 - portfolio.invested_pct
# 入场价格逻辑
open_price = next_day_data.open
gap_pct = (open_price - candle.close) / candle.close
if gap_pct < -0.03:
return None # 跳空低开太多,放弃
elif gap_pct > 0.03:
entry_price = wait_for_pullback(next_day_data, minutes=15)
else:
entry_price = open_price
if entry_price is None:
return None
# 计算止损
hard_stop = candle.low
max_risk = (entry_price - hard_stop) / entry_price
if max_risk > 0.08:
return None # 风险超过8%,放弃
# 下单交易
shares = int((portfolio.capital * size_pct) / entry_price)
return Trade(
stock=stock,
entry_price=entry_price,
shares=shares,
hard_stop=hard_stop,
soft_stop=(candle.open + candle.close) / 2,
time_stop_days=5,
targets=[1.10, 1.20, None] # 最后一部分使用移动止损
)
def manage_open_position(trade, current_day):
"""持仓的每日管理。"""
gain_pct = (current_day.close - trade.entry_price) / trade.entry_price
# 时间止损
if trade.days_held >= trade.time_stop_days:
if current_day.high <= trade.entry_price * 1.02:
return EXIT_FULL, "时间止损 — 无新高"
# 暴力阴线退出
body = abs(current_day.close - current_day.open)
if current_day.close < current_day.open and body / current_day.open >= 0.05:
if current_day.volume >= 1.5 * trade.stock.avg_volume_20:
return EXIT_FULL, "暴力阴线"
# 移动止损管理
if gain_pct >= 0.30:
trade.trailing_stop = max(trade.trailing_stop, current_day.ma10)
elif gain_pct >= 0.20:
trade.trailing_stop = max(trade.trailing_stop, current_day.ma5)
elif gain_pct >= 0.10:
trade.trailing_stop = max(trade.trailing_stop, trade.entry_price)
if current_day.close < trade.trailing_stop:
return EXIT_FULL, "移动止损触发"
# 利润目标(分批退出)
if gain_pct >= 0.15 and trade.partial_exits == 0:
trade.partial_exits = 1
return EXIT_THIRD, "达到第一目标"
if gain_pct >= 0.25 and trade.partial_exits == 1:
trade.partial_exits = 2
return EXIT_THIRD, "达到第二目标"
return HOLD, None
"市场通过K线来说话。暴力K线不是低语——而是呐喊。你的工作是在市场呐喊时倾听。"
"成交量是K线的灵魂。没有成交量的大实体是谎言;有成交量的大实体是意图的告白。"
"不要追一只已经从底部涨了50%的股票。启动行情的暴力K线是机会;结束行情的暴力K线是陷阱。"
"三个条件必须对齐:K线必须暴力,成交量必须确认,趋势必须支持。三者满其二是不够的。"
"速度就是一切。暴力K线今天出现;到明天机会已经少了一半。到第三天,你就是最后一个买家。"
"最安全的暴力K线是从安静底部突破的那一根。寂静之后的暴力——这就是大牛股的模式。"
"单笔暴力K线交易的风险永远不要超过8%。这种模式有很高的胜率,但没有任何模式是万无一失的。生存是第一位的。"
"当市场指数生病时,即使最健康的股票也会感冒。总是先检查将军,然后再带你的士兵上战场。"
本规范综合了王宁《暴力K线擒大牛》的核心方法论,以可操作的实施指南形式构建,面向系统化交易者捕捉A股动量交易机会。