炒波段的技术——完整实施规范

基于宋建文,《炒股怎能不懂波段》


目录

  1. 概述
  2. A股波段/摆动交易理论
  3. 识别波段高点和低点
  4. 入场时机方法论
  5. 出场时机方法论
  6. 入场规则
  7. 出场/止损规则
  8. 风险管理与仓位配置
  9. 行为/纪律规则
  10. 常见错误
  11. 完整交易生命周期示例
  12. 实施伪代码
  13. 关键语录/原则

1. 概述

1.1 核心论点

宋建文的《炒波段的技术》是一本针对中国A股市场专门设计的波段/摆动交易实用指南。核心论点是,A股以其独特的结构性特征(T+1结算、10%涨跌停限制、散户主导),非常适合波段交易——一种捕捉持续数天到数周价格波动的策略,而非试图穿越整个牛市/熊市周期或日内交易个别交易日。

波段交易论点:
1. 股价不是直线移动——它们呈波浪运动(振荡)
2. 即使在上升趋势中,也有回调;在下降趋势中,也有反弹
3. 每个波段都有可识别的起点和终点
4. 通过在波段底部买入、在波段顶部卖出,交易者可以捕获大部分利润,
   同时避免大部分痛苦的回撤
5. 波段交易在A股特别有效,因为:
   - 散户主导的市场创造更剧烈的波动
   - T+1结算抑制超短期交易(自然的波段时间框架)
   - 10%涨跌停创造可定义的风险边界
   - 政策驱动的波动性创造频繁的波段机会

1.2 波段交易与其他方法的对比

方法           | 时间框架     | A股适用性  | 关键优势
----------------|-------------|-----------|---------------------------
日内交易        | 当日        | 差(T+1限制)| 快速利润
波段/摆动      | 3-20天     | 优秀       | 捕获趋势,避免噪音
仓位交易        | 1-12个月   | 良好       | 维护成本低
买入持有        | 1-10+年    | 中等       | 简单,但波动大

宋关于波段交易为何在A股最优的论点:

1.3 波段结构

上升趋势中的完整波段周期:

      高点2
       /\
      /  \         高点3(更高)
     /    \         /\
    /      \       /  \
   /   波段 \     /    \
  /    2上  \   / 波段 \
 高点1       \ /  3上  \
   /\     波段  谷2     ...
  /  \    2下  (更高)
 /    \    /
  波段 \  /
  1上  \/
      谷1

上升趋势 = 更高的波段高点序列和更高的波段低点序列
每个"波段" = 从谷到峰(上涨波段)或从峰到谷(下跌波段)的一次摆动
目标:在低点附近买入,在高点附近卖出

2. A股波段/摆动交易理论

2.1 波段分类

波段类型          | 持续时间   | 典型幅度      | 频率
-----------------|-----------|--------------|------------------
次级波段          | 1-3天     | 3-8%         | 非常频繁
中级波段          | 5-15天    | 10-25%       | 中等
主要波段          | 20-60天   | 25-50%+      | 较不频繁
循环波段          | 3-12个月  | 50-100%+     | 罕见

宋的主要关注点:中级波段(5-15个交易日)
这些提供最佳平衡:
- 足够大的幅度在扣除成本后产生有意义利润
- 足够短以保持每季度多次机会
- 足够频繁以保持资本积极部署

2.2 A股的波段结构

A股波段特征与西方市场不同:

1. 更剧烈的振荡:散户从众在两个方向创造更暴力的波动
   → 波段幅度往往比同等美股更大

2. 成交量峰值:波段高点通常以极端成交量标记(散户FOMO买入)
   → 成交量是A股波段定时的特别可靠工具

3. 政策驱动波段:政府公告可触发多日波段
   → 波段交易者必须监控政策日历

4. 板块轮动波段:资金以可预测模式在板块间轮动
   → 板块级波段分析增加时机维度

5. 涨跌停压缩:10%涨跌停将多日波动压缩到集中的波段
   → 连续涨停或跌停日创造独特的波段模式

2.3 波段交易的优势

为什么波段交易在A股具有正期望:

1. 趋势对齐:通过仅在上升趋势中的上涨波段买入,你与主导力量对齐。
   趋势完成了大部分工作。

2. 风险定义:波段谷提供明确的止损水平。如果谷被跌破,
   波段论点错误。立即退出,损失定义明确。

3. 利润潜力:波段高点提供明确的获利了结区域。
   你捕获移动的肉段,而不需要捕捉精确顶部或底部。

4. 行为优势:大多数散户在波段高点买入(FOMO)
   在波段低点卖出(恐慌)。系统化波段交易者做相反的事。

预期胜率:45-55%(不高,但足够)
预期回报/风险:2:1到3:1(盈利的关键)
预期期望:每笔交易0.4到0.8R

3. 识别波段高点和低点

3.1 定义摆动点

波段高点:
  高点高于两侧蜡烛的高点。
  最小资格:蜡烛高点超过前后各2根蜡烛的高点
  (仅在 hindsight 由2根蜡烛确认)。

  严格定义(3根蜡烛波段高点):
  高点[今天] > 高点[昨天] AND 高点[今天] > 高点[明天]
  AND 高点[今天] > 高点[2天前] AND 高点[今天] > 高点[2天后]

波段低点:
  低点低于两侧蜡烛的低点。
  同样最小资格:各两侧2根蜡烛确认。

  严格定义(3根蜡烛波段低点):
  低点[今天] < 低点[昨天] AND 低点[今天] < 低点[明天]
  AND 低点[今天] < 低点[2天前] AND 低点[今天] < 低点[2天后]

3.2 通过摆动点确定趋势

上升趋势:连续的波段高点更高,波段低点更高
  SH1 < SH2 < SH3  AND  SL1 < SL2 < SL3

下降趋势:连续的波段高点更低,波段低点更低
  SH1 > SH2 > SH3  AND  SL1 > SL2 > SL3

横盘:波段高点/低点无一致模式
  (高点升高后低点降低,或反之)

交易含义:
  上升趋势: 在波段低点买入,在波段高点卖出
  下降趋势: 离场(或有经验者可做空,但A股做空有限)
  横盘:     在区间边界交易或离场

3.3 用成交量确认摆动点

可靠的波段低点:
  - 价格在波段中创出新低
  - 成交量在低点时萎缩(卖盘衰竭)
  - 次日:价格以增加的成交量反弹(买家回归)
  - 此模式标记波段底部有高可靠性

不可靠的波段模式:
  - 高成交量时创出新低(被迫卖出,可能继续下跌)
  - 低成交量时创出新高(无信念,可能继续上涨)
  - 这些需要在行动前额外确认

3.4 均线确认

宋的波段识别均线框架:

5日均线:  追踪次级波段(对主要信号太嘈杂,用于入场微调)
10日均线: 主要波段信号——"波段线"
20日均线: 中期趋势确认
60日均线: 主要趋势方向

波段买入信号:
  价格从下方穿越10日均线,且10日均线在20日均线上方
  (波段低点确认,新上涨波段开始)

波段卖出信号:
  价格从上方穿越10日均线,且成交量萎缩
  (波段高点确认,新下跌波段开始)

4. 入场时机方法论

4.1 三种入场方法

方法1:波段谷入场(最高回报,中等难度)
  时机:在波段低点确认后(价格从谷底反弹)
  如何:在价格收于10日均线上方后买入(先前曾跌至其下方)
  止损:在确认的波段低点下方
  目标:前期波段高点或更高
  风险/回报:通常2:1到3:1

方法2:波段延续入场(中等回报,较低难度)
  时机:在已建立的上涨波段中,在短暂停顿期间
  如何:在波段内3-5天盘整向上突破时买入
  止损:在盘整低点下方
  目标:测量移动(盘整高度向上投射)
  风险/回报:通常1.5:1到2:1

方法3:突破入场(最高风险,最高潜力)
  时机:价格突破前期波段高点至新波段高点
  如何:在突破棒以成交量 > 2倍均值时买入
  止损:在突破棒低点或前期波段高点(现支撑)下方
  目标:测量移动(从前突破投射的先前波段高度)
  风险/回报:通常1.5:1到2.5:1

4.2 波段谷识别协议

实时识别有效波段谷:

步骤1:前提条件——股票处于上升趋势(20日均线上升,在60日均线上方)
步骤2:回调——价格从近期波段高点向支撑区回落
步骤3:支撑区——识别谷可能形成的区域:
    a) 前期波段低点区域
    b) 20日移动均线
    c) 前上涨波段的斐波那契38.2%或50%回撤
    d) 前波段的高成交量节点(成交量档案支撑)
步骤4:衰竭——成交量在回调低点时枯竭(卖家衰竭)
步骤5:反转——价格开始反弹:
    - 收于前日高点上方
    - 反弹日成交量增加
    - 5日均线转向上
步骤6:确认——价格收于10日均线上方
    → 这是入场点(不是精确底部,而是确认的谷)

4.3 日内最佳入场时机

A股波段入场的时机:

首选:在确认日的最后30分钟买入。
  为什么:减少隔夜缺口风险(你已经看到了全天的走势)。
  如果股票在下午2:30仍高于10日均线且成交量良好,信号有效。

可接受:在确认日后次日开盘买入。
  为什么:隔夜缺口可能增加或减少入场成本,但信号已确认。

避免:在任何一天的最初30分钟买入。
  为什么:A股开盘波动大,往往反转。开盘价不可靠。
  T+1规则意味着如果开盘入场失败,你当天不能退出。

5. 出场时机方法论

5.1 波段高点识别协议

实时识别波段高点:

步骤1:股票已在上涨波段中持续5+天,价格上涨
步骤2:出现高潮信号:
    a) 成交量放大至2倍+日均(买入高潮)
    b) 大范围棒(高低价差大)
    c) 开盘向上跳空(衰竭缺口)
    d) 价格达到前期波段高点阻力区
    e) 5日均线走平并开始向下
步骤3:反转棒:价格收于当日区间下半部分
    或:价格首次在该波段收于5日均线下方
步骤4:确认:次日收盘低于反转日低点
    → 这是出场点

注意:你不会在精确顶部卖出。目标是捕获波段的60-80%。

5.2 卖出信号优先级

出场信号(按紧急程度排序):

紧急(立即出场,不等确认):
1. 止损触发
2. 财报冲击或重大负面新闻
3. 股票触及跌停(次日第一时间卖出)
4. 板块范围政策负面公告

标准(下次机会出场):
1. 在确认的上涨波段后,价格收于10日均线下方
2. 成交量高潮 + 反转棒(波段高点形态)
3. 价格目标达到(在前期波段高点或测量移动处)

可选(收紧止损,准备出场):
1. 价格(新高的成交量低于先前高点之间的分歧)
2. 股票达到上升通道上轨
3. 市场指数显示派发形态

5.3 部分出场策略

对较大仓位或较高信念波段:

在第一目标(1.5R或前期波段高点):
  卖出仓位的50%。将剩余的止损移动至盈亏平衡。

在延展目标(2.5R或测量移动目标):
  卖出剩余50%。或以紧跟踪止损持有(在5日均线下方)。

理由:部分出场锁定利润,同时允许参与延伸波段。
在A股,上涨波段偶尔剧烈延伸(连续涨停日)。
剩余仓位捕获这些异常事件。

6. 入场规则

6.1 完整波段入场检查清单

市场层面:
□ 上证指数高于20日均线(有利波段环境)
□ 市场未处于确认下降趋势(60日均线下降)
□ 3天内无重大政策风险事件

股票层面:
□ 股票处于上升趋势(更高的波段高点和更高的波段低点)
□ 股票在60日均线上方
□ 20日均线上升且在60日均线上方

波段识别:
□ 波段低点已确认(按第4.2节协议)
□ 价格从支撑区反弹,成交量增加
□ 价格已收于10日均线上方(波段谷确认)

风险评估:
□ 止损水平已确定(在波段低点下方)
□ 止损距离小于入场价的8%
□ 每笔交易风险小于组合的2%
□ 目标(前期波段高点)提供至少2:1回报/风险

组合:
□ 开放波段仓位少于5个
□ 总组合风险小于8%
□ 不在同只股票上追加现有仓位

6.2 板块级波段确认

板块轮动增加强大的时机维度:

强劲板块信号:股票板块指数本身处于上涨波段
  → 更高概率交易。使用全仓。

中性板块信号:板块横盘或不确定
  → 中等概率。使用正常仓位的70%。

弱势板块信号:板块处于下跌波段,但个股强势
  → 较低概率。使用正常仓位的50%。
  → 个股必须有非常强的相对强度才能覆盖板块弱势。

6.3 入场价格精确性

宋主张精确入场而非市价单:

首选入场方法:
  在10日均线上方1-2%处设置限价买单。
  这确保你仅在波段确认信号有效时入场。

  如果股票跳空超过你限价的3%以上,不要追。
  等待回调至10日均线区域。如果永远不回调,
  错过这笔交易。还有下一个波段。

避免:
  - 开盘市价单
  - 在上涨5%+后买入
  - 追已处于上涨波段3+天的股票

7. 出场/止损规则

7.1 止损水平

初始止损:在入场时设定

波段谷入场:
  止损 = 确认波段低点 × 0.98(波段低点下方2%)
  原理:如果波段低点被跌破,上涨波段论点错误

波段延续入场:
  止损 = 盘整低点 × 0.99(盘整低点下方1%)
  原理:如果盘整向下突破,延续论点错误

突破入场:
  止损 = 突破棒低点或前期波段高点(现支撑)
  原理:如果突破失败,突破论点错误

最大止损:无论波段点位置,入场价下方8%
  如果波段低点需要更宽的止损,减少仓位规模而非扩大止损。

7.2 跟踪止损协议

随着波段进展,向上移动止损:

阶段1(入场到+1R):
  保持止损在初始水平。在波段交易中,不要过早移动到盈亏平衡
  (波段需要日内振荡空间)。

阶段2(+1R到+2R):
  将止损移动到盈亏平衡(入场价)。
  这创造了一个"免费交易"——你在这仓位上不可能再亏损。

阶段3(超过+2R):
  跟踪止损在最近次级波段低点(1-2天回调低点)下方。
  替代:跟踪至5日均线下方。

阶段4(峰值信号出现):
  积极收紧止损:在昨日低点下方。
  任何收于昨日低点下方 = 退出。

7.3 时间止损

波段交易不应无限期持续。时间止损:

如果股票在5个交易日内未达到+1R:
  → 波段可能比预期弱。将止损收紧至10日均线下方。

如果股票在8个交易日内未达到+1R:
  → 以收盘价退出。波段论点已失败(即使未达到止损水平)。

如果股票达到+1R但横盘振荡5+天:
  → 卖出50%,用止损跟踪剩余仓位(在横盘区间下方)。
  理由:困在停滞波段中的资本有机会成本。
  更好的是为下一个波段释放资本。

8. 风险管理与仓位配置

8.1 波段交易者仓位配置模型

步骤1:确定止损距离
  入场:¥30
  止损:¥27.80(波段低点下方)
  每份风险:¥2.20

步骤2:应用2%规则
  资本:¥400,000
  最大风险:¥400,000 × 0.02 = ¥8,000

步骤3:计算股数
  股数:¥8,000 / ¥2.20 = 3,636 → 取整到3,600(36手)
  仓位价值:3,600 × ¥30 = ¥108,000(资本的27%)

步骤4:验证组合热度
  当前开放风险:¥15,000(来自另外2个仓位)
  新风险:¥8,000
  总风险:¥23,000 / ¥400,000 = 5.75%
  最大值:8% → 可接受

步骤5:验证板块集中度
  该板块当前敞口:15%
  本次交易后:15% + 27% = 42% → 超过30%限制
  → 减少仓位以符合规定:约¥60,000(资本的15%)
  → 股数:2,000 at ¥30 = ¥60,000
  → 调整后风险:2,000 × ¥2.20 = ¥4,400(资本的1.1%)——可接受

8.2 波段间资本配置

波段交易者应始终保持可用于新机会的资本:

全仓:绝不。始终保持至少20%现金储备。
正常部署:组合中60-80%,现金20-40%
连续亏损后:组合中40-60%,现金40-60%
差波段环境:组合中20-40%,现金60-80%(市场震荡,波段不清)

现金储备有两个目的:
1. 新波段入场的资本(你无法在波段谷可用现金的情况下捕捉波段)
2. 心理缓冲(知道你有现金减少情绪压力)

8.3 连续亏损管理

连亏协议:

3连亏:将下一笔交易仓位减少30%,用于接下来的5笔交易
  原因:对50%胜率系统来说是正常连亏。轻微调整。

5连亏:将下一笔交易仓位减少50%,用于接下来的10笔交易
  原因:可能市场制度不利于波段交易。减少敞口。

7连亏:停止交易1周。仅纸上交易。
  原因:系统可能在当前环境不工作,或执行错误已渗入。
  复盘所有近期交易。识别问题。

10连亏:停止交易1个月。全面系统复盘。
  原因:某处根本错误。市场环境可能已改变。
  在识别并解决根本原因之前不要恢复。

8.4 杠杆政策

波段交易永远不使用杠杆。

波段交易有45-55%胜率。这意味着在一年交易中,5-10连亏是统计上正常的。
使用杠杆,这样的连亏可能导致强制清算。

无杠杆,10连亏在每笔交易2%风险下损失20%资本。
痛苦但可存活。使用2倍杠杆,同样连亏损失40%。潜在致命。

9. 行为/纪律规则

9.1 波段交易者每日流程

前晚(30分钟):
  1. 扫描观察列表中正在形成的波段谷设置(100-150只股票)
  2. 识别接近买入区(接近支撑,成交量萎缩)的股票
  3. 计算潜在入场的仓位和止损水平
  4. 为入场和止损价格设置警报
  5. 写出明天的计划:"如果股票A达到¥X,买Y股。止损在¥Z。"

早上(10分钟):
  1. 检查隔夜新闻对持仓或设置的影响
  2. 验证所有开放仓位的止损单是否活跃
  3. 回顾计划——根据盘前信息是否需要更改?

盘中:
  1. 在9:30(开盘):观察开盘走势。前15分钟不要交易。
  2. 在14:00:检查入场信号(波段谷确认)
  3. 在14:30:如果信号确认,执行计划的入场
  4. 在15:00(收盘):记录所有持仓和观察列表的收盘价

收盘后(15分钟):
  1. 用所有行动更新交易日志
  2. 为每个决策打分(A/B/F)
  3. 记录关键时刻的情绪状态
  4. 扫描明天正在形成的新波段设置

9.2 波段纪律规则

规则1:每波段每股票一次入场
  不要在同一波段的同一股票上多次买入。
  如果错过入场,等待下一个波段。

规则2:波段交易中不要向下摊平
  如果股票对你不利,波段论点在失败。
  向下摊平使你的敞口翻倍于失败论点。

规则3:不要追
  如果股票移动超过你预期入场点5%+, 让它走。
  追导致糟糕的风险/回报和情绪化入场。

规则4:机械出场
  当止损触发或出场信号触发时,在下一个可用价格卖出。
  不要等待"更好的价格"或"再等一天。"

规则5:尊重市场环境
  在震荡、横盘、没有清晰波段的市场中,减少活动。
  波段交易需要波段。如果海洋平静,没有什么可乘。

规则6:保持日志
  每笔交易记录。每次情绪备注。每个过程打分。
  日志是你改进的方式。没有它,你重复同样的错误。

9.3 波段交易心理准备

接受:你会接近上涨波段底部卖出(在回调中被止损)。
  这是保护的成本。一些止损后立即恢复是正常的。
  这不是加宽止损的理由。

接受:你将错过每个波段的精确顶部。
  没有人能持续在顶部卖出。捕获波段的60-70%是优秀的。

接受:你会有连亏。
  50%胜率意味着统计上会发生10连亏。当发生时,
  这不是恐慌或改变系统的理由。

接受:一些波段会很小(小额盈利或打平)。
  并非每个波段都发展成大移动。小赢和打平是可接受的,
  只要偶尔的大波段足以补偿。

接受:错过一个波段永远比强迫糟糕交易好。
  每年有数百个波段机会。错过一个没有成本。
  强迫糟糕交易可能让你的资本付出代价。

10. 常见错误

10.1 波段交易特定错误

错误1:在波段中间买入
  在上涨波段已经5-8天且高于波段低点15-20%时买入。
  结果:入场差,止损宽(至波段低点下方),糟糕的风险/回报。
  修复:仅在确认波段低点后2-3天内入场。

错误2:在波段中间卖出
  因上涨波段内的正常1-2天回调而退出。
  结果:错过后续波段的50-70%潜力。
  修复:仅在确认波段高点信号或止损触发时出场。

错误3:对抗趋势方向
  试图在下降趋势中买入波段低点。
  结果:每次"反弹"都比上一次低。累积亏损。
  修复:仅在上升趋势(更高高点和更高低点)中买入波段低点。

错误4:忽视成交量信号
  在无成交量确认(卖盘衰竭)的情况下入场"波段低点"。
  结果:许多假波段低点——价格"反弹"后继续下跌。
  修复:要求在谷的成交量收缩 + 反弹时成交量扩大。

错误5:过度交易波段
  交易每个微小振荡(1-3天微波段)。
  结果:交易成本和滑点消耗所有利润。T+1增加隔夜风险。
  修复:专注于中级波段(5-15天)。忽略微小波动。

错误6:时间框架不一致
  用60日均线判断趋势但用5分钟图把握入场时机。
  结果:矛盾信号、困惑、情绪化决策。
  修复:选择一个时间框架并始终如一地用于所有决策。

错误7:未考虑T+1
  在"确认日"收盘买入,次日早上被套牢在向下跳空。
  结果:不能卖出,直到次日,届时亏损可能更大。
  修复:在所有入场计划中考虑T+1。如果你不能承受隔夜持有,跳过。

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

波段识别
  日期:第0天(周一)
  股票:ABC制造,价格¥35.20
  背景:股票2个月处于上升趋势(更高高点和更高低点)
  60日均线:¥32(上升),20日均线:¥34(上升),10日均线:¥35.50(平)

  最近波段高点:¥38(8个交易日前达到)
  股票一直在回调:¥38 → ¥37 → ¥36 → ¥35.20
  回调时成交量萎缩(好——卖盘衰竭)

  支撑区:¥34的20日均线 + ¥33.50的前期波段低点

观察波段谷形成
  第1天(周二):股票跌至¥34.30(接近20日均线)。成交量极低。守住支撑。
  第2天(周三):股票跌至¥33.80,反弹收于¥34.50。
    成交量:低位时低,反弹时放大。看涨反转蜡烛。
    5日均线开始走平。
  第3天(周四):股票收于¥35.20。回到10日均线(¥35.00)上方。
    成交量:扩大。✓ 这是波段谷确认信号。

入场计划(周四晚)
  入场:¥35.20(或如果周五跳空¥35.50限价)
  波段低点:¥33.80(第2天低点)
  止损:¥33.10(¥33.80 × 0.98,波段低点下方2%)
  每份风险:¥35.20 - ¥33.10 = ¥2.10
  目标1:¥38(前期波段高点)= ¥2.80盈利 → 1.3R
  目标2:¥40(测量移动高于前期高点)= ¥4.80盈利 → 2.3R

  资本:¥500,000
  最大风险(2%):¥10,000
  股数:¥10,000 / ¥2.10 = 4,761 → 取整到4,700股(47手)
  仓位价值:4,700 × ¥35.20 = ¥165,440(资本的33%)

入场执行
  第4天(周五)14:30:
    股票在¥35.40,高于10日均线,成交量良好。
    以¥35.40买入4,700股(从计划的¥35.20轻微滑点)
    实际每份风险:¥35.40 - ¥33.10 = ¥2.30
    实际风险:4,700 × ¥2.30 = ¥10,810(2.16%——略高于2%,可接受)

交易管理
  第5天(周一):股票开盘¥35.80,收盘¥36.20。波段发展中。持有。
  第6天(周二):股票达到¥37.00。+¥1.60/份(0.7R)。持有。
    止损仍在¥33.10(尚未达到+1R以移动至盈亏平衡)。
  第7天(周三):股票达到¥37.70。+¥2.30/份(1.0R)。✓
    将止损移动至¥35.40(盈亏平衡)。免费交易。
  第8天(周四):股票收¥38.20。达到前期波段高点(¥38)。
    这是目标1。卖出50%(2,350股)at ¥38.20。
    锁定利润:2,350 × (¥38.20 - ¥35.40) = ¥6,580
    剩余:2,350股。将跟踪止损移动至¥36.50(低于次级波段低点)。
  第9天(周五):股票以扩大成交量推至¥39.50。
    将跟踪止损移动至¥37.80(低于第8天低点)。
  第10天(周一):股票在巨大成交量(2.5倍均值)跳空至¥40.20。
    成交量高潮 + 跳空 = 警告信号。收紧止损至¥39.00。
  第11天(周二):股票开盘¥40.50,反转收¥39.30。
    成交量仍然偏高。反转棒从高潮。波段高点可能。
  第12天(周三):股票开盘¥39.00,跌至¥38.80。触发跟踪止损。
    以¥39.00卖出剩余2,350股。

最终账户
  第一批:2,350股 × (¥38.20 - ¥35.40) = ¥6,580
  第二批:2,350股 × (¥39.00 - ¥35.40) = ¥8,460
  总利润:¥15,040
  承担风险:¥10,810
  R倍数:1.39R
  持续时间:8个交易日
  过程评级:A(遵循所有规则,无即兴发挥)

12. 实施伪代码

class WaveTradingSystem:
    """
    宋建文的A股波段/摆动交易系统。
    """

    # 均线参数
    MA_FAST = 5       # 次级波段
    MA_WAVE = 10      # 主要波段信号("波段线")
    MA_INTERMEDIATE = 20  # 中期趋势
    MA_MAJOR = 60     # 主要趋势

    # 风险参数
    RISK_PER_TRADE = 0.02
    MAX_PORTFOLIO_HEAT = 0.08
    MAX_OPEN_POSITIONS = 5
    MAX_STOP_PCT = 0.08
    MAX_SECTOR_WEIGHT = 0.30
    MIN_CASH_RESERVE = 0.20

    # 波段参数
    VOLUME_CLIMAX = 2.0   # 成交量 > 2倍均值 = 高潮
    VOLUME_EXHAUSTION = 0.6  # 成交量 < 0.6倍均值 = 衰竭
    MIN_REWARD_RISK = 2.0  # 最低2:1 R/R

    def identify_swing_points(self, bars, lookback=2):
        """识别确认的波段高点和低点。"""
        swing_highs = []
        swing_lows = []

        for i in range(lookback, len(bars) - lookback):
            # 波段高点
            is_high = all(bars[i].high > bars[i-j].high for j in range(1, lookback+1)) and \
                      all(bars[i].high > bars[i+j].high for j in range(1, lookback+1))
            if is_high:
                swing_highs.append((i, bars[i].high))

            # 波段低点
            is_low = all(bars[i].low < bars[i-j].low for j in range(1, lookback+1)) and \
                     all(bars[i].low < bars[i+j].low for j in range(1, lookback+1))
            if is_low:
                swing_lows.append((i, bars[i].low))

        return swing_highs, swing_lows

    def determine_trend(self, swing_highs, swing_lows):
        """从摆动点序列确定趋势。"""
        if len(swing_highs) < 2 or len(swing_lows) < 2:
            return "INDETERMINATE"

        hh = swing_highs[-1][1] > swing_highs[-2][1]  # 更高高点
        hl = swing_lows[-1][1] > swing_lows[-2][1]    # 更高低点

        if hh and hl:
            return "UPTREND"
        elif not hh and not hl:
            return "DOWNTREND"
        else:
            return "SIDEWAYS"

    def detect_wave_trough(self, stock):
        """检测确认的波段谷以入场。"""
        # 前提条件
        if stock.close < stock.sma(self.MA_MAJOR):
            return False, "在主要趋势均线下方"
        if not stock.sma_rising(self.MA_INTERMEDIATE):
            return False, "中期均线未上升"

        trend = self.determine_trend(
            *self.identify_swing_points(stock.recent_bars(60))
        )
        if trend != "UPTREND":
            return False, f"趋势是{trend},非上升趋势"

        # 低位时成交量衰竭
        recent_low_idx = stock.lowest_low_index(10)
        vol_at_low = stock.volume_at(recent_low_idx)
        avg_vol = stock.avg_volume(self.MA_INTERMEDIATE)

        if vol_at_low > avg_vol * self.VOLUME_EXHAUSTION:
            pass  # 不具决定性,但降低信心

        # 价格穿越波段线上方(10日均线)
        crossed_above = (stock.close > stock.sma(self.MA_WAVE)
                        and stock.prev_close < stock.prev_sma(self.MA_WAVE))

        # 反弹时成交量扩大
        bounce_vol = stock.volume > avg_vol * 1.2

        if crossed_above and bounce_vol:
            return True, "波段谷确认:价格位于波段线上方伴成交量"

        return False, "无确认的谷信号"

    def detect_wave_peak(self, stock, position):
        """检测波段高点以出场时机。"""
        signals = []

        # 成交量高潮
        if stock.volume > stock.avg_volume(self.MA_INTERMEDIATE) * self.VOLUME_CLIMAX:
            signals.append("VOLUME_CLIMAX")

        # 价格收于波段线下方
        if stock.close < stock.sma(self.MA_WAVE) and stock.prev_close > stock.prev_sma(self.MA_WAVE):
            signals.append("BELOW_WAVE_LINE")

        # 反转棒(收于区间下半部分)
        bar_range = stock.high - stock.low
        if bar_range > 0 and (stock.close - stock.low) / bar_range < 0.3:
            signals.append("REVERSAL_BAR")

        # 衰竭缺口
        if stock.open > stock.prev_high * 1.02:  # 跳空 > 2%
            signals.append("EXHAUSTION_GAP")

        return signals

    def calculate_entry(self, stock, capital, portfolio):
        """计算完整入场参数。"""
        # 找到止损水平
        swing_lows = self.identify_swing_points(stock.recent_bars(30))[1]
        if not swing_lows:
            return None, "无波段低点识别"

        recent_swing_low = swing_lows[-1][1]
        stop_price = recent_swing_low * 0.98  # 波段低点下方2%
        entry_price = stock.close

        # 硬性限制止损距离
        if (entry_price - stop_price) / entry_price > self.MAX_STOP_PCT:
            stop_price = entry_price * (1 - self.MAX_STOP_PCT)

        risk_per_share = entry_price - stop_price
        if risk_per_share <= 0:
            return None, "无效止损水平"

        # 仓位配置
        max_risk = capital * self.RISK_PER_TRADE

        # 检查组合热度
        current_heat = portfolio.total_risk
        available_risk = (capital * self.MAX_PORTFOLIO_HEAT) - current_heat
        max_risk = min(max_risk, available_risk)

        if max_risk <= 0:
            return None, "达到组合热度限制"

        shares = int(max_risk / risk_per_share)
        shares = (shares // 100) * 100  # A股手数

        # 检查板块限制
        position_value = shares * entry_price
        sector_weight = (portfolio.sector_value(stock.sector) + position_value) / capital
        if sector_weight > self.MAX_SECTOR_WEIGHT:
            max_value = (self.MAX_SECTOR_WEIGHT * capital) - portfolio.sector_value(stock.sector)
            shares = int(max_value / entry_price / 100) * 100

        if shares <= 0:
            return None, "限制后仓位太小"

        # 目标计算
        swing_highs = self.identify_swing_points(stock.recent_bars(30))[0]
        if swing_highs:
            target_1 = swing_highs[-1][1]  # 前期波段高点
            target_2 = entry_price + (target_1 - entry_price) * 1.5  # 测量移动
        else:
            target_1 = entry_price * 1.10
            target_2 = entry_price * 1.15

        reward = target_1 - entry_price
        risk = entry_price - stop_price
        rr_ratio = reward / risk if risk > 0 else 0

        if rr_ratio < self.MIN_REWARD_RISK:
            return None, f"R/R比率{rr_ratio:.1f}低于最低{self.MIN_REWARD_RISK}"

        return {
            "entry_price": entry_price,
            "stop_price": stop_price,
            "shares": shares,
            "risk_per_share": risk_per_share,
            "total_risk": shares * risk_per_share,
            "target_1": target_1,
            "target_2": target_2,
            "reward_risk": rr_ratio,
        }, "入场有效"

    def manage_position(self, trade, stock):
        """积极波段仓位管理。"""
        entry = trade.entry_price
        risk = trade.risk_per_share
        current = stock.close
        r_multiple = (current - entry) / risk if risk > 0 else 0

        # 检查止损
        if current <= trade.stop_loss:
            return "EXIT_ALL", f"止损触发于{trade.stop_loss:.2f}"

        # 时间止损
        if trade.days_held > 8 and r_multiple < 1.0:
            return "EXIT_ALL", "时间止损:8天未达到1R"

        # 在目标1部分出场
        if current >= trade.target_1 and not trade.partial_exit_done:
            trade.partial_exit_done = True
            trade.stop_loss = entry  # 移动至盈亏平衡
            return "EXIT_HALF", f"目标1达到于{current:.2f}"

        # 部分出场后跟踪止损
        if trade.partial_exit_done:
            # 检查峰值信号
            peak_signals = self.detect_wave_peak(stock, trade)
            if "BELOW_WAVE_LINE" in peak_signals:
                return "EXIT_ALL", "波段高点:收于波段线下方"

            # 提高跟踪止损
            minor_swing_low = stock.lowest_low(3)  # 3日低点
            if minor_swing_low > trade.stop_loss:
                trade.stop_loss = minor_swing_low

            # 高潮警告——收紧止损
            if "VOLUME_CLIMAX" in peak_signals:
                trade.stop_loss = max(trade.stop_loss, stock.low)

        # 在1R时移动至盈亏平衡
        elif r_multiple >= 1.0:
            if trade.stop_loss < entry:
                trade.stop_loss = entry

        return "HOLD", f"R: {r_multiple:.1f}, 止损: {trade.stop_loss:.2f}"

    def weekly_system_review(self, trades_this_week, portfolio):
        """每周绩效和过程复盘。"""
        wins = [t for t in trades_this_week if t.pnl > 0]
        losses = [t for t in trades_this_week if t.pnl <= 0]

        win_rate = len(wins) / len(trades_this_week) if trades_this_week else 0
        avg_win_r = sum(t.r_multiple for t in wins) / len(wins) if wins else 0
        avg_loss_r = sum(t.r_multiple for t in losses) / len(losses) if losses else 0
        expectancy = (win_rate * avg_win_r) + ((1 - win_rate) * avg_loss_r)

        process_grades = [t.process_grade for t in trades_this_week]
        a_pct = process_grades.count("A") / len(process_grades) if process_grades else 0

        return {
            "trades": len(trades_this_week),
            "win_rate": win_rate,
            "avg_win_r": avg_win_r,
            "avg_loss_r": avg_loss_r,
            "expectancy": expectancy,
            "process_a_pct": a_pct,
            "portfolio_return": portfolio.weekly_return,
        }

13. 关键语录/原则

"股价不是直线移动。它们呈波浪运动。理解波段的交易者
比只看趋势的交易者有固有优势。"

"在A股,波段交易不仅仅是众多策略之一——它是自然的策略。
T+1结算、日涨跌停限制和散户从众都创造了一个以可定义、可交易
波段振荡的市场。"

"波段谷是赚钱的地方。波段高点是保护资金的地方。
大多数散户把这个完全搞反了——他们在高点买入,在低点卖出。"

"成交量告诉你价格无法告诉你的关于波段的一切。
谷的成交量衰竭说'卖家完了'。高点的成交量高潮说'买家完了'。
听成交量的。"

"不要试图捕捉波段的确切底部。等确认——价格收于10日均线上方。
你牺牲了波段的前10-20%以换取波段真实性的显著更高概率。"

"最好的波段交易在入场时感觉不舒服。你在股票下跌时买入。
你在别人卖出时买入。如果感觉容易和明显,波段已经走了。"

"在波段交易中,错过一个波段是免费的。强迫糟糕交易要花钱。
明天、下周、下个月会有另一个波段。不着急。"

"你的止损不是建议。这是与你自己的合约。打破合约一次,
你的大脑会找到一次又一次打破它的理由。"

"中级波段——5到15个交易日——是A股散户交易者的最佳点。
短到可以每季度保持多次机会。长到在交易成本后产生有意义利润。"

"波段交易不是日内交易,也不是投资。它是捕获两者最好的中间路径:
积极交易的参与和投资的耐心。"

"你的仓位大小必须由止损距离决定,
不是你想要拥有多少或股票价格多少决定。
这是风险管理与赌博的区别。"

"保存你最好和最差波段交易的图表册。模式会出现。
你最好的交易有共同特征。你最差的交易有不同的共同特征。
这个图册是你个性化的交易教育。"

实施规范编译自宋建文,《炒股怎能不懂波段》。本文档是实际应用的系统提炼, 不替代阅读原作。