Trader Vic — 完整实施规范

基于 Victor Sperandeo,Trader Vic: Methods of a Wall Street Master(1991)


目录

  1. 概述
  2. 道氏理论精化:斯佩兰德奥的现代解读
  3. 1-2-3 趋势改变方法
  4. 2B 形态:假突破反转
  5. 利用货币政策把握市场时机
  6. 测量波动:摆动测量技术
  7. 风险管理:3比1 盈亏比规则
  8. 仓位管理
  9. 不同市场环境的交易策略
  10. 心理纪律
  11. 期权策略
  12. 常见错误
  13. 交易生命周期示例:1-2-3 反转
  14. 实施伪代码
  15. 关键语录

1. 概述

1.1 本书是什么

Trader Vic 是一本关于市场时机把握、趋势识别和风险管理的实战手册,由专业交易员 Victor Sperandeo 撰写,他拥有长达二十年的卓越交易记录。斯佩兰德奥最为人熟知的是精准预判 1987 年股市崩盘——他在黑色星期一前几天做空市场,从历史上最剧烈的暴跌中获得了巨大利润。

与许多专注于单一技术的交易书籍不同,斯佩兰德奥呈现了一个综合框架,将精化的道氏理论、特定价格形态(1-2-3 反转和 2B)、货币政策分析、摆动测量和严格的风险管理整合为一个连贯的交易方法论。本书架起了经典技术分析与规则化执行之间的桥梁。

1.2 核心哲学

斯佩兰德奥的方法建立在几个基本原则之上:

1.3 关于 Victor Sperandeo

斯佩兰德奥于 1960 年代末开始交易,职业生涯横跨股票、期权、期货和外汇。他因稳定性和精确性在华尔街获得了"Trader Vic"的昵称。他的交易记录显示,在 18 年中仅有一年亏损,年均回报率超过 70%。他对 1987 年崩盘的预判奠定了他的声誉——他用 1-2-3 方法在道琼斯工业平均指数上识别出顶部形态,在 10 月暴跌前几周就布局做空,捕捉了他职业生涯中最大单事件利润之一。

1.4 本书结构

本书从理论到实践按逻辑顺序推进:哲学基础、趋势识别(道氏理论和形态识别)、时机工具(货币政策和摆动测量)、风险管理、仓位管理、市场环境分类、心理素质和期权策略。每一章都建立在前一章的基础上,形成了一个完整的交易系统,而非孤立技术的集合。


2. 道氏理论精化:斯佩兰德奥的现代解读

2.1 经典道氏理论回顾

Charles Dow 的原始理论,由 William Hamilton 和 Robert Rhea 正式化,建立了几个原则:

2.2 经典道氏理论的不足

斯佩兰德奥指出了经典道氏理论的几个弱点:

  1. 信号来得太晚。 等待两个平均指数确认往往意味着错失很大一部分行情。
  2. 确认要求过于僵化。 在现代市场中,工业股与运输股之间的关系已不如道氏时代那样重要。
  3. 趋势改变的定义模糊。 经典道氏理论缺乏趋势何时反转的精确、客观标准。
  4. 忽视货币政策背景。 道氏理论将价格走势与驱动它的力量割裂开来。

2.3 斯佩兰德奥的精化

斯佩兰德奥保留了道氏理论的核心见解——趋势会持续,反转遵循可识别的序列——同时现代化了应用:

经典道氏理论 斯佩兰德奥的精化
等待双重平均指数确认 在主交易品种上使用 1-2-3 方法
主观评估峰谷 客观的三步反转标准
没有进场的时机机制 趋势线突破提供具体入场触发
没有明确的风险管理 在形态失效点预设止损
没有货币政策背景 利率和美联储政策叠加

2.4 趋势定义(斯佩兰德奥版本)

斯佩兰德奥精确地定义趋势:

趋势持续有效,直到满足 1-2-3 反转标准。这消除了困扰许多趋势跟随方法的模糊性。

2.5 趋势线绘制规则

斯佩兰德奥提供了绘制有效趋势线的具体规则:

  1. 连接两个最重要的低点(用于上升趋势线)或两个最重要的低点(用于下降趋势线)。
  2. 趋势线在两个锚点之间不得切割任何价格柱
  3. 如果必须调整线条,始终从最近的重要点向后绘制到最早的不违反不切割规则的点。
  4. 趋势线被触及的次数越多,最终被突破的意义就越大。
  5. 趋势线越陡,越容易被突破,且突破的意义越小。极端角度(超过 60 度)的趋势线本身就不可持续。

3. 1-2-3 趋势改变方法

3.1 概念

1-2-3 趋势改变方法是斯佩兰德奥的标志性贡献。它提供了一个客观的三步序列来确认趋势反转。每一步必须按顺序发生。如果任何一步失败,反转未获确认,现有趋势继续有效。

3.2 三步骤(上升趋势反转为下降趋势)

第一步:趋势线被突破。

第二步:价格未能创新高。

第三步:价格穿透之前的反应低点。

3.3 三步骤(下降趋势反转为上升趋势)

镜像应用:

第一步: 连接重要高点的下降趋势线以收盘价向上突破。

第二步: 价格下跌但未能创新低(创造更高的低点)。

第三步: 价格反弹至最近的显著摆动高点之上,建立更高的低点。

3.4 入场和止损设置

入场策略 描述 止损位置
激进(第一步) 在趋势线突破时入场 止损于最近的摆动高点之上(上升趋势反转)或最近的摆动低点之下(下降趋势反转)
温和(第二步) 在未能创新极端时入场 止损于之前摆动高低点的极端之外
保守(第三步) 在穿透之前反应点时入场 止损于更低的低点之上(上升趋势反转)或更高的低点之下(下降趋势反转)

斯佩兰德奥本人倾向于在第二步以初始仓位入场,然后在第三步确认时加仓。这在早期入场和形态确认之间取得了平衡。

3.5 时间框架应用

1-2-3 方法适用于所有时间框架:

3.6 确认标准

并非所有 1-2-3 形态都相同。斯佩兰德奥按可靠性排序:


4. 2B 形态:假突破反转

4.1 概念

2B 形态,也称为**"弹簧"(威科夫术语)或"失败突破",是一种反转形态,套住在创新高或新低时入场的交易者。它被称为"2B"是因为市场似乎完成了趋势延续的第二步(创新极端),然后立即反转**,将看起来像趋势确认转化为强有力的反转信号。

4.2 看涨 2B(底部反转)

  1. 价格处于下降趋势,创出新低,表面确认下降趋势。
  2. 1 到 5 根柱内,价格反弹至之前的低点之上——"新低"已被否定
  3. 新低未能维持触发了新鲜空头的止损并吸引买家,创造向上的动能。
  4. 入场: 当价格收回到之前的摆动低点之上时做多。
  5. 止损: 略低于假的新低。

4.3 看跌 2B(顶部反转)

  1. 价格处于上升趋势,创出新高,表面确认上升趋势。
  2. 1 到 5 根柱内,价格跌回至之前的低点之下——"新高"已被否定
  3. 新高未能维持触发了新鲜多头的止损并吸引卖家,创造向下的动能。
  4. 入场: 当价格收回到之前的摆动高点之下时做空。
  5. 止损: 略高于假的新高。

4.4 为什么 2B 有效

2B 利用了特定的市场动态:

4.5 2B 确认标准

4.6 1-2-3 和 2B 的结合

当两种形态汇聚时产生最强大的形态:


5. 利用货币政策把握市场时机

5.1 核心原则

斯佩兰德奥认为,利率和美联储政策是驱动股票市场主要趋势的最重要单一因素。虽然价格形态告诉你何时行动,但货币政策告诉你哪个方向具有更高概率。

利率的方向是决定股票市场主要趋势的最主导因素。

5.2 利率框架

美联储政策 利率 股票市场偏向 交易含义
宽松(降息) 下降 看涨 偏好多头;逢低买入;从下降趋势到上升趋势的 1-2-3 反转是高置信度
中性/过渡 稳定 不确定 降低仓位规模;专注于较短时间框架;灵活应对
紧缩(加息) 上升 看跌 偏好空头或现金;逢高卖出;从上升趋势到下降趋势的 1-2-3 反转是高置信度

5.3 关键货币指标

斯佩兰德奥追踪几个具体指标:

  1. 联邦基金利率: 美联储政策最直接的衡量标准。连续三次降息历史上标志牛市周期开始。连续三次加息标志熊市周期开始。
  2. 贴现率变化: 降息看涨;加息看跌。在一系列变动之后的首次方向变化最为重要。
  3. 收益率曲线形态: 陡峭化曲线(长期利率比短期利率上升更快,或短期利率下降更快)看涨。倒挂曲线(短期利率高于长期利率)是强有力的看跌警告。
  4. 货币供应增长: 加速增长的货币供应看涨;减速增长看跌。
  5. 通胀趋势: 上升的通胀迫使美联储紧缩,这看跌。下降的通胀允许美联储宽松,这看涨。

5.4 三次降息规则

斯佩兰德奥最具体的时间规则之一:

5.5 将货币政策与价格形态结合

该方法结合宏观和微观:

  1. 确定货币环境: 美联储是宽松、紧缩还是中性?
  2. 顺着货币趋势交易: 在宽松环境中,强调多头形态;在紧缩环境中,强调空头形态。
  3. 用价格形态把握时机: 1-2-3 和 2B 形态在宏观框架内提供具体的入场和出场点位。
  4. 根据置信度调整仓位: 当货币政策和价格形态一致时,使用全部仓位。当它们冲突时,降低仓位或观望。

5.6 1987 年崩盘:案例研究

斯佩兰德奥对 1987 年崩盘的著名预判说明了这种整合:


6. 测量波动:摆动测量技术

6.1 目的

一旦趋势改变被识别,下一个问题就是:行情可能走多远? 斯佩兰德奥使用摆动测量技术来建立现实的盈利目标。这些目标有两个目的:设置盈利目标和计算建仓前的盈亏比。

6.2 摆动规则

基本的摆动测量技术:

对于下降趋势反转后的上涨:

  1. 测量先前下跌的距离——从前一个下跌摆动的最高点到最低点。
  2. 从反转低点预期的最小移动通常是先前下跌的 50% 至 62%(下跌的斐波那契回撤)。
  3. 完整测量移动等于先前下跌的整个距离,从反转低点上方向上投射。

对于上升趋势反转后的下跌:

  1. 测量先前上涨的距离——从前一个上涨摆动的最低点到最高点。
  2. 从反转高点预期的最小移动通常是先前上涨的 50% 至 62%
  3. 完整测量移动等于先前上涨的整个距离,从反转高点下方向下投射。

6.3 多重摆动目标

斯佩兰德奥使用目标层级:

目标水平 计算 用途
T1(最小) 先前摆动的 50% 部分盈利目标;开始收紧止损
T2(标准) 先前摆动的 62%(斐波那契) 中等交易的主要盈利目标
T3(完整测量移动) 先前摆动的 100% 强烈趋势条件下的目标
T4(扩展) 先前摆动的 127% 或 162% 当货币政策强烈支持行情时作为目标

6.4 使用目标计算盈亏比

在建仓前,斯佩兰德奥计算:

如果摆动目标相对于所需止损未提供至少 3:1 的比例,交易放弃——无论形态看起来多好。

6.5 根据背景调整目标


7. 风险管理:3比1 盈亏比规则

7.1 核心规则

斯佩兰德奥最不可妥协的规则:

除非潜在盈利至少是潜在风险的三倍,否则不要建仓。

这意味着如果止损代表每股 1 美元的风险,盈利目标必须至少为每股 3 美元。3:1 的比例确保交易者即使错误多于正确仍然可以盈利。

7.2 数学论证

胜率 平均盈利 : 平均亏损 每 100 笔交易的净结果(每笔承担 $1 风险)
33% 3:1 33 × $3 - 67 × $1 = +$32(盈利)
40% 3:1 40 × $3 - 60 × $1 = +$60(高度盈利)
50% 3:1 50 × $3 - 50 × $1 = +$100(非常盈利)
33% 2:1 33 × $2 - 67 × $1 = -$1(盈亏平衡)
33% 1:1 33 × $1 - 67 × $1 = -$34(亏损)

3:1 规则提供了很大的安全边际。即使胜率低于 35%,交易者仍然可以盈利。

7.3 止损设置规则

斯佩兰德奥的止损基于形态失效,而非任意百分比:

  1. 1-2-3 入场(第二步): 止损于近期高点之上(做空)或近期低点之下(做多)。如果该水平被突破,形态失效。
  2. 1-2-3 入场(第三步): 止损于更低的低点之上(做空)或更高的低点之下(做多)。
  3. 2B 入场: 止损于假突破极端之外。
  4. 一般规则: 永远不要将止损移离入场点。止损只能收紧(朝盈利方向移动)。

7.4 最大亏损规则

除了每笔交易的止损,斯佩兰德奥还执行投资组合层面的风险控制:

7.5 亏损恢复不对称性

斯佩兰德奥强调回撤的数学:

亏损 需要恢复的盈利
10% 11.1%
20% 25.0%
30% 42.9%
50% 100.0%
75% 300.0%

这种不对称性是资本保全优先于盈利最大化的原因。50% 的回撤需要 100% 的回报才能回到原点——这是一个极其困难的任务。


8. 仓位管理

8.1 核心仓位管理公式

斯佩兰德奥使用基于风险的方法确定仓位规模:

仓位规模 = (资本 × 最大风险 %)/(入场价格 - 止损价格)

示例:

8.2 分批建仓

斯佩兰德奥倡导与 1-2-3 方法一致的金字塔式加仓方法:

  1. 初始仓位(计划的 50%): 在 1-2-3 的第二步(未能创新极端)时入场。
  2. 加仓(计划的 30%): 在第三步确认(穿透之前反应点)时加仓。
  3. 最后加仓(计划的 20%): 在第三步后的第一次回调时加仓,前提是回调保持在第三步水平之上。

递减的仓位规模确保平均入场价格适度改善,而最大配置发生在最早(也是最有利)的价格。

8.3 加仓规则

8.4 根据置信度调整仓位

置信度水平 标准 规模
货币政策一致 + 清晰的 1-2-3 + 强劲成交量 + 多时间框架一致 计算仓位的 100%
满足大多数标准但一个因素不确定 计算仓位的 50-75%
逆势交易或模糊形态 计算仓位的 25-50%
不交易 盈亏比低于 3:1 或货币政策强烈反对 0%

9. 不同市场环境的交易策略

9.1 斯佩兰德奥的市场分类

市场分为三类,每类需要不同的方法:

趋势市场(30-35% 的时间)

震荡/区间市场(50-55% 的时间)

波动/危机市场(10-15% 的时间)

9.2 环境之间的转换

斯佩兰德奥注意到最有利可图的时刻发生在转换期间——特别是从震荡市场到趋势市场的转换。1-2-3 和 2B 形态通常标志着这些转换。交易者的工作是:

  1. 认识到市场处于区间。
  2. 观察趋势线从区间突破或 2B 在区间边界失效。
  3. 当转换以全部置信度和全部规模确认时入场。

9.3 季节和周期意识

斯佩兰德奥还注意到历史倾向:


10. 心理纪律

10.1 交易者心态

斯佩兰德奥非常关注交易的心理要求。他认为大多数交易者失败不是因为方法不好,而是因为心理不好。 同样在纸上有效的形态和规则在实践中会失败,因为情绪凌驾于逻辑之上。

10.2 五个心理支柱

1. 对结果的情感超脱。

2. 应用的一致性。

3. 接受亏损。

4. 耐心。

5. 自我认知。

10.3 书面交易计划的重要性

斯佩兰德奥坚持每个交易者必须有书面计划,明确规定:

计划应在交易者冷静和分析时撰写——绝不能在交易时间内。在交易期间,计划只是执行,不是辩论。


11. 期权策略

11.1 斯佩兰德奥的期权方法

斯佩兰德奥将期权视为更广泛框架内的战术工具,而非独立策略。期权用于:

11.2 方向性期权交易

根据 1-2-3 和 2B 信号买入看涨/看跌期权:

11.3 在震荡市场中卖出权利金

当市场被分类为震荡/区间时:

11.4 用期权对冲


12. 常见错误

12.1 没有计划就交易

最具破坏性的错误。没有预定义规则,每个决策都成为情绪反应。交易者将不可避免地持有亏损、过早获利、交易过大、交易过频。

12.2 忽视货币背景

在紧缩货币环境中交易看涨形态(或在宽松环境中交易看跌形态)会显著降低胜率。宏观趋势作为一个强大的过滤器——忽视它意味着与市场中最重要的力量对抗。

12.3 不尊重 3:1 规则

因为形态"看起来好"而接受盈亏比不足的交易会侵蚀统计优势。美丽的形态与 1.5:1 的比例是一笔坏交易。丑陋的形态与 4:1 的比例可能是一笔好交易。

12.4 向下摊平

向亏损仓位加仓与专业交易者所做的相反。斯佩兰德奥明确表示:永远不要向亏损者加仓。 如果市场对你不利,你的分析是错误的。加仓只会增加损害。

12.5 过度交易

交易过于频繁——通常由无聊、贪婪或"回本"欲望驱动——是一个常见陷阱。每笔交易都有交易成本和情绪成本。最高概率的交易很少见;交易者必须接受长期的非活跃状态。

12.6 移动止损

将止损移入场点(给交易"更多空间")几乎总是一个情绪决定。止损放在形态失效点是有原因的。移动它意味着交易者放弃了分析,基于希望交易。

12.7 将牛市中的聪明误认为技巧

斯佩兰德奥警告说,在牛市中开始的新交易者经常将幸运的时机误认为技巧。他们以过度自信和过大仓位交易,然后在市场环境变化时遭受重创。真正的技巧在多个市场环境中展示——趋势、震荡和波动。

12.8 忽视仓位管理

即使是一个好的方法,如果仓位过大也会导致毁灭。一连串的亏损——统计上不可避免的——将在方法的边缘有时间显现之前摧毁账户。斯佩兰德奥认为仓位管理入场信号更重要。


13. 交易生命周期示例:1-2-3 反转

13.1 准备:识别机会

背景: 这是某年第三季度。美联储在过去九个月里已三次加息。收益率曲线已显著平坦。货币环境被分类为看跌

标准普尔 500 指数在强劲上升趋势中保持了 14 个月,从 1,200 上涨至 1,550。连接 14 个月前 1,200 和 8 个月前 1,320 主要低点的趋势线已被触及五次而未被突破。

第一步——趋势线突破: 标准普尔 500 收于 1,490,果断跌破趋势线(目前约在 1,510 附近)。突破当日的成交量比平均水平高 30%。这是第一步:趋势线已被突破。

行动: 警报触发。开始监控第二步。暂无仓位。

13.2 第二步:未能创新高

在接下来的两周内,标准普尔 500 从 1,490 反弹至 1,535。之前的摆动高点是 1,550。

反弹在 1,535 停滞——相对于 1,550 峰值明显是更低的低点。反弹当日成交量低于平均水平,确认缺乏信心。

行动: 第二步确认。建立初始空头仓位。

入场计算:

摆动测量目标:

仓位管理:

13.3 第三步:穿透之前反应低点

接下来一周,标准普尔 500 从 1,535 下跌至 1,480。之前的反应低点(先于反弹至 1,535 的摆动低点)是 1,490。

价格收于 1,480,果断跌破 1,490。第三步确认。1-2-3 反转完成。新的下降趋势现已生效。

行动: 加仓空头仓位。

13.4 交易管理

第三步后第一周: 标准普尔 500 下跌至 1,460。盈利:(1,514.4 - 1,460) × 8 × $50 = $21,760。

行动: 将止损移至盈亏平衡(1,514)。风险现在为零。

第三周: 标准普尔 500 达到 T1(50% 回撤位于 1,435)。

行动: 在 1,435 了结 3 份合约的利润。剩余仓位:5 份合约。将止损追踪至 1,490(之前的第三步水平)。

第五周: 标准普尔 500 达到 T2(62% 回撤位于 1,407)。

行动: 在 1,407 了结剩余 5 份合约的利润。

13.5 最终结果

组成部分 合约数 入场 出场 点数 盈利
初始仓位 5 1,535 1,407 128 $32,000
加仓(部分了结) 3 1,480 1,435 45 $6,750
合计 $38,750

14. 实施伪代码

14.1 趋势线检测器

函数 detect_trendline(价格, 方向, 回溯周期):
    // 找重要的摆动点
    摆动点 = find_swing_points(价格, 最小摆动=ATR*2)

    如果 方向 == "UP":
        // 连接重要的低点
        低点 = filter_swing_lows(摆动点)
        如果 length(低点) < 2:
            返回 null

        // 尝试所有低点对,从最近开始
        对于 i 从 length(低点)-1 倒序至 1:
            对于 j 从 i-1 倒序至 0:
                点A = 低点[j]  // 较早的低点
                点B = 低点[i]  // 较晚的低点

                // 计算趋势线斜率
                斜率 = (点B.price - 点A.price) /
                        (点B.index - 点A.index)

                // 验证两点之间的价格没有穿过线条
                有效 = TRUE
                对于 每根柱 在 点A.index 和 点B.index 之间:
                    线条值 = 点A.price + 斜率 * (柱.index - 点A.index)
                    如果 柱.low < 线条值:
                        有效 = FALSE
                        跳出

                如果 有效:
                    // 计算触及次数(在线条 ATR*0.5 范围内)
                    触及 = count_touches(价格, 点A, 斜率, 容差=ATR*0.5)
                    角度 = arctan(斜率 / ATR) * (180 / PI)  // 按 ATR 归一化

                    返回 {
                        开始: 点A,
                        结束: 点B,
                        斜率: 斜率,
                        触及: 触及,
                        角度: 角度,
                        强度: 触及 * (1.0 - 角度/90)  // 更平坦 + 更多触及 = 更强
                    }

        返回 null

    如果 方向 == "DOWN":
        // 镜像逻辑,使用摆动高点
        // 连接重要高点;验证没有价格在线条之上
        // [对称实现]

函数 find_swing_points(价格, 最小摆动大小):
    摆动点 = []
    对于 i 从 1 至 length(价格)-1:
        // 摆动低点:左右 N 根柱都低
        如果 价格[i].low < MIN(价格[i-N:i].lows) 且
           价格[i].low < MIN(价格[i+1:i+N+1].lows):
            如果 abs(价格[i].low - last_swing_high) >= 最小摆动大小:
                摆动点.append({类型: "LOW", 价格: 价格[i].low, 索引: i})

        // 摆动高点:左右 N 根柱都高
        如果 价格[i].high > MAX(价格[i-N:i].highs) 且
           价格[i].high > MAX(价格[i+1:i+N+1].highs):
            如果 abs(价格[i].high - last_swing_low) >= 最小摆动大小:
                摆动点.append({类型: "HIGH", 价格: 价格[i].high, 索引: i})

    返回 摆动点

14.2 1-2-3 形态扫描器

函数 scan_123_reversal(价格, 摆动点, 趋势线, 方向):
    // 方向 = "BEARISH_REVERSAL"(上升趋势结束)或
    //         "BULLISH_REVERSAL"(下降趋势结束)

    当前价格 = 价格[LAST].收盘
    结果 = {第一步: FALSE, 第二步: FALSE, 第三步: FALSE, 信号: NONE}

    如果 方向 == "BEARISH_REVERSAL":
        如果 趋势线 IS NULL 或 趋势线.方向 != "UP":
            返回 结果

        // 第一步:趋势线突破
        当前线条值 = 趋势线.在(LAST)的值
        如果 当前价格 < 当前线条值:
            结果.第一步 = TRUE
            结果.第一步柱 = LAST
            结果.第一步价格 = 当前价格

            // 找到突破前最近的摆动高点
            之前高点 = most_recent_swing_high(摆动点, 在=结果.第一步柱之前)

            // 第二步:未能创新高
            // 寻找趋势线突破后的反弹高点
            突破后高点 = highest_high(价格, 从 结果.第一步柱 至 LAST)

            如果 突破后高点 < 之前高点.价格:
                结果.第二步 = TRUE
                结果.第二步价格 = 突破后高点
                结果.更低的低点 = 突破后高点
                结果.之前的高点 = 之前高点.价格

                // 找到第一步和第二步之间的反应低点
                反应低点 = lowest_low(价格,
                    从 结果.第一步柱 至 突破后高点的柱)

                // 第三步:穿透之前的反应低点
                如果 当前价格 < 反应低点:
                    结果.第三步 = TRUE
                    结果.第三步价格 = 当前价格
                    结果.反应低点 = 反应低点
                    结果.信号 = "SHORT"

                    // 计算目标
                    先前上涨 = 之前高点.价格 - find_prior_swing_low(摆动点).价格
                    结果.目标_T1 = 之前高点.价格 - (先前上涨 * 0.50)
                    结果.目标_T2 = 之前高点.价格 - (先前上涨 * 0.62)
                    结果.目标_T3 = 之前高点.价格 - 先前上涨

                    // 计算止损和盈亏比
                    结果.止损 = 结果.更低的低点 + ATR * 0.5
                    结果.风险 = 结果.止损 - 当前价格
                    结果.盈利 = 当前价格 - 结果.目标_T2
                    结果.盈亏比 = 结果.盈利 / 结果.风险

        返回 结果

    如果 方向 == "BULLISH_REVERSAL":
        // 镜像逻辑:
        // 第一步:价格向上突破下降趋势线
        // 第二步:下跌未能创新低(更高的低点)
        // 第三步:价格向上突破之前的反应高点
        // 信号 = "LONG"
        // [对称实现]

    返回 结果

函数 monitor_123_setup(价格, 摆动点, 趋势线):
    // 每根新柱时运行
    空头 = scan_123_reversal(价格, 摆动点, 趋势线, "BEARISH_REVERSAL")
    多头 = scan_123_reversal(价格, 摆动点, 趋势线, "BULLISH_REVERSAL")

    警报 = []

    如果 空头.第一步 且 非 空头.第二步:
        警报.append("1-2-3 空头:第一步完成(趋势线已突破)。等待第二步。")

    如果 空头.第二步 且 非 空头.第三步:
        警报.append("1-2-3 空头:第二步完成(较低高点在 " +
                       空头.第二步价格 + ")。激进交易者入场区域。")

    如果 空头.第三步:
        如果 空头.盈亏比 >= 3.0:
            警报.append("1-2-3 空头:已确认。做空信号。盈亏比 = " +
                           空头.盈亏比 + "。目标 T2 = " + 空头.目标_T2)
        否则:
            警报.append("1-2-3 空头:已确认但盈亏比 = " +
                           空头.盈亏比 + "(低于 3:1 最低要求)。放弃。")

    // [多头设置的对称警报]

    返回 警报

14.3 2B 形态检测器

函数 detect_2B_pattern(价格, 摆动点, 回溯=5):
    信号 = []
    当前柱 = LAST

    // 看跌 2B(假突破至之前高点之上)
    最近高点 = get_swing_highs(摆动点, 最近50根柱内)

    对于 每个高点 在 最近高点中:
        // 检查价格是否在此时高点之上创新高
        对于 柱 从 高点.index+1 至 当前柱:
            如果 价格[柱].high > 高点.价格:
                // 新高已创。现在检查反转。
                创新高之后的柱数 = 当前柱 - 柱

                如果 创新高之后的柱数 <= 回溯:
                    // 检查价格现在是否跌回至之前高点之下
                    如果 价格[当前柱].收盘 < 高点.价格:
                        假高点 = highest_high(价格, 从 柱 至 当前柱)

                        信号 = {
                            类型: "BEARISH_2B",
                            之前高点: 高点.价格,
                            假高点: 假高点,
                            入场: 高点.价格,  // 在之前高点之下做空
                            止损: 假高点 + ATR * 0.3,
                            反转柱数: 创新高之后的柱数,
                            // 反转越快 = 信号越强
                            强度: 1.0 - (创新高之后的柱数 / 回溯)
                        }

                        // 使用摆动测量计算盈利
                        之前低点 = find_swing_low_before(摆动点, 高点.index)
                        摆动大小 = 高点.价格 - 之前低点.价格
                        信号.目标 = 高点.价格 - (摆动大小 * 0.62)
                        信号.风险 = 信号.止损 - 信号.入场
                        信号.盈利 = 信号.入场 - 信号.目标
                        信号.盈亏比 = 信号.盈利 / 信号.风险

                        如果 信号.盈亏比 >= 3.0:
                            信号.append(信号)

                        跳出  // 只需要最近的情况

    // 看涨 2B(假突破至之前低点之下)
    最近低点 = get_swing_lows(摆动点, 最近50根柱内)

    对于 每个低点 在 最近低点中:
        // 检查价格是否在此时低点之下创新低
        对于 柱 从 低点.index+1 至 当前柱:
            如果 价格[柱].low < 低点.价格:
                创新低之后的柱数 = 当前柱 - 柱

                如果 创新低之后的柱数 <= 回溯:
                    如果 价格[当前柱].收盘 > 低点.价格:
                        假低点 = lowest_low(价格, 从 柱 至 当前柱)

                        信号 = {
                            类型: "BULLISH_2B",
                            之前低点: 低点.价格,
                            假低点: 假低点,
                            入场: 低点.价格,  // 在之前低点之上做多
                            止损: 假低点 - ATR * 0.3,
                            反转柱数: 创新低之后的柱数,
                            强度: 1.0 - (创新低之后的柱数 / 回溯)
                        }

                        之前高点 = find_swing_high_before(摆动点, 低点.index)
                        摆动大小 = 之前高点.价格 - 低点.价格
                        信号.目标 = 低点.价格 + (摆动大小 * 0.62)
                        信号.风险 = 信号.入场 - 信号.止损
                        信号.盈利 = 信号.目标 - 信号.入场
                        信号.盈亏比 = 信号.盈利 / 信号.风险

                        如果 信号.盈亏比 >= 3.0:
                            信号.append(信号)

                        跳出

    返回 信号

14.4 盈亏比计算器

函数 calculate_reward_risk(入场, 止损, 目标, 资本, 最大风险%=0.02):
    // 基本计算
    每单位风险 = abs(入场 - 止损)
    方向 = "LONG" 如果 止损 < 入场 否则 "SHORT"

    // 计算每个目标水平
    分析 = []
    对于 每个目标 在 目标中:
        如果 方向 == "LONG":
            每单位盈利 = 目标 - 入场
        否则:
            每单位盈利 = 入场 - 目标

        比例 = 每单位盈利 / 每单位风险

        分析.append({
            目标: 目标,
            每单位盈利: 每单位盈利,
            每单位风险: 每单位风险,
            比例: 比例,
            可接受: 比例 >= 3.0
        })

    // 仓位规模
    最大风险金额 = 资本 × 最大风险%
    仓位规模 = FLOOR(最大风险金额 / (每单位风险 × 点值))

    // 分批计划 (50/30/20)
    分批计划 = {
        入场_1: {规模: FLOOR(仓位规模 × 0.50), 价格: 入场, 触发: "第二步"},
        入场_2: {规模: FLOOR(仓位规模 × 0.30), 价格: NULL, 触发: "第三步"},
        入场_3: {规模: 仓位规模 - 入场_1.规模 - 入场_2.规模,
                  价格: NULL, 触发: "第三步后的第一次回调"}
    }

    // 投资组合热度检查
    现有风险 = get_total_open_risk()
    新总风险 = 现有风险 + 最大风险金额
    热度% = 新总风险 / 资本

    返回 {
        方向: 方向,
        入场: 入场,
        止损: 止损,
        每单位风险: 每单位风险,
        目标: 分析,
        最佳比例: MAX(分析.比例),
        仓位规模: 仓位规模,
        最大风险金额: 最大风险金额,
        分批计划: 分批计划,
        投资组合热度: 热度%,
        热度正常: 热度% <= 0.10,
        交易批准: 最佳比例 >= 3.0 且 热度% <= 0.10
    }


函数 evaluate_trade_complete(信号, 货币环境, 市场类型):
    // 最终 go/no-go 决策,整合所有因素

    分数 = 0
    标志 = []

    // 盈亏比检查
    如果 信号.最佳比例 >= 3.0:
        分数 += 30
    否则:
        标志.append("拒绝:盈亏比低于 3:1(" + 信号.最佳比例 + ")")
        返回 {批准: FALSE, 分数: 分数, 标志: 标志}

    // 货币政策一致性
    如果 信号.方向 == "LONG" 且 货币环境 == "EASING":
        分数 += 25
    否则 如果 信号.方向 == "SHORT" 且 货币环境 == "TIGHTENING":
        分数 += 25
    否则 如果 货币环境 == "NEUTRAL":
        分数 += 10
        标志.append("注意:货币环境中性——降低规模")
    否则:
        分数 -= 20
        标志.append("警告:逆货币政策交易——显著降低规模")

    // 市场类型过滤器
    如果 市场类型 == "TRENDING":
        分数 += 20
    否则 如果 市场类型 == "CHOPPY":
        分数 -= 15
        标志.append("注意:震荡市场——高假信号风险")
    否则 如果 市场类型 == "VOLATILE":
        分数 -= 25
        标志.append("警告:波动市场——考虑观望")

    // 形态强度
    如果 信号.类型 包含 "123" 且 信号.第三步 == TRUE:
        分数 += 15  // 完全确认
    否则 如果 信号.类型 包含 "2B" 且 信号.强度 > 0.7:
        分数 += 15  // 快速反转 = 强 2B
    否则:
        分数 += 5   // 部分或弱形态

    // 投资组合热度
    如果 信号.热度正常:
        分数 += 10
    否则:
        标志.append("拒绝:投资组合热度超过 10%")
        返回 {批准: FALSE, 分数: 分数, 标志: 标志}

    // 规模建议
    如果 分数 >= 80:
        规模倍数 = 1.0
        置信度 = "高"
    否则 如果 分数 >= 60:
        规模倍数 = 0.65
        置信度 = "中"
    否则 如果 分数 >= 40:
        规模倍数 = 0.35
        置信度 = "低"
    否则:
        规模倍数 = 0.0
        置信度 = "不交易"

    返回 {
        批准: 规模倍数 > 0,
        分数: 分数,
        置信度: 置信度,
        规模倍数: 规模倍数,
        调整后规模: FLOOR(信号.仓位规模 × 规模倍数),
        标志: 标志
    }

14.5 交易管理器(仓位生命周期)

函数 manage_open_trade(交易, 当前价格, 当前柱):
    // 对每个新柱调用,用于开放仓位

    // 检查止损
    如果 交易.方向 == "LONG" 且 当前价格 <= 交易.止损:
        返回 close_trade(交易, 交易.止损, "止损")
    如果 交易.方向 == "SHORT" 且 当前价格 >= 交易.止损:
        返回 close_trade(交易, 交易.止损, "止损")

    // 计算当前盈亏
    如果 交易.方向 == "LONG":
        未实现盈亏 = (当前价格 - 交易.平均入场) × 交易.总规模
    否则:
        未实现盈亏 = (交易.平均入场 - 当前价格) × 交易.总规模

    // 分批管理
    如果 交易.分批阶段 == 1 且 交易.第三步已确认:
        // 在第三步确认时加入第二 tranche
        execute_scale_in(交易, 交易.分批计划.入场_2, 当前价格)
        交易.分批阶段 = 2

    如果 交易.分批阶段 == 2 且 is_pullback_entry(交易, 当前价格):
        // 在第三步后的第一次回调时加入最后 tranche
        execute_scale_in(交易, 交易.分批计划.入场_3, 当前价格)
        交易.分批阶段 = 3

    // 获利了结和止损追踪
    如果 reached_target(交易, 当前价格, "T1"):
        // 在 T1 了结部分利润
        partial_exit(交易, 规模=交易.总规模 × 0.35, 价格=当前价格)
        // 将止损移至盈亏平衡
        交易.止损 = 交易.平均入场
        交易.止损类型 = "盈亏平衡"

    如果 reached_target(交易, 当前价格, "T2"):
        // 在 T2 了结剩余利润
        close_trade(交易, 当前价格, "目标_T2")

    // 基于时间的出场:如果交易在 20 根柱内未达到 T1,收紧止损
    如果 (当前柱 - 交易.入场柱) > 20 且 非 reached_target(交易, 当前价格, "T1"):
        交易.止损 = trail_stop(交易, 方法="摆动点")
        交易.止损类型 = "时间追踪"

    返回 交易

15. 关键语录

关于趋势识别

"交易成功的关键是情绪纪律。如果聪明是关键,就会有更多的人在交易中赚钱。"

"趋势是趋势,直到它结束。1-2-3 方法给你一个客观的方式来确定趋势何时结束——不是猜测,不是感觉,而是一个定义好的市场事件序列。"

关于 1-2-3 方法

"首先,趋势线被突破。其次,价格未能创新极端。第三,价格穿透之前的反应点。当这三个按顺序发生时,趋势已经改变。就是这样——但在执行中就是这样困难。"

"大多数交易者在趋势改变时失败,因为他们试图提前预测拐点。1-2-3 方法不预测——它确认。你放弃了行情的第一部分,换取了高得多的正确概率。"

关于风险管理

"交易中最重要的规则是打好的防守,而不是好的进攻。每天我都假设我持有的每个仓位都是错的。我知道我的止损风险点在哪里。我这样做是为了定义我的最大可能回撤。"

"如果你不赌,你就赢不了。如果你输光了所有的筹码,你就不能赌了。关于风险管理没有什么需要学习的了。"

关于货币政策

"利率的方向是影响股票市场的最主导单一因素。忽视这一点交易者会自食其果。"

"当美联储在宽松时,顺风支持多头。当美联储在紧缩时,顺风支持空头。这并不复杂——但大多数交易者忽略它,因为他们太专注于短期噪音。"

关于 1987 年崩盘

"1987 年 10 月初,市场突破了趋势线。它反弹了,但无法创新高。然后它跌破了之前的低点。1-2-3 完成了。我做空了。在黑色星期一,我不觉得自己像个天才——我感觉自己像个遵守规则的交易者。"

关于心理素质

"交易中最困难的不是弄清楚该做什么——而是做你已经知道自己应该做的事。知识和行动之间的差距是大多数交易者亏损的地方。"

"亏损不是敌人。亏损是做生意的成本。敌人是比应该的更大的亏损——而这只有当交易者放弃他的计划时才会发生。"

关于耐心

"我的大部分时间都花在等待上。大多数时候我没有在交易。我在观察、分析、计算——和等待。最好的交易会来找你;你不必追逐它们。"

"一个觉得自己必须一直持仓的交易者将永远亏损。能够按兵不动是交易中最被低估的技能之一。"

关于 3:1 规则

"如果我的盈利至少不是我风险的三倍,我就不进行交易。句号。没有例外。这一条规则比我用过的任何技术形态都拯救了更多的钱。"

关于常见错误

"向下摊平是一个只有一个确定结果的策略——它保证你最大的仓位将是你最大的亏损者。专业交易者向盈利者加仓,从不向亏损者加仓。"

"大多数人们交易过大、过频、且优势过小。把所有这三项都减半,你会显著改善你的结果。"


实施规范完。 Trader Vic: Methods of a Wall Street Master,作者 Victor Sperandeo(1991)