量价分析完全指南 — 完整实施规范

基于 Anna Coulling,《量价分析完全指南》(2012)


目录

  1. 概述
  2. 威科夫方法基础
  3. 量价关系 — 核心框架
  4. 努力与结果 — 主导原则
  5. 吸筹检测
  6. 派发检测
  7. 高潮成交量
  8. 测试 — 确认供需关系
  9. 弹簧与上冲
  10. 支撑与阻力处的成交量
  11. 量价分析与K线分析的结合
  12. 跨时间周期的成交量
  13. 常见错误
  14. 实施伪代码
  15. 核心语录

1. 概述

Anna Coulling是一位交易员和教育者,花了数十年研究成交量与价格之间的关系。她的工作主要借鉴了Richard Wyckoff(1873-1934)的基础性见解——技术分析的早期巨匠之一,以及Tom Williams及其成交量价差分析(VSA)方法论的后续贡献。

《量价分析完全指南》(2012)建立在一个看似简单的前提之上:成交量是市场中唯一的领先指标。价格告诉你发生了什么;成交量告诉你为什么。成交量揭示了市场主导参与者——机构投资者、做市商和专业交易商——的活动,通过正确解读成交量,交易者可以与这些主导力量保持一致,而非与之对抗。

本书的理念拒绝大多数技术分析的复杂性,转而采用一种精简的方法:两个变量(成交量和价格)、它们之间的关系以及这种关系发生的背景。没有振荡器,没有均线交叉,没有斐波那契——只有成交量和价格,逐根K线分析。

1.1 成交量为何重要

成交量提供了单独价格无法提供的信息:

仅有价格告诉你 成交量+价格告诉你
市场上涨了 市场在强劲参与下上涨——走势是真实的
市场上涨了 市场在弱势成交量下上涨——走势值得怀疑
市场下跌了 市场在恐慌性抛售中下跌——衰竭即将到来
市场下跌了 市场在轻量成交量下下跌——只是正常回调
支撑位被测试 支撑位在低成交量下被测试——需求压倒供给,支撑有效
阻力位被突破 阻力位在高成交量下被突破——真实突破

1.2 核心公理

Coulling的整个框架建立在一个公理之上:成交量验证价格。每一个价格运动都必须由相应的成交量来确认才值得信任。没有成交量确认的价格运动是一种欺骗——是内部人士设置的陷阱,诱使散户交易者站在市场的错误一边。


2. 威科夫方法基础

2.1 Richard Wyckoff的三大定律

Coulling在Wyckoff的三个基本市场定律基础上展开论述:

定律一:供需定律。 当需求超过供给时价格上涨,当供给超过需求时价格下跌。成交量揭示哪种力量占主导。上涨中的高成交量意味着需求强劲。下跌中的高成交量意味着供给压倒性。

定律二:因果定律。 每一个重大价格运动(结果)都需要一个准备期(原因)。吸筹是原因;随后的上涨是结果。派发是原因;随后的下跌是结果。原因的规模(吸筹或派发的持续时间和成交量)决定了结果的规模(随后趋势的幅度)。

定律三:努力与结果定律。 努力(成交量)应产生与之成比例的结果(价格运动)。当努力和结果和谐时,走势是真实的。当它们背离时——高努力伴随低结果,或低努力伴随大结果——说明有问题,反转或暂停很可能发生。

2.2 威科夫市场周期

Wyckoff识别出一个在所有市场和时间周期中重复的四阶段周期:

  1. 吸筹。 聪明资金悄悄地从沮丧的卖方手中买入。价格在一个区间内横盘。成交量模式揭示了买入行为。
  2. 拉升。 需求压倒供给。价格上涨。成交量以上涨时放量、回调时缩量来确认趋势。
  3. 派发。 聪明资金悄悄地卖给热情的买方。价格在一个区间内横盘。成交量模式揭示了卖出行为。
  4. 下跌。 供给压倒需求。价格下跌。成交量以下跌时放量、反弹时缩量来确认趋势。

关键洞察:吸筹和派发对于仅看价格的分析是不可见的,因为价格在这两个阶段都是横盘的。只有成交量能揭示聪明资金是在区间内买入还是卖出。


3. 量价关系 — 核心框架

3.1 四种基本组合

Coulling识别出四种基本的量价关系:

1. 价格上涨 + 成交量上升 = 看涨确认 价格上涨时需求在增加。买方愿意付出更高价格且人数在增加。上涨趋势是真实的,可能会持续。

2. 价格上涨 + 成交量下降 = 看跌预警 价格在上涨,但参与购买的人越来越少。上涨趋势正在失去动力。卖方很快将压倒正在减弱的需求。这是技术分析中最可靠的反转预警之一。

3. 价格下跌 + 成交量上升 = 两种解读

4. 价格下跌 + 成交量下降 = 看涨信号(潜在的) 抛售压力在减弱。供给正在枯竭。这是上涨趋势中回调的特征,而非新的下跌趋势。如果回调发生在支撑位,这是一个强买入信号。

3.2 量价矩阵

高成交量 平均成交量 低成交量
宽幅上涨 强看涨确认 正常买入 可疑——可能是跳空或新闻驱动
窄幅上涨 潜在阻力——努力未产生结果 正常整理 漂移,无承诺
宽幅下跌 强看跌确认或恐慌性抛售 正常卖出 可疑——可能是跳空或新闻驱动
窄幅下跌 潜在支撑——卖方尽管努力仍失败 正常整理 漂移,无承诺

4. 努力与结果 — 主导原则

4.1 努力与结果的含义

努力与结果原则是量价分析中最强大的概念。它指出,所花费的成交量(努力)应产生与之成比例的价格运动(结果)。当这种关系被打破时,它揭示了隐藏的活动。

4.2 预示反转的异常信号

高努力,小结果(搅动):

低努力,大结果:

4.3 解读叙事

通过努力与结果的视角,每根K线都讲述一个故事:


5. 吸筹检测

5.1 吸筹过程

吸筹是知情投资者在重大上涨之前建立仓位的过程。它必须悄悄进行——如果买入很明显,其他参与者会抢先下单,过早推高价格。

5.2 吸筹阶段(威科夫)

  1. 初始支撑(PS)。 在长期下跌之后,第一个显著需求的迹象出现。在一根未能创出新低的阴线上成交量增加。价格暂时稳定。

  2. 卖出高潮(SC)。 在非常高的成交量上急剧下跌,代表恐慌性抛售的最后一波。聪明资金吸收了这些供给。价格通常急剧下跌后迅速反弹(长下影线)。

  3. 自然反弹(AR)。 在抛售压力减弱后价格反弹。这建立了交易区间的上边界。成交量适中。

  4. 二次测试(ST)。 价格回到卖出高潮低点附近,测试供给是否真正耗尽。成交量应低于卖出高潮时的成交量。如果是,需求占主导。

  5. 弹簧(可选)。 价格短暂跌破交易区间低点,触发止损单并甩出弱势持有者。成交量应该低——如果是,弹簧是一个看涨陷阱,聪明资金正在买入被迫卖出的筹码。

  6. 强势信号(SOS)。 价格在成交量增加的情况下穿越交易区间中部。这是需求已经克服供给的第一个明确证据。

  7. 最后支撑点(LPS)。 拉升阶段开始前的最后一次回调。成交量应该低,确认供给已被吸收。

5.3 吸筹的成交量特征


6. 派发检测

6.1 派发过程

派发是吸筹的镜像——知情投资者在重大下跌之前清算仓位。与吸筹一样,它必须逐步执行以避免惊动市场。

6.2 派发阶段(威科夫)

  1. 初始供给(PSY)。 在长期上涨之后,第一个显著卖出的迹象出现。在一根未能创出新高的阳线上成交量增加。价格暂时停滞。

  2. 买入高潮(BC)。 在非常高的成交量上急剧上涨,代表狂热买入的最后一波。聪明资金卖入这些需求。价格通常急剧冲高后迅速回落(长上影线)。

  3. 自然回落(AR)。 随着买入热情消退价格下跌。这建立了交易区间的下边界。成交量适中。

  4. 二次测试(ST)。 价格回到买入高潮高点附近,测试需求是否真正耗尽。成交量应低于买入高潮时的成交量。如果是,供给占主导。

  5. 上冲(可选)。 价格短暂突破交易区间高点之上,触发突破追买。成交量应该低——如果是,上冲是一个看跌陷阱,聪明资金正在卖入突破的热情中。

  6. 弱势信号(SOW)。 价格在成交量增加的情况下跌穿交易区间中部。这是供给已经克服需求的第一个明确证据。

  7. 最后供给点(LPSY)。 下跌阶段开始前的最后一次反弹。成交量应该低,确认需求已被耗尽。

6.3 派发的成交量特征


7. 高潮成交量

7.1 高潮成交量的含义

高潮成交量是异常巨大的成交量——通常是近期均值的2-3倍或更多——预示着主导力量的衰竭。高潮成交量出现在转折点,因为它代表了失败方最后的、绝望的行动。

7.2 卖出高潮

卖出高潮出现的条件:

解读:恐慌性卖方的最后一波已被知情买方吸收。供给现已耗尽。底部正在形成。

7.3 买入高潮

买入高潮出现的条件:

解读:狂热买方的最后一波已被知情卖方迎击。需求现已耗尽。顶部正在形成。

7.4 需要确认

单根高潮K线是反转的必要但非充分条件。确认来自:


8. 测试 — 确认供需关系

8.1 测试为何重要

在高潮成交量之后,市场必须测试主导力量是否真正耗尽。测试是吸筹和派发的确认机制:

8.2 成功与失败的测试

成功的支撑测试:

失败的支撑测试:

成功的阻力测试:

失败的阻力测试:

8.3 测试序列

多次测试逐步建立更强的证据:


9. 弹簧与上冲

9.1 弹簧

弹簧是在低成交量下暂时跌破支撑位,随后快速反弹。这是一种有意设计的甩盘:

9.2 上冲

上冲是弹簧的镜像——在低成交量下暂时突破阻力位之上,随后快速下跌:

9.3 弹簧与上冲的交易

弹簧和上冲是量价分析中概率最高的交易形态之一:

风险/回报比很有利,因为止损很紧(仅超出弹簧或上冲极端点一点),而目标很宽(整个区间或更多)。


10. 支撑与阻力处的成交量

10.1 成交量是支撑/阻力质量的关键

支撑位和阻力位并不是生而平等的。成交量决定了它们的重要性:

阻力位同理——高成交量阻力是真实的;低成交量阻力是薄弱的。

10.2 突破确认

当价格突破支撑位或阻力位时,成交量决定突破是否真实:

真实突破:

假突破:

10.3 关键位处的成交量分布

价格接近关键位时成交量的行为揭示了意图:


11. 量价分析与K线分析的结合

11.1 K线为成交量增添背景

虽然量价分析关注成交量和价格区间,但K线形态通过开盘价和收盘价的关系以及影线的存在增添了细微差别:

看涨量价 + 看涨K线 = 高确信度:

看跌量价 + 看涨K线 = 混淆:

11.2 关键K线-成交量组合

锤子线 + 支撑位高成交量:

流星线 + 阻力位高成交量:

十字星 + 高成交量:

吞没形态 + 成交量确认:

11.3 量价分析K线解读顺序

对于每根K线,Coulling建议按以下顺序解读:

  1. 先看成交量。 相对于近期K线,它是高、平均还是低?
  2. 价差(区间)。 K线是宽幅、平均还是窄幅?
  3. 收盘位置。 价格收在区间的哪里?接近最高点、中间还是最低点?
  4. 背景。 这根K线在更广泛的结构中处于什么位置?在支撑位、阻力位、趋势中还是区间中?
  5. 故事。 这种组合讲述了什么叙事?谁赢得了这根K线——买方还是卖方——胜利是否令人信服?

12. 跨时间周期的成交量

12.1 多时间周期确认

Coulling强调,当量价分析信号在多个时间周期得到确认时,其可靠性会增加:

12.2 时间周期层次

时间周期 角色 成交量意义
月线 长期趋势和周期识别 主要吸筹/派发
周线 中期趋势和波段方向 重要反转和趋势
日线 交易偏向和机会识别 最常用的量价分析时间周期
小时/4小时 入场和出场时机 日内细化
15分钟/5分钟 活跃交易者的精确入场 噪音增加;谨慎使用

12.3 跨时间周期的冲突信号

当时间周期冲突时,更高时间周期优先:


13. 常见错误

13.1 成交量解读错误

  1. 忽视背景。 高成交量K线在不同位置有不同含义。支撑位的高成交量是看涨的;在长期上涨后的高成交量可能是派发。始终在背景中解读成交量。

  2. 使用绝对成交量而非相对成交量。 重要的不是成交量在绝对数值上是否"高",而是相对于近期平均成交量是否高。通常交易100万股的股票显示300万有意义。通常交易5000万股的股票显示300万只是安静的一天。

  3. 期望即时结果。 吸筹和派发需要时间——数周、数月,有时数年。单一的量价分析信号是一条线索,而非触发器。

  4. 混淆高潮成交量与持续成交量。 长期走势后的极高成交量通常预示衰竭,而非延续。但许多交易者看到高成交量就认为趋势在加速。

  5. 忽视收盘位置。 收盘价相对于K线区间的位置至关重要。在K线低点附近收盘的高成交量宽幅K线是看跌的,而非看涨的,尽管它在大部分时间可能是上涨的。

13.2 结构性错误

  1. 脱离背景交易。 试图孤立地交易量价分析信号,不考虑更广泛的市场结构、趋势和时间周期。

  2. 忽视趋势。 量价分析在用于确认或否定现有趋势时最为强大。逆势的量价分析信号需要更强的确认。

  3. 过度分析。 对每根K线都解读含义。大多数K线是噪音。专注于那些成交量真正异常的K线——那些明显突出的。

  4. 在流动性不足的市场使用成交量。 量价分析在流动性好的市场最为可靠,那里的成交量真正反映了参与度。在交投清淡的股票中,成交量可能被单笔大额订单扭曲。

  5. 不追踪成交量模式的时间演变。 单根K线是一个数据点。K线的模式——回调时成交量递减、上涨时成交量增加——讲述了一个故事。始终要放大视角。


14. 实施伪代码

14.1 量价K线分类

function classifyBar(bar, recent_bars):
    // 计算相对成交量
    avg_volume = average(recent_bars[-20:].volume)
    relative_volume = bar.volume / avg_volume

    // 成交量分类
    if relative_volume >= 2.0:
        volume_class = "ULTRA_HIGH"  // 超高
    elif relative_volume >= 1.5:
        volume_class = "HIGH"  // 高
    elif relative_volume >= 0.75:
        volume_class = "AVERAGE"  // 平均
    else:
        volume_class = "LOW"  // 低

    // 计算相对于近期的价差(区间)
    bar_range = bar.high - bar.low
    avg_range = average(recent_bars[-20:].range)
    relative_range = bar_range / avg_range

    // 价差分类
    if relative_range >= 1.5:
        spread_class = "WIDE"  // 宽幅
    elif relative_range >= 0.75:
        spread_class = "AVERAGE"  // 平均
    else:
        spread_class = "NARROW"  // 窄幅

    // K线内收盘位置分类
    if bar_range == 0:
        close_position = "DOJI"  // 十字星
    else:
        close_pct = (bar.close - bar.low) / bar_range
        if close_pct >= 0.70:
            close_position = "HIGH"  // 高位
        elif close_pct >= 0.30:
            close_position = "MIDDLE"  // 中位
        else:
            close_position = "LOW"  // 低位

    // 确定K线方向
    direction = "UP" if bar.close > bar.open else "DOWN"

    return VPABar(volume_class, spread_class, close_position, direction)

14.2 努力与结果分析

function analyzeEffortResult(bar_classification):
    volume = bar_classification.volume_class
    spread = bar_classification.spread_class
    close = bar_classification.close_position
    direction = bar_classification.direction

    // 和谐:努力与结果匹配
    if volume in ["HIGH", "ULTRA_HIGH"] and spread == "WIDE":
        if direction == "UP" and close == "HIGH":
            return "STRONG_BULLISH_CONFIRMATION"  // 强看涨确认
        elif direction == "DOWN" and close == "LOW":
            return "STRONG_BEARISH_CONFIRMATION"  // 强看跌确认

    // 异常:高努力,小结果(搅动)
    if volume in ["HIGH", "ULTRA_HIGH"] and spread == "NARROW":
        return "CHURNING_POTENTIAL_REVERSAL"  // 搅动_潜在反转

    // 异常:高成交量,收盘与方向相反
    if volume in ["HIGH", "ULTRA_HIGH"] and spread == "WIDE":
        if direction == "UP" and close == "LOW":
            return "HIDDEN_SELLING"    // 隐藏卖出——阳线收弱 = 派发
        elif direction == "DOWN" and close == "HIGH":
            return "HIDDEN_BUYING"     // 隐藏买入——阴线收强 = 吸筹

    // 低努力,大结果
    if volume == "LOW" and spread == "WIDE":
        return "VACUUM_MOVE_UNSUSTAINABLE"  // 真空走势_不可持续

    // 低努力,小结果
    if volume == "LOW" and spread == "NARROW":
        return "NO_INTEREST"  // 无兴趣

    return "NEUTRAL"  // 中性

14.3 吸筹/派发检测

function detectAccumulationDistribution(bars, lookback=50):
    range_bars = bars[-lookback:]

    // 识别是否在交易区间内
    range_high = max(range_bars.high)
    range_low = min(range_bars.low)
    range_width = range_high - range_low

    // 检查价格是否在整理(区间震荡)
    if range_width / range_bars[-1].close > 0.30:
        return "NOT_IN_RANGE"  // 不在区间内——太宽,可能在趋势中

    // 统计成交量特征
    up_volume = sum(bar.volume for bar in range_bars if bar.close > bar.open)
    down_volume = sum(bar.volume for bar in range_bars if bar.close <= bar.open)

    // 支撑测试时的成交量
    support_tests = [bar for bar in range_bars
                     if bar.low < range_low + range_width * 0.10]
    support_test_volumes = [bar.volume for bar in support_tests]

    // 阻力测试时的成交量
    resistance_tests = [bar for bar in range_bars
                        if bar.high > range_high - range_width * 0.10]
    resistance_test_volumes = [bar.volume for bar in resistance_tests]

    // 吸筹信号:
    // - 阳线成交量超过阴线成交量
    // - 支撑测试时成交量随时间递减
    // - 区间内反弹时成交量增加
    if up_volume > down_volume * 1.2:
        if is_declining_sequence(support_test_volumes):
            return "ACCUMULATION_LIKELY"  // 可能在吸筹

    // 派发信号:
    // - 阴线成交量超过阳线成交量
    // - 阻力测试时成交量随时间递减
    // - 区间内下跌时成交量增加
    if down_volume > up_volume * 1.2:
        if is_declining_sequence(resistance_test_volumes):
            return "DISTRIBUTION_LIKELY"  // 可能在派发

    return "INDETERMINATE"  // 不确定

14.4 弹簧/上冲检测

function detectSpring(bars, support_level, lookback=5):
    recent = bars[-lookback:]

    for i, bar in enumerate(recent):
        // 弹簧:价格跌破支撑位后反弹
        if bar.low < support_level:
            penetration_depth = (support_level - bar.low) / support_level

            // 跌破时成交量必须低
            avg_vol = average(bars[-30:].volume)
            relative_vol = bar.volume / avg_vol

            if relative_vol < 0.80 and penetration_depth < 0.03:
                // 检查反弹
                if bar.close > support_level:
                    return SpringSignal(
                        type="SPRING",  // 弹簧
                        quality="HIGH" if relative_vol < 0.50 else "MODERATE",
                        entry=support_level,
                        stop=bar.low - ATR(bars, 14) * 0.5,
                        confidence=0.8 if relative_vol < 0.50 else 0.6
                    )

    return None

function detectUpthrust(bars, resistance_level, lookback=5):
    recent = bars[-lookback:]

    for i, bar in enumerate(recent):
        if bar.high > resistance_level:
            penetration_depth = (bar.high - resistance_level) / resistance_level
            avg_vol = average(bars[-30:].volume)
            relative_vol = bar.volume / avg_vol

            if relative_vol < 0.80 and penetration_depth < 0.03:
                if bar.close < resistance_level:
                    return UpthrusSignal(
                        type="UPTHRUST",  // 上冲
                        quality="HIGH" if relative_vol < 0.50 else "MODERATE",
                        entry=resistance_level,
                        stop=bar.high + ATR(bars, 14) * 0.5,
                        confidence=0.8 if relative_vol < 0.50 else 0.6
                    )

    return None

14.5 突破验证

function validateBreakout(bars, level, direction):
    breakout_bar = bars[-1]
    avg_volume = average(bars[-30:].volume)
    relative_volume = breakout_bar.volume / avg_volume

    // 成交量必须确认突破
    if relative_volume < 1.3:
        return BreakoutAssessment(
            valid=False,
            reason="突破时成交量不足"
        )

    // 收盘价必须令人信服地超越该水平
    if direction == "UP":
        if breakout_bar.close < level + (breakout_bar.high - breakout_bar.low) * 0.3:
            return BreakoutAssessment(
                valid=False,
                reason="收盘价太接近突破位"
            )
    elif direction == "DOWN":
        if breakout_bar.close > level - (breakout_bar.high - breakout_bar.low) * 0.3:
            return BreakoutAssessment(
                valid=False,
                reason="收盘价太接近突破位"
            )

    // 检查跟进(后续1-3根K线)
    followthrough_bars = bars[-4:-1]
    ft_volume_trend = is_sustained_volume(followthrough_bars, avg_volume)
    ft_price_trend = price_continues_direction(followthrough_bars, direction)

    return BreakoutAssessment(
        valid=True,
        strength="STRONG" if relative_volume > 2.0 else "MODERATE",
        follow_through=ft_volume_trend and ft_price_trend
    )

15. 核心语录

"成交量是驱动市场的燃料。没有成交量,价格运动不过是建立在空气上的运动——没有支撑且容易反转。"

"价格只是在那个时刻供需平衡的反映。成交量告诉你那个平衡的强度。"

"市场就像一座冰山。价格是水面以上每个人都能看到的部分。成交量是水面以下实际决定冰山去向的巨大体量。"

"每根K线都讲述一个故事。成交量是情节。价格区间是动作。收盘是结论。你的工作是正确地解读这个故事。"

"当成交量和价格一致时,走势是真实的。当它们背离时,表面之下正在发生某些事情——而那些事情通常意味着聪明资金正在与大众相反的方向布局。"

"弹簧是市场摇晃树木以甩掉弱势持有者的方式。聪明资金需要他们的筹码,而短暂跌破支撑位是获取它们的最快方式。"

"吸筹对未经训练的眼睛是不可见的,因为价格毫无变化。但成交量讲述了故事——股票从弱势持有者系统性地、耐心地转移到强势持有者手中。"

"K线的收盘价是最重要的信息。它告诉你谁赢得了这场战斗——买方还是卖方。高位收盘意味着买方赢了。低位收盘意味着卖方赢了。中间收盘意味着战斗未决。"

"永远不要在没有成交量确认的情况下交易突破。低成交量的突破是陷阱。高成交量的突破是邀请。"

"整个技术分析中最简单也最强大的问题是:成交量是在确认价格行为,还是反常的?如果确认,顺势而为。如果反常,停下来注意——市场正在告诉你一些重要的事情。"


本规范提炼了Anna Coulling的量价分析框架,根植于威科夫传统。核心原则是成交量是唯一的领先指标——它在价格反映之前揭示了市场主导参与者的意图和行动。通过在价格区间、收盘位置和市场结构的背景下解读成交量,交易者可以区分真实走势和陷阱,在突破发生之前识别吸筹和派发,并使自己的仓位与真正推动市场的力量保持一致。