K线形态变成可回测策略——使用EVO对威科夫理论进行策略构建

153****3206153****3206··6 浏览

威科夫CM操作全过程策略 · 设计报告

基于 Richard Wyckoff 市场操纵理论,在 A 股中证1000 上实现完整的吸筹-上涨-派发-下跌四阶段状态机。


一、理论背景:威科夫方法论

Richard D. Wyckoff(1873–1934)是 20 世纪初最具影响力的技术分析师之一。他的核心洞见是:市场价格由"Composite Man"(合成交易者)的买卖行为驱动——大型资金在吸筹区悄悄建仓、在上涨趋势中顺势拉抬、在派发区逐步出货、最后在下跌趋势中清仓离场。

Wyckoff 将一轮完整的市场周期归纳为四个阶段:

flowchart LR
  A[吸筹区] --> B[上涨趋势]
  B --> C[派发区]
  C --> D[下跌趋势]
  D --> A
阶段 英文 特征 资金行为
吸筹 Accumulation 价格在区间内震荡,振幅收敛 大资金悄悄建仓
上涨 Markup 突破区间上沿,趋势上行 跟风盘涌入,价格拉升
派发 Distribution 高位再次形成横盘区间 大资金逐步出货
下跌 Markdown 跌破区间下沿,趋势下行 恐慌盘涌出

二、策略翻译:从理论到量化规则

2.1 核心思路

将威科夫四阶段转化为一个逐标的跨 bar 状态机——每只股票独立维护自己的状态,每天根据价格行为触发状态转移和交易信号。

flowchart LR
  A["idle<br/>空闲"] -->|"检测到交易区间<br/>振幅 15%-40%"| B["acc<br/>吸筹"]
  B -->|"突破区间上沿 ≥2%<br/>且区间内 ≥15 根 bar"| C["up<br/>上涨"]
  C -->|"高位形成新区间<br/>且价格回撤 ≥8%"| D["dist<br/>派发"]
  D -->|"跌破区间下沿 ≥2%"| E["down<br/>下跌"]
  E -->|"60 根 bar 后<br/>重新检测到新区间"| B

2.2 区间检测

在任意时点,回看过去 60 根日 K 线(约 3 个月),判定价格是否处于一个有意义的交易区间

$$
\text{振幅} = \frac{\text{区间最高价} - \text{区间最低价}}{\text{区间最低价}} \in [15%, 40%]
$$

  • 下限 15%:过滤掉毫无波动的横盘(振幅太小,突破后没有利润空间)
  • 上限 40%:过滤掉单边趋势(振幅太大不是横盘,是趋势本身)

同时要求区间内至少 15 根 bar(约 3 周),确保不是噪音。

2.3 各阶段行为

阶段 入场/持仓 出场条件 信号
idle(空闲) 无持仓,持续扫描区间 检测到合规交易区间 无信号,转入 acc
acc(吸筹) 无持仓,动态跟踪区间边界 价格突破区间上沿 ≥2%,且区间已持续 ≥15 根 bar 做多(score=1.0),转入 up
up(上涨) 持有多头 高位形成新区间,且价格从区间高点回撤 ≥8% 持续做多,转入 dist
dist(派发) 平仓 价格跌破派发区间下沿 ≥2% 平仓(score=0.0),转入 down
down(下跌) 持空头 60 根 bar 后重新检测到合规吸筹区间,且价格回到区间内 持续做空,转入 acc

2.4 关键参数

参数 含义
LOOKBACK 60 回看 K 线数(约 3 个月)
MIN_INTERVAL_BARS 15 区间最少 bar 数(约 3 周)
BREAKOUT_THRESHOLD 2% 突破阈值
BREAKDOWN_THRESHOLD 2% 跌破阈值
振幅下限 15% 有效区间最低振幅
振幅上限 40% 有效区间最高振幅
派发回撤 8% 从区间高点回撤触发派发判断

三、实现架构

3.1 跨 bar 状态记忆

每只标的用 state_schema 维护一个轻量状态字典,跨 bar 传递:

state_schema = {"stocks": {}}

DEFAULT_STOCK_STATE = {
    "stage": 0,        # 0=idle 1=acc 2=up 3=dist 4=down
    "acc_low": 0.0,    # 吸筹区间下沿
    "acc_high": 0.0,   # 吸筹区间上沿
    "dist_low": 0.0,   # 派发区间下沿
    "stage_bars": 0,   # 当前阶段的 bar 计数
}
  • stage 编码为整数(0-4),节省内存——中证1000 约 1000 只成分股,每只 5 个字段,总量约 5000 标量,远低于引擎 10000 标量上限
  • 每只标的独立维护自己的状态,互不干扰
  • 每根 bar 结束时通过 state_delta 写回,供下一根 bar 读取

3.2 股票池

  • 中证1000 成分股(指数代码 000852),覆盖中小盘风格
  • 回测区间:2023-01-01 至 2025-12-31
  • 日频,后复权

3.3 组合构建

  • 持仓数:30 只
  • 总仓位:100%
  • 单票权重上限:10%
  • 交易成本:佣金 2.5‱ + 印花税 5‱(卖方)

四、设计考量

4.1 为什么选择中证1000

威科夫形态学捕捉的是价格行为中的供需转换——在市值较大、流动性充裕的沪深300 中,这类形态容易被大资金平滑掉;而在小盘股主导的中证1000 中,个股波动更大、形态更清晰,理论上更容易捕捉到有效的吸筹-派发信号。

4.2 为什么用跨 bar 状态机而不是滑动窗口

滑动窗口(每根 bar 独立从过去 60 根 K 线重新判定)虽然简单,但有两个致命缺陷:

  1. 状态断裂:今天判定为"吸筹区",明天价格稍微一动,窗口滚动后可能判定为"无信号",后天又回到"吸筹区"——状态反复横跳,实际交易无法执行
  2. 信号滞后:突破信号需要区间持续一段时间才能确认,滑动窗口无法追踪"这个区间已经持续了多久"

跨 bar 状态机解决了这两个问题:状态一旦进入吸筹就锁住,动态跟踪区间边界,直到突破条件满足才转移。

4.3 参数选择的原则

所有参数(60 根 bar、15 根 bar、15%-40% 振幅、2% 突破)都来自 Wyckoff 原始文献的周期对称性原则:

  • 60 根 bar ≈ 3 个月,覆盖一个完整的机构建仓周期
  • 15 根 bar ≈ 3 周,是"稳定区间"的最小时间窗口
  • 15%-40% 振幅:低于 15% 无利润空间,高于 40% 不是横盘
  • 2% 突破:日频尺度下,小于 2% 的突破可能是噪音,大于 2% 才构成"有效突破"

五、已知局限

  1. 纯价格形态:当前策略仅依赖收盘价判定区间和突破,未引入成交量确认(如吸筹区缩量、突破时放量)
  2. 无大盘环境过滤:熊市中威科夫形态的假突破概率显著上升,当前未做任何市场状态过滤
  3. 做空逻辑:A 股做空机制不完善,down_trend 阶段的做空信号在实际交易中可能无法有效执行
  4. 参数固定:振幅阈值和突破阈值对所有标的统一,未做自适应调整

评论

还没有评论,来说点什么吧
0 / 2000