史丹·温斯坦在牛熊市中盈利的秘密 — 完整实施方案规范

基于史丹·温斯坦 (Stan Weinstein),在牛熊市中盈利的秘密 (1988)


目录

  1. 概述
  2. 30周移动平均线:核心工具
  3. 股票价格周期的四个阶段
  4. 实践中识别每个阶段
  5. 每个阶段的成交量分析
  6. 买入规则:第2阶段突破
  7. 卖出规则:何时退出多头
  8. 第4阶段做空
  9. 相对强度分析
  10. 行业组分析
  11. 市场广度指标
  12. 整体市场时机
  13. 止损设置
  14. 常见错误
  15. 完整交易生命周期示例
  16. 实施伪代码
  17. 核心语录

1. 概述

1.1 谁是史丹·温斯坦?

史丹·温斯坦是The Professional Tape Reader的编辑,这是一份他自1971年以来一直发布的市场咨询通讯。数十年来,他一直是华尔街最受尊敬的技术分析师之一,以提前做出多项重大市场判断而闻名——包括预测1982年牛市底部和1987年崩盘。与许多将自己埋在深奥指标中的技术分析师不同,温斯坦的声誉建立在一个简单而优雅的框架上:阶段分析

他1988年的书将这个框架提炼成一个对个人投资者和职业资金管理人都可用的系统。它已经连续印刷了近四十年,这是其持久效用的证明。

1.2 核心论点

温斯坦的核心论点看似简单:

每只股票、每个行业、每个市场都经历四个不同的阶段。
如果你能识别一只股票处于哪个阶段,你就知道该怎么处理它。

- 第1阶段(筑底)→ 不做任何事。等待。
- 第2阶段(上涨)→ 在突破时积极买入。
- 第3阶段(筑顶)→ 卖出所有仓位。无一例外。
- 第4阶段(下跌)→ 做空,或完全避开。

该框架的力量在于其拒绝预测。温斯坦不预测股票会到哪里。他识别股票在其周期中的当前位置并据此采取行动。一只按所有基本面衡量都可能看起来"便宜"的第4阶段股票——温斯坦不在乎。在图表证明它已进入第2阶段之前,他不会买入。

1.3 周线图,而不是日线图

温斯坦方法的一个关键且常被忽视的要素:他专门使用周线图工作。日线图包含太多噪音。周线图平滑了随机的日常波动,以更大的清晰度揭示了底层趋势。

这不是一个小的风格偏好。整个系统——30周移动平均线、阶段定义、突破标准——都是为周线时间框架校准的。将温斯坦的规则应用于日线图会产生不同(且较差)的结果。

1.4 自上而下分析

温斯坦坚持严格的自上而下分析顺序:

第1步:评估整体市场方向(看涨、看跌或中性)。
第2步:识别最强的行业组。
第3步:在这些组内找到最强的个股。
第4步:使用阶段分析和成交量确认来把握买入时机。

无论个股设置看起来多么完美,温斯坦认为如果整体市场处于第4阶段下跌,你就不应该买入。潮水会抬起或沉没所有船只。


2. 30周移动平均线:核心工具

2.1 为什么是30周?

30周移动平均线(30-WMA)是整个系统的支柱。温斯坦选择它是因为它大约等同于150天移动平均线的行为——足够长以过滤中间噪音,足够短以仍能对合理时间框架内的有意义趋势变化做出反应。

计算:
  30-WMA = (最近30周每周五收盘价之和)/ 30

在周线图上,30-WMA被绘制为一条线。它的斜率和它与价格的关系定义了阶段。

2.2 观察的三件事

温斯坦将移动平均线简化为三个可观察的属性:

属性 告诉你什么
30-WMA的方向 MA是上升、持平还是下降?
价格相对于30-WMA 股票是在其上方还是下方交易?
斜率变化 MA是在加速、减速还是趋平?

这三个属性足以将任何股票分类为四个阶段之一。

2.3 现代等价物

虽然温斯坦的原始公式使用30周简单移动平均线,从业者通常替换为:

30-WMA仍然是忠实实施该系统的标准选择。


3. 股票价格周期的四个阶段

3.1 第1阶段:筑底区域(积累)

第1阶段是股票下跌(第4阶段)之后、上涨(第2阶段)之前的时期。价格横盘移动,通常持续数月甚至数年。公众已失去兴趣。成交量很低。关于该股票的标题新闻是负面的或不存在。

定义特征:

- 价格在水平交易区间内波动。
- 30-WMA在之前下跌后趋于平缓。
- 价格反复上下穿越30-WMA。
- 成交量通常较低且不活跃。
- 第1阶段持续越长,最终第2阶段突破越有力。

表面之下发生的事情: 知情的投资者——机构、内部人士——正在从沮丧的卖方那里悄悄积累股份,这些卖方正在亏损出售。供应正在被吸收。每次价格跌至区间底部时,买入支撑就会出现。每次它升至顶部时,一些卖家仍会出现。这种拉锯战持续到沮丧卖方的供应枯竭。

行动: 不要买入。不要做空。观察并等待。如果筑底形态是在显著下跌后形成的,且底部越来越窄,则将该股票放入观察名单。

3.2 第2阶段:上涨阶段(抬高)

第2阶段是多头仓位的赚钱阶段。它始于价格以成交量大幅放大突破第1阶段形成的阻力位,30-WMA开始向上拐头。

定义特征:

- 价格突破第1阶段交易区间的上边界。
- 突破发生在成交量显著高于近期平均水平的时期。
- 30-WMA开始向上倾斜。
- 价格持续保持在上升的30-WMA之上。
- 回调至30-WMA是买入机会。
- 周线图上形成更高的高点和更高的低点。

表面之下发生的事情: 机构买入现在超过了供应。股票开始出现在动量屏幕和"最活跃"列表上,吸引更多买家。基本面的改善通常正在进行——业绩惊喜、新产品、分析师上调——尽管温斯坦强调图表往往领先新闻数月。

行动: 在初始突破时买入。在第一次回调至30-WMA时加仓——如果回调时成交量收缩,反弹时成交量放大。

3.3 第3阶段:筑顶区域(派发)

第3阶段是第1阶段的镜像,但不是在底部而是在顶部。价格停止创新高,开始横盘。在之前上涨的30-WMA开始走平。乐观情绪达到顶峰——该股票可能出现在杂志文章和电视上。

定义特征:

- 价格停止上涨,在一定区间内横盘移动。
- 30-WMA在之前上涨后趋于平缓。
- 价格在趋平的30-WMA上下反复震荡。
- 成交量往往在下跌周放大,在上涨周萎缩。
- 形态通常看起来像"头肩顶"或圆顶。
- 新闻此时通常最为正面——经典的逆向指标。

表面之下发生的事情: 知情的投资者正在向被股票之前上涨和正面新闻吸引的 latecomers 派发(卖出)他们的股份。供应开始压倒需求,但公众的足够买入兴趣仍然存在以防止立即下跌。

行动: 卖出所有多头仓位。无一例外。不要等待下跌的"确认"——到第4阶段下跌明显时,重大损失已经发生。

3.4 第4阶段:下跌阶段(杀跌)

第4阶段是第2阶段的倒影——持续的下行趋势。价格跌破第3阶段形成的支撑位,持续低于下降的30-WMA。

定义特征:

- 价格跌破第3阶段交易区间的下边界。
- 跌破通常发生在成交量放大的时期。
- 30-WMA向下倾斜。
- 价格持续保持在下降的30-WMA之下。
- 反弹至30-WMA是做空机会(或最后的退出机会)。
- 周线图上形成更低的低点和更低的高点。
- 基本面通常在恶化——但图表已领先。

表面之下发生的事情: 机构抛售无情。分析师开始下调。业绩令人失望。每一次反弹都遇到卖出头寸的卖家,创造更低的高点。公众抱着复苏的希望持有,在投降慢慢展开的过程中创造稳定的股份供应流入市场。

行动: 如果你是有经验的交易员,做空。否则,完全避开。绝不要买入处于第4阶段的股票,无论它看起来多"便宜"。


4. 实践中识别每个阶段

4.1 阶段分类检查清单

对于周线图上的任何股票,回答以下问题:

┌──────────────────────────────────────────────────────────────────────────┐
│ 第1阶段(筑底)                                                        │
│  □ 股票之前是否经历了长时间下跌?                                          │
│  □ 30-WMA在下跌后是否趋于平缓?                                          │
│  □ 价格是否在趋平的30-WMA上下波动?                                      │
│  □ 成交量是否低且不活跃?                                                │
│  □ 交易区间是否持续至少3-6个月?                                         │
├──────────────────────────────────────────────────────────────────────────┤
│ 第2阶段(上涨)                                                         │
│  □ 价格是否在成交量放大时突破第1/3阶段交易区间?                           │
│  □ 30-WMA是否向上倾斜?                                                 │
│  □ 价格是否持续高于30-WMA?                                             │
│  □ 回调是否浅,并在/接近MA处获得买入支撑?                                 │
│  □ 更高的高点和更高的低点的形态是否完整?                                  │
├──────────────────────────────────────────────────────────────────────────┤
│ 第3阶段(筑顶)                                                         │
│  □ 股票之前是否经历了长时间上涨?                                         │
│  □ 30-WMA在上涨后是否趋于平缓?                                          │
│  □ 价格是否在趋平的30-WMA上下波动?                                      │
│  □ 成交量是否在下跌时放大,在反弹时萎缩?                                  │
│  □ 新闻/情绪是否普遍正面?                                               │
├──────────────────────────────────────────────────────────────────────────┤
│ 第4阶段(下跌)                                                         │
│  □ 价格是否跌破第3阶段交易区间?                                         │
│  □ 30-WMA是否向下倾斜?                                                 │
│  □ 价格是否持续低于30-WMA?                                             │
│  □ 反弹是否在下降的30-WMA处或下方被压制?                                │
│  □ 更低的低点和更低的高点的形态是否完整?                                  │
└──────────────────────────────────────────────────────────────────────────┘

4.2 转换区

最有利可图(也最危险)的时刻是阶段之间的转换:

温斯坦强调:不要试图精确买入底部(第4阶段 → 第1阶段转换)。等待确认的第2阶段突破。你会错过最初10-15%的涨幅,但你将避免许多陷阱过早买家的假底部。


5. 每个阶段的成交量分析

成交量是温斯坦系统中仅次于30-WMA的第二重要工具。他将其用作每个阶段转换的确认机制。

5.1 各阶段成交量特征

第1阶段(筑底):
  - 成交量通常较低且下降。
  - 偶尔在反弹至区间顶部时出现成交量峰值,可能暗示
    机构积累,但这本身并不可靠。
  - 随着第1阶段成熟,在上涨周成交量可能开始轻微增加——
    一个微妙的早期线索。

第2阶段(上涨):
  - 突破必须发生在成交量至少是近期周平均2倍的时期。
  - 没有突破的成交量是无意义的;没有成交量的突破是可疑的。
  - 在上涨期间,上涨周的成交量应高于下跌周。
  - 在低成交量时回调至30-WMA是健康的且可买入的。
  - 在30-WMA附近高成交量回调是警告信号。

第3阶段(筑顶):
  - 成交量往往在下跌周增加。
  - 成交量在反弹周减少。
  - 这种背离(下跌时大量成交,反弹时轻量成交)是
    派发的特征——机构向散户卖出。
  - 在高位附近出现高潮成交量峰值,随后未能进一步上涨
    是经典的第3阶段警告。

第4阶段(下跌):
  - 跌破支撑位应发生在成交量扩大时。
  - 第4阶段期间的反弹发生在成交量萎缩时。
  - 投降式卖出(在急剧下跌时成交量极高)可能
    预示第4阶段最终结束,但不是买入信号——第1阶段
    筑底仍需要形成。

5.2 突破时的成交量线索

温斯坦认为突破时刻的成交量是整个周期中最重要的单一成交量读数。在成交量至少是前几周平均周成交量两倍的情况下,突破第1阻力位,是真正的信号。在平均或低于平均成交量时突破是高度可疑的,应极其谨慎对待。

成交量确认规则:
  breakout_volume >= 2.0 * average_volume(last_N_weeks)

  其中 N = 4到10周(温斯坦对确切回看期不严格)

6. 买入规则:第2阶段突破

6.1 理想买入设置

温斯坦的买入标准严格且明确:

以下所有条件必须同时满足:

1. 阶段背景:
   - 股票已有意义的一段时间处于第1阶段底部
     (底部越长,最终涨幅越大)。
   - 30-WMA已趋平并开始向上拐头。

2. 突破:
   - 价格在周线图上收于阻力位(第1阶段
     交易区间上边界)之上。
   - 突破发生在成交量至少是近期周平均2倍的时期。

3. 移动平均线:
   - 30-WMA持平至上升(不是下降)。
   - 在突破时价格高于30-WMA。

4. 相对强度:
   - 股票相对于市场的相对强度正在改善或为正。
   - 理想情况下,股票处于强势行业组。

5. 市场背景:
   - 整体市场不在第4阶段下跌中。
   - 市场广度未恶化。

6.2 买入执行

入场:在周收盘于阻力位上方时买入,或如果错过初始走势,
     在第一次回调至突破位时买入。

规模:仓位规模由距止损的距离决定
     (见第13节)。

止损:放置在突破位下方或30-WMA下方,
     两者中较近且较合乎逻辑的位置。

6.3 加仓盈利仓位

温斯坦支持在以下条件下加仓第2阶段仓位:

6.4 不应该买什么

温斯坦对应该避免什么同样明确:

永远不要买:
  - 处于第4阶段下跌的股票,无论市盈率多"便宜"。
  - 处于第3阶段派发的股票,即使"只是回调"。
  - 在成交量稀少或平均时进行第2阶段突破。
  - 当其行业组处于第4阶段时突破的股票。
  - 当整体市场处于第4阶段时突破的股票。
  - 在没有重大盘整的情况下已从第1阶段底部上涨100%+的股票。

7. 卖出规则:何时退出多头

7.1 温斯坦的两类卖出纪律

温斯坦根据投资者的取向将卖出分为两类:

对于较长线投资者(仓位交易员):

卖出当:
  1. 一直在上升的30-WMA趋平并开始向下拐头。
  2. 在持续上涨后,价格每周收于30-WMA下方。
  3. (1)和(2)的组合是明确的卖出信号。

不要等待:
  - "更好的"价格。
  - "真的在转向"的确认。
  - 股票"回到"你的入场价。

对于较短 线交易员:

卖出当:
  1. 价格跌破第2阶段上涨下方画的较短趋势线。
  2. 一个重要支撑位(先前盘整低点)被突破。
  3. 初始止损被触发。

这些退出将比30-WMA方法更早让你出局,捕获更多
收益,但也会触发更多假信号。

7.2 第2阶段即将结束的警告信号

- 30-WMA开始减速(斜率趋平)。
- 成交量在下跌周增加,在上涨周减少。
- 反弹尝试后价格未能创新高。
- 形成"头肩顶"或"双顶"形态。
- 相对于市场的相对强度转为负。
- 股票的所属行业组进入第3或第4阶段。
- 在跳空上涨时出现高潮成交量峰值(高潮顶部)。

7.3 卖出的基本规则

温斯坦最重要的卖出原则:**卖出太早总是比卖出太晚好。**已经给出卖出信号的股票可能暂时反弹,让你觉得卖出很愚蠢。但处于第4阶段的股票可能下跌50%、70%或更多。不对称性是压倒性的:卖出太早的代价是轻微的;卖出太晚的代价可能是灾难性的。


8. 第4阶段做空

8.1 镜像

温斯坦明确教导做空作为第2阶段买入的自然对应。如果你能够识别第2阶段突破,你就能识别第4阶段跌破——逻辑相同但相反。

8.2 理想做空设置

以下所有条件必须同时满足:

1. 阶段背景:
   - 股票已有意义的一段时间处于第3阶段顶部。
   - 30-WMA已趋平并开始向下拐头。

2. 跌破:
   - 价格在周线图上收于支撑位(第3阶段
     交易区间下边界)之下。
   - 跌破发生在成交量扩大时。

3. 移动平均线:
   - 30-WMA持平至下降(不是上升)。
   - 在跌破时价格低于30-WMA。

4. 相对强度:
   - 股票相对于市场的相对强度正在减弱。
   - 理想情况下,股票处于弱势行业组。

5. 市场背景:
   - 整体市场不在强劲的第2阶段上涨中。
   - 市场广度正在恶化。

8.3 做空执行

入场:在周收盘跌破支撑位时做空。
止损:放置在跌破位上方或30-WMA上方的买入止损。
平仓:当股票进入第1阶段筑底时(30-WMA趋平,价格
     在区间内企稳)。

8.4 做空第4阶段的优势

温斯坦注意到第4阶段下跌往往比第2阶段上涨展开得更快。恐惧是比贪婪更强大的驱动力。一只花了两年上涨的股票可能会在六个月内回吐大部分涨幅。对于熟悉做空的交易员来说,第4阶段可能非常有利可图。


9. 相对强度分析

9.1 温斯坦所说的相对强度

温斯坦使用相对强度(RS)来比较股票价格表现与整体市场(通常是标准普尔500或广泛市场指数)。这不是RSI振荡器——它是一个简单的比率:

相对强度 = 股票价格 / 市场指数价格

当这个比率上升时,股票跑赢市场。当它下降时,即使股票绝对价格正在上涨,它也在跑输市场。

9.2 如何使用相对强度

对于买入:
  - 只买入相对强度线正在上升或至少为平的股票。
  - 理想情况下,相对强度线在价格突破之前或同时创出新高
    ——这是强有力的确认。
  - 避免买入相对强度线正在下降的股票,即使图表在其他方面看起来有吸引力。

对于卖出:
  - 在仍处于第2阶段的股票上,相对强度线下降是上涨失去动力的早期警告。
  - 相对强度恶化往往先于价格恶化数周或数月。

对于做空:
  - 做空相对强度弱且正在下降的股票。
  - 在上涨市场中表现不佳的股票在下跌市场中表现会更差。

10. 行业组分析

10.1 股票成群移动

温斯坦强调股票不是孤立移动的——它们按行业组移动。强势组中的弱势股票将苦苦挣扎。弱势组中的普通股票可能超过预期。组背景至关重要。

10.2 将阶段分析应用于行业组

相同的四阶段框架适用于行业组:

1. 识别哪些行业组处于第2阶段(上涨)。
2. 在这些组内,找到也进入第2阶段的个股。
3. 股票处于第2阶段 + 组处于第2阶段 + 市场处于第2阶段
   的排列产生最高概率、最高幅度的走势。
4. 避免买入处于第3或第4阶段的行业组中的股票,即使
   个股看起来很强。

10.3 组轮换

随着市场周期成熟,不同的组在不同时间经历各阶段。早期周期领导者(科技、消费可选)最先进入第2阶段,也最先进入第3阶段。晚期周期组(公用事业、消费必需品)可能在早期领导者已进入第4阶段时仍处于第2阶段。理解这种轮换有助于在整个市场周期中识别机会。


11. 市场广度指标

11.1 腾落线

腾落线(A/D)是温斯坦评估整体市场健康状况的主要工具。它被计算为累计总和:

每日A/D值 = 上涨股票数量 - 下跌股票数量
A/D线 = 每日A/D值随时间的累计总和

解读:

看涨:A/D线与市场指数一起或领先创出新高。
     这确认了上涨中的广泛参与。

看跌:市场指数创出新高,但A/D线未能确认
     (创出更低的高点)。这种负面背离是
     即将到来的市场下跌最可靠的警告之一。

     温斯坦指出,A/D线在1987年崩盘前几个月就见顶了,
     给那些关注的人提供了警告。

11.2 新高与新低

创52周新高的股票数量与创52周新低的股票数量是次要的广度衡量:

健康市场:   新高持续多于新低。
             新高随着市场上涨而扩大。

警告:       新高开始缩小,即使指数上涨。
             新低开始增加。

看跌:       新低持续多于新高。
             即使在市场反弹日,新低仍然居高不下。

11.3 高于30-WMA的股票百分比

虽然这不是温斯坦原文明确的内容,但他的框架的自然延伸是衡量交易于其30-WMA之上的股票百分比:

> 70%高于30-WMA  →  广泛第2阶段上涨;看涨市场环境。
40-70%高于30-WMA →  混合;需要精选个股。
< 40%高于30-WMA  →  大多数处于第3/4阶段;需要防御姿态。
< 20%高于30-WMA  →  广泛第4阶段下跌;看跌市场环境。

12. 整体市场时机

12.1 市场也有阶段

温斯坦将相同的四阶段框架应用于主要市场指数(标准普尔500、纽约证券交易所综合指数)。市场本身经历第1阶段(筑底)、第2阶段(牛市)、第3阶段(筑顶)和第4阶段(熊市)。

12.2 市场阶段与个股行动

市场处于第2阶段:
  - 积极买入第2阶段突破。
  - 风在背后;大多数突破都会成功。
  - 满仓或接近满仓。

市场处于第3阶段:
  - 减少敞口。卖出显示个别第3阶段特征的股票。
  - 除了最强势的股票外,不发起新的多头仓位。
  - 开始建立做空候选观察名单。
  - 提高现金。

市场处于第4阶段:
  - 不建立新的多头仓位。期间。
  - 如果有经验,做空第4阶段跌破。
  - 否则,持现金并等待。
  - 这是最难遵循的规则,也是最重要的规则。

市场处于第1阶段:
  - 建立正在形成第1阶段底部的股票观察名单。
  - 谨慎地开始买入早期第2阶段突破。
  - 熊市可能已结束,但确认仍在形成。

12.3 货币指标

温斯坦还跟踪利率方向作为市场时机背景:

- 利率下降对股票看涨。
  当利率下降时,市场更可能处于或进入第2阶段。

- 利率上升对股票看跌。
  当利率上升时,市场更可能处于或进入第3/4阶段。

- 利率的方向比水平更重要。

13. 止损设置

13.1 温斯坦的止损哲学

温斯坦将止损视为不可协商的。每个仓位都必须有预先确定的退出点,在交易进入之前就建立。他明确指出:止损不是建议——它是与自己的合同。

13.2 多头仓位止损规则

方法1:突破位下方
  - 放置在价格向上突破的阻力位下方。
  - 逻辑:如果价格跌回该位下方,突破已失败。
  - 典型距离:突破位下方3-5%。

方法2:30-WMA下方
  - 放置在当前30-WMA值下方。
  - 逻辑:第2阶段股票应保持在30-WMA之上。
  - 随着30-WMA上升,向上跟踪止损。
  - 这是较宽的止损——适合更长线的仓位交易员。

方法3:最近支撑位下方
  - 确定最近的重要支撑位(如第2阶段内最近回调的低点)。
  - 放置在该位下方。

13.3 跟踪止损

随着第2阶段上涨进展,温斯坦建议跟踪止损:

- 将止损移动到上升30-WMA下方。
- 或者,在周线图上跟踪每个连续更高低点的下方。
- 永远不要向下移动止损。只能沿交易方向移动止损。
- 对于空头仓位,将买入止损跟踪到下降30-WMA下方
  或每个连续更低高点的下方。

13.4 心理止损与实际止损

温斯坦更喜欢实际止损单放置在经纪商处,而不是心理止损,因为在那一刻的心理压力会导致大多数交易员推翻他们的心理止损。实际止损自动执行,将情绪从等式中移除。


14. 常见错误

14.1 买入第4阶段股票("逢低吸纳")

最危险的错误。从100跌到50的股票不是"便宜"——它在第4阶段。它可能跌至25或10。温斯坦提供了众多历史例子,说明"蓝筹股"在投资者坚持认为他们捡了便宜货时下跌了80-90%。

14.2 向下摊平

与上述密切相关。向亏损仓位加仓,在温斯坦的框架中,是在向第4阶段仓位加仓——在对你不利的走势中加倍。他明确表示:永远不要向下摊平。

14.3 忽视30-WMA

在下降的30-WMA下方买入股票的交易员是在与主要趋势作斗争。基本面分析、"估值"或信念都不能_override第4阶段下跌中的股票的现实。

14.4 在低成交量时买入突破

没有成交量的突破就像没有子弹的手枪——看起来危险但没有力量。许多失败的突破可以通过简单地坚持成交量确认规则来避免。

14.5 忽视市场

在未评估整体市场的情况下买入个股,就像不检查天气就驾驶船一样。即使是最好的第2阶段设置,在广泛市场处于第3或第4阶段时,失败率也高得多。

14.6 贯穿第3阶段持有

在一直是大赢家的股票进入第3阶段时持有它的诱惑是巨大的。"只是盘整。""它会回来的。"大多数时候,它不会。温斯坦认为,通过第3阶段持有并进入第4阶段回吐大部分来之不易的收益,是投资者最常见且代价最高的错误。

14.7 拒绝做空

温斯坦认为,在熊市中获利的能力是必备技能。只做多头的投资者在第4阶段下跌期间是闲置的——这可能持续12-18个月或更长时间。做空第4阶段跌破是阶段分析框架的自然且合乎逻辑的延伸。

14.8 过度依赖基本面

温斯坦并不否定基本面,但他让基本面服从于图表。在第4阶段下跌中拥有出色业绩的公司不是买入。市场在告诉你一些基本面尚未揭示的事情。倾听市场。


15. 完整交易生命周期示例

以下用温斯坦的框架说明了一只假设股票XYZ Corp完成所有四个阶段完整周期的示例。

15.1 第4阶段下跌(我们的交易之前)

时间线:第1-40周

XYZ从$80的高点下跌近一年至$35。
30-WMA以约$48向下倾斜并下降。
价格远低于30-WMA。
每次反弹尝试都在下降的30-WMA处或下方被压制。
成交量适中,偶尔在大跌周出现峰值。
相对于标准普尔500的相对强度稳步下降。

行动:不要买入。不要试图"抄底"。如果已经做空,
     继续持有空头仓位。

15.2 第1阶段筑底(观察名单阶段)

时间线:第40-75周

XYZ停止下跌。价格在$32至$40之间企稳。
一直在下降的30-WMA逐渐趋平。
价格多次穿越30-WMA上下——没有明确趋势。
成交量显著枯竭。股票"无聊"。
新闻报道很少。分析师已下调至"持有"或"卖出"。

底部现在已有35周。温斯坦会指出:"底部越大,
潜在的走势越大。"

行动:将XYZ放入观察名单。在$41(阻力位——
     交易区间的上边界)设置警报。还不是买入。

15.3 第2阶段突破(买入)

时间线:第76周

XYZ周收盘于$40阻力位之上,为$42.50。
周成交量为320万股,而10周平均为110万股。
30-WMA已趋平并刚刚开始向上拐头,现在为$37。
相对于标准普尔500的相对强度在最近几周转向上升。
XYZ的所属行业组(如半导体)处于第2阶段。
整体市场(标准普尔500)处于第2阶段。

入场:以$42.50买入(周收盘于成交量3倍于阻力位之上)。
止损:$38.50(突破位下方,接近30-WMA)。
风险:$42.50 - $38.50 = 每手$4.00(9.4%)。

15.4 第2阶段上涨(持有趋势)

时间线:第76-130周

第76周:以$42.50买入。止损$38.50。
第85周:XYZ回调至$44,成交量低。30-WMA现在为$39。
        第86周反弹——加仓。提高止损至$41。
第100周:XYZ在$58。30-WMA在$47并稳步上升。
        将止损跟踪至30-WMA下方:$45.50。
第115周:XYZ在$72。30-WMA在$56。
        将止损跟踪至$54.50。
第125周:XYZ在$78创出新高。这次反弹的成交量
        低于先前反弹至$72的成交量。注意背离。
第128周:XYZ回调至$73。这次下跌的成交量
        高于反弹至$78的成交量。

        警告信号:成交量背离 + 潜在动量丧失。
        30-WMA在$62且仍在上升,所以我们保持做多,
        但提高警觉。

15.5 第3阶段派发(卖出)

时间线:第130-155周

第130周:XYZ反弹至$76,但未能高于$78创出新高。
第135周:XYZ在成交量放大时跌至$68。在成交量低时反弹至$74。
第140周:30-WMA现在为$70并趋平——不再上升。
         价格在趋平的30-WMA附近波动。
         这是经典的第3阶段派发。

卖出:在第140周以$72退出全部仓位。
     平均入场约$43(混合)。
     收益:($72 - $43) / $43 = 67%。

     这不是顶部($78)。温斯坦会说:"卖出太早是奢侈。
     卖出太晚是灾难。"

15.6 第4阶段下跌(做空或避开)

时间线:第155-200周

第155周:XYZ在成交量放大时跌破$65支撑(第3阶段区间下边界)。
        30-WMA在$69且现在下降。

做空:有经验的交易员在$64做空。
     在$70买入止损(跌破位和30-WMA上方)。

第170周:XYZ在$50。30-WMA在$63,下降。
        将买入止损跟踪至$55(最近更低高点上方)。

第185周:XYZ在$38。在大跌周出现成交量峰值——可能的投降,
        但第1阶段底部尚未形成。

第200周:XYZ在$35附近企稳。成交量枯竭。30-WMA趋平。
        周期正在重新开始。

平仓:在第1阶段筑底开始时以$37平仓。
     收益:($64 - $37) / $64 = 42%(做空方)。

16. 实施伪代码

16.1 阶段分类器

def classify_stage(weekly_closes, weekly_volumes, lookback=30):
    """
    将股票分类为温斯坦四个阶段之一。

    参数:
        weekly_closes: 每周收盘价列表(最近的在最后)
        weekly_volumes: 每周成交量列表(最近的在最后)
        lookback: 移动平均线期间(默认30周)

    返回:
        stage: int (1, 2, 3, 或 4)
        confidence: float (0.0 到 1.0)
        details: dict 包含支持证据
    """

    # --- 计算30周移动平均线 ---
    ma_30 = simple_moving_average(weekly_closes, lookback)

    # 当前值
    current_price = weekly_closes[-1]
    current_ma = ma_30[-1]

    # --- MA斜率(最近几周的变化率) ---
    ma_slope = (ma_30[-1] - ma_30[-5]) / ma_30[-5]  # 5周斜率
    ma_slope_prior = (ma_30[-5] - ma_30[-10]) / ma_30[-10]

    SLOPE_FLAT_THRESHOLD = 0.005   # 5周+/- 0.5% = "平"
    SLOPE_UP_THRESHOLD   = 0.01   # 5周 > 1% = "上升"
    SLOPE_DOWN_THRESHOLD = -0.01  # 5周 < -1% = "下降"

    # --- 价格相对于MA的位置 ---
    price_above_ma = current_price > current_ma
    pct_above_ma = (current_price - current_ma) / current_ma

    # --- MA方向分类 ---
    if ma_slope > SLOPE_UP_THRESHOLD:
        ma_direction = "RISING"
    elif ma_slope < SLOPE_DOWN_THRESHOLD:
        ma_direction = "FALLING"
    else:
        ma_direction = "FLAT"

    # --- 计数最近期间高于/低于MA的周数 ---
    recent_weeks = 10
    weeks_above = sum(1 for i in range(-recent_weeks, 0)
                      if weekly_closes[i] > ma_30[i])

    # --- 成交量趋势 ---
    avg_volume_recent = mean(weekly_volumes[-10:])
    avg_volume_prior  = mean(weekly_volumes[-30:-10])
    volume_trend = avg_volume_recent / avg_volume_prior

    # --- 更高高/更低低形态 ---
    recent_highs = get_swing_highs(weekly_closes, window=5, count=3)
    recent_lows  = get_swing_lows(weekly_closes, window=5, count=3)
    making_higher_highs = is_ascending(recent_highs)
    making_higher_lows  = is_ascending(recent_lows)
    making_lower_lows   = is_descending(recent_lows)
    making_lower_highs  = is_descending(recent_highs)

    # ========== 阶段分类逻辑 ==========

    # 第2阶段:上涨
    if (ma_direction == "RISING"
        and price_above_ma
        and weeks_above >= 7  # 最近10周中7+周高于MA
        and (making_higher_highs or making_higher_lows)):
        return 2, compute_confidence(...), {...}

    # 第4阶段:下跌
    if (ma_direction == "FALLING"
        and not price_above_ma
        and weeks_above <= 3  # 最近10周中3周或更少高于MA
        and (making_lower_lows or making_lower_highs)):
        return 4, compute_confidence(...), {...}

    # 第3阶段:筑顶(在上升后MA平)
    if (ma_direction == "FLAT"
        and ma_slope_prior > SLOPE_UP_THRESHOLD  # 之前在上升
        and 3 <= weeks_above <= 7):              # 混合高于/低于
        return 3, compute_confidence(...), {...}

    # 第1阶段:筑底(在下降后MA平)
    if (ma_direction == "FLAT"
        and ma_slope_prior < SLOPE_DOWN_THRESHOLD  # 之前在下降
        and 3 <= weeks_above <= 7):              # 混合高于/低于
        return 1, compute_confidence(...), {...}

    # --- 回退:模糊情况 ---
    # 使用之前的MA方向来消除歧义
    if ma_slope_prior > 0:
        return 3, 0.4, {"note": "模糊,倾向于第3阶段(上涨后)"}
    else:
        return 1, 0.4, {"note": "模糊,倾向于第1阶段(下跌后)"}

16.2 突破检测器

def detect_stage2_breakout(weekly_closes, weekly_highs, weekly_lows,
                            weekly_volumes, ma_30):
    """
    检测最近一周是否符合第2阶段突破。

    返回:
        is_breakout: bool
        quality: str ("strong", "moderate", "weak")
        details: dict
    """

    current_close  = weekly_closes[-1]
    current_volume = weekly_volumes[-1]
    current_ma     = ma_30[-1]

    # --- 步骤1:识别阻力位 ---
    # 回看筑底期间,在平MA期间(第1阶段区间)
    # 找到最高价。
    basing_period = identify_basing_period(weekly_closes, ma_30)
    if basing_period is None:
        return False, "none", {"reason": "未识别到筑底期间"}

    resistance = max(weekly_highs[basing_period.start:basing_period.end])
    basing_weeks = basing_period.end - basing_period.start

    # --- 步骤2:检查价格是否收于阻力位上方 ---
    broke_resistance = current_close > resistance

    # --- 步骤3:检查成交量 ---
    avg_volume = mean(weekly_volumes[-10:-1])  # 排除当前周
    volume_ratio = current_volume / avg_volume
    volume_confirmed = volume_ratio >= 2.0

    # --- 步骤4:检查MA条件 ---
    ma_slope = (ma_30[-1] - ma_30[-5]) / ma_30[-5]
    ma_turning_up = ma_slope >= -0.002  # 平或上升
    price_above_ma = current_close > current_ma

    # --- 步骤5:组合 ---
    is_breakout = (broke_resistance and price_above_ma and ma_turning_up)

    if not is_breakout:
        return False, "none", {
            "broke_resistance": broke_resistance,
            "price_above_ma": price_above_ma,
            "ma_turning_up": ma_turning_up
        }

    # --- 步骤6:质量评估 ---
    quality_score = 0
    if volume_confirmed:
        quality_score += 3         # 成交量至关重要
    elif volume_ratio >= 1.5:
        quality_score += 1         # 边际成交量

    if basing_weeks >= 20:
        quality_score += 2         # 长底 = 更强
    elif basing_weeks >= 10:
        quality_score += 1

    if ma_slope > 0.005:
        quality_score += 1         # MA已在上升

    if quality_score >= 5:
        quality = "strong"
    elif quality_score >= 3:
        quality = "moderate"
    else:
        quality = "weak"

    return True, quality, {
        "resistance": resistance,
        "breakout_price": current_close,
        "volume_ratio": volume_ratio,
        "basing_weeks": basing_weeks,
        "ma_slope": ma_slope,
        "quality_score": quality_score
    }

16.3 市场广度分析器

class MarketBreadthAnalyzer:
    """
    使用温斯坦的广度指标评估整体市场健康状况。
    """

    def __init__(self):
        self.ad_line = []        # 累计腾落线
        self.nh_nl_history = []  # 新高减新低历史

    def update(self, advancing, declining, new_highs, new_lows):
        """用市场广度数据每天调用一次。"""
        ad_value = advancing - declining
        cumulative = (self.ad_line[-1] if self.ad_line else 0) + ad_value
        self.ad_line.append(cumulative)
        self.nh_nl_history.append(new_highs - new_lows)

    def assess_market_health(self, index_prices):
        """
        返回:
            health: str ("bullish", "cautious", "bearish")
            signals: list of observations
        """
        signals = []

        # --- A/D线背离 ---
        if len(self.ad_line) >= 52 and len(index_prices) >= 52:

            # 检查指数是否创出52周新高
            index_at_high = index_prices[-1] >= max(index_prices[-52:])
            ad_at_high = self.ad_line[-1] >= max(self.ad_line[-52:])

            if index_at_high and not ad_at_high:
                signals.append("看跌背离:指数在新高但A/D线未确认。")

            if not index_at_high and ad_at_high:
                signals.append("看涨背离:A/D线在新高但指数尚未跟进。")

        # --- 新高 vs. 新低 ---
        if len(self.nh_nl_history) >= 10:
            recent_nh_nl = self.nh_nl_history[-10:]
            avg_nh_nl = mean(recent_nh_nl)

            if avg_nh_nl > 100:
                signals.append("广度强劲:新高占主导。")
            elif avg_nh_nl < -100:
                signals.append("广度疲弱:新低占主导。")
            elif avg_nh_nl < 0 and index_prices[-1] > index_prices[-20]:
                signals.append("广度警告:指数上涨但新低多于新高——广度恶化。")

        # --- A/D线趋势 ---
        if len(self.ad_line) >= 30:
            ad_ma = mean(self.ad_line[-30:])
            if self.ad_line[-1] > ad_ma and self.ad_line[-1] > self.ad_line[-10]:
                signals.append("A/D趋势上升:A/D线处于上升趋势。")
            elif self.ad_line[-1] < ad_ma and self.ad_line[-1] < self.ad_line[-10]:
                signals.append("A/D趋势下降:A/D线处于下降趋势。")

        # --- 整体评估 ---
        bearish_count = sum(1 for s in signals if "BEARISH" in s or "WEAK" in s
                           or "WARNING" in s or "DOWN" in s)
        bullish_count = sum(1 for s in signals if "BULLISH" in s or "STRONG" in s
                           or "UP" in s)

        if bearish_count >= 2:
            health = "bearish"
        elif bullish_count >= 2:
            health = "bullish"
        else:
            health = "cautious"

        return health, signals

    def compute_pct_above_30wma(self, all_stocks_data):
        """
        计算交易于其30-WMA之上的股票百分比。

        参数:
            all_stocks_data: 包含'price'和'ma_30'键的字典列表

        返回:
            pct: float (0.0 到 100.0)
            interpretation: str
        """
        above = sum(1 for s in all_stocks_data if s['price'] > s['ma_30'])
        total = len(all_stocks_data)
        pct = (above / total) * 100 if total > 0 else 0

        if pct > 70:
            interpretation = "广泛第2阶段环境——积极买入。"
        elif pct > 40:
            interpretation = "混合——有选择性,偏好最强设置。"
        elif pct > 20:
            interpretation = "大多数处于第3/4阶段——防御姿态。"
        else:
            interpretation = "广泛第4阶段下跌——完全避开多头。"

        return pct, interpretation

16.4 完整温斯坦交易系统

class WeinsteinTradingSystem:
    """
    将阶段分类、突破检测和市场广度整合到统一的决策引擎中。
    """

    def __init__(self, market_breadth_analyzer):
        self.breadth = market_breadth_analyzer
        self.positions = {}

    def scan_for_buys(self, universe, index_prices):
        """筛选符合第2阶段突破候选的通用领域。"""

        # 步骤1:检查市场健康状况
        market_health, _ = self.breadth.assess_market_health(index_prices)
        if market_health == "bearish":
            return []  # 看跌市场中不买

        candidates = []

        for stock in universe:
            # 步骤2:分类阶段
            stage, confidence, details = classify_stage(
                stock.weekly_closes, stock.weekly_volumes
            )

            if stage != 1 and stage != 2:
                continue  # 只对第1→2阶段转换感兴趣

            # 步骤3:检查突破
            ma_30 = simple_moving_average(stock.weekly_closes, 30)
            is_breakout, quality, bo_details = detect_stage2_breakout(
                stock.weekly_closes, stock.weekly_highs,
                stock.weekly_lows, stock.weekly_volumes, ma_30
            )

            if not is_breakout:
                continue

            # 步骤4:检查相对强度
            rs = compute_relative_strength(stock.weekly_closes, index_prices)
            if rs.trend != "RISING":
                continue

            # 步骤5:检查行业组阶段
            group_stage = classify_stage(
                stock.group_weekly_closes, stock.group_weekly_volumes
            )[0]
            if group_stage >= 3:
                continue  # 组处于第3或第4阶段

            # 步骤6:计算止损和风险
            stop_price = max(
                bo_details["resistance"] * 0.97,  # 突破位下方3%
                ma_30[-1] * 0.98                   # 30-WMA下方2%
            )
            risk_pct = (stock.weekly_closes[-1] - stop_price) / stock.weekly_closes[-1]

            if risk_pct > 0.10:
                continue  # 风险太高(>10%)

            candidates.append({
                "ticker": stock.ticker,
                "price": stock.weekly_closes[-1],
                "breakout_quality": quality,
                "volume_ratio": bo_details["volume_ratio"],
                "basing_weeks": bo_details["basing_weeks"],
                "stop_price": stop_price,
                "risk_pct": risk_pct,
                "rs_trend": rs.trend,
                "group_stage": group_stage,
                "market_health": market_health
            })

        # 按质量和成交量排序
        candidates.sort(key=lambda x: (
            {"strong": 3, "moderate": 2, "weak": 1}[x["breakout_quality"]],
            x["volume_ratio"]
        ), reverse=True)

        return candidates

    def manage_positions(self):
        """周度仓位审查——跟踪止损和卖出信号。"""

        for ticker, pos in list(self.positions.items()):
            stock = get_stock_data(ticker)
            ma_30 = simple_moving_average(stock.weekly_closes, 30)
            stage, _, _ = classify_stage(stock.weekly_closes, stock.weekly_volumes)

            current_price = stock.weekly_closes[-1]

            # --- 硬止损触发 ---
            if current_price <= pos.stop_price:
                self.execute_sell(ticker, "STOP_HIT")
                continue

            # --- 检测到第3阶段:卖出 ---
            if stage == 3:
                self.execute_sell(ticker, "STAGE_3_DISTRIBUTION")
                continue

            # --- 30-WMA在上涨后趋平 ---
            ma_slope = (ma_30[-1] - ma_30[-5]) / ma_30[-5]
            if ma_slope < 0.002 and pos.stage_at_entry == 2:
                self.execute_sell(ticker, "MA_FLATTENING")
                continue

            # --- 价格收于30-WMA下方 ---
            if current_price < ma_30[-1] and stage != 2:
                self.execute_sell(ticker, "BELOW_30WMA")
                continue

            # --- 跟踪止损 ---
            new_stop = ma_30[-1] * 0.98
            if new_stop > pos.stop_price:
                pos.stop_price = new_stop

17. 核心语录

"在股市中获胜的全部秘密,是在你不正确的时候尽可能少亏损。"

"不要买入处于第4阶段下跌的股票——即使该公司是有史以来最伟大的东西。"

"买入的时机是在股票在大成交量下从底部突破时,而不是在已经大涨之后。"

"如果你保持中线至长线的视角,周线图和30周移动平均线将让你保持在主要趋势的正确一侧。"

"底部越长,潜在的走势越大。一只筑底一年的股票然后突破,其涨幅将远远大于只筑底三个月的股票。"

"不要与盘面对抗。如果市场处于第4阶段下降趋势,即使是最好的组里最好的股票也是在逆流而上。"

"成交量是让火车运行的蒸汽。没有成交量的突破是可疑的。"

"卖出太早总是比卖出太晚好。你总可以买回继续上涨的股票。你无法挽回持有穿过第4阶段下跌的损害。"

"相对强度是一个奇妙的工具。一只跑赢市场的股票在告诉你一些事情——倾听。"

"你不需要知道为什么一只股票在上涨。阶段分析告诉你它确实在上涨,这就是全部重要的事情。"

"腾落线是市场健康状况的最佳单一指标。当它与流行平均线背离时,要注意——平均线在撒谎。"

"做空并不是不美国、不道德或危险的。它只是阶段分析合乎逻辑的延伸。如果你能够识别第2阶段上涨,你就能够识别第4阶段下跌。"


本规范完全源自史丹·温斯坦的《在牛熊市中盈利的秘密》(1988)。温斯坦的阶段分析框架影响了一代又一代的交易员,包括马克·米内尔维尼、大卫·瑞安和许多其他市场从业者。该系统在出版近四十年后仍然具有持久的相关性——这是价格周期分析永恒性质的证明。