← 返回《初阶量化交易:策略编写及系统搭建》
📑 查看全课大纲(第 15 / 38 节)

基于分形的交易信号开发

约 5 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

基于分形的交易信号开发

小象实战讲义 · 初阶量化交易:策略编写及系统搭建 本讲义仅用于编程与量化方法教学,不构成任何投资建议。

在量化交易的形态识别体系中,分形(Fractals) 是极具几何直觉与非线性特征的经典工具。它最早由比尔·威廉姆斯(Bill Williams)在其《混沌操作法》中系统提出,通过直接解构 K 线序列中的局部极值几何结构,捕捉市场动量反转的关键拐点,摆脱了对传统数值滤波器的依赖。

本讲将从底层几何拓扑出发,严密定义标准 5 根 K 线对称顶分型(Top Fractal)与底分型(Bottom Fractal) 的数学判定条件;重点揭示量化回测中分形固有滞后确认机制与严禁渗透未来函数(Look-ahead Bias) 的工程铁律;并探讨不同窗口宽度与非对称形态(如 W 底、M 头)的扩展开发空间。


💡 核心导读

  • 分形结构的几何定义(以标准 5-bar 对称结构为例)
    • 顶分型(Top Fractal / 局部极值高点)
      • 中间根 K 线(t2t-2)的最高价同时高于其左侧两根(t4,t3t-4, t-3)与右侧两根(t1,tt-1, t)的最高价Hight2>Hight4Hight2>Hight3Hight2>Hight1Hight2>HightHigh_{t-2} > High_{t-4} \land High_{t-2} > High_{t-3} \land High_{t-2} > High_{t-1} \land High_{t-2} > High_t
    • 底分型(Bottom Fractal / 局部极值低点)
      • 中间根 K 线(t2t-2)的最低价同时低于其左侧两根(t4,t3t-4, t-3)与右侧两根(t1,tt-1, t)的最低价Lowt2<Lowt4Lowt2<Lowt3Lowt2<Lowt1Lowt2<LowtLow_{t-2} < Low_{t-4} \land Low_{t-2} < Low_{t-3} \land Low_{t-2} < Low_{t-1} \land Low_{t-2} < Low_t
  • 工程防坑铁律:滞后确认与未来函数防范
    • 要想在数学上严格确认 t2t-2 日是顶/底分型,必须等待其右侧的两根 K 线(t1t-1tt)完全走完且收盘
    • 绝对禁忌:若在 t2t-2 日当天或盘中提前发出分型买卖信号并以 t2t-2 日价格成交,属于严重的未来函数作弊!实盘与规范回测中,必须在 tt 日盘后确认信号,并在 t+1t+1 日执行交易。
  • 分形宽度的灵活扩展
    • 检测宽度可灵活拓展至 N{3,5,7,9,}N \in {3, 5, 7, 9, \dots}
    • 窗口越大,过滤的局部杂波越多,捕捉到的支撑/压力级别越宏大。
┌─────────────────────────────────────────────────────────────┐
│                    标准 5-Bar 顶分型与底分型结构               │
└──────────────────────────────┬──────────────────────────────┘

 ┌─────────────────────────────┴─────────────────────────────┐
 ▼                                                           ▼
┌──────────────────┐                               ┌──────────────────┐
│   顶分型 (屋顶)   │                               │   底分型 (谷底)   │
├──────────────────┤                               ├──────────────────┤
│        ▲ [t-2]   │                               │  |       | [t-2] │
│      ▲ | ▲       │                               │  | ▲   ▲ |       │
│    ▲ | | | ▲     │                               │  ▼ | ▼ | ▼       │
│   t-4 t-3 t-1 t  │                               │   t-4 t-3 t-1 t  │
│ => 中间最高,见顶预警│                              │ => 中间最低,企稳见底│
└──────────────────┘                               └──────────────────┘

一、分形的形态学原理与非线性特征

1. 摆脱传统均线滞后的几何形态

与依赖多期加权平均的均线指标不同,分形直接基于 K 线的真实极值点(High / Low)进行空间几何定位。顶分型构成局部的动态压力位(Resistance),底分型构成局部的动态支撑位(Support)

2. 回测中的时间因果律与滞后确认

许多主观交易者在复盘图表时,看到分形尖顶就误以为能在当天逃顶。但在量化程序化执行中,因果律不可违背

  • 只有当第 5 根 K 线收盘,Hight2High_{t-2} 高于前后全部 4 根的条件才被最终确定;
  • 因此,分形信号天然具有 2 根 K 线的确认滞后(Lag)。量化策略通常将分形点位作为画线支撑压力线、ATR 突破通道锚点或形态止损基准。

二、矢量化分形检测与数据库落库实现

利用 Pandas 的 shift 函数,可一次性将 5 根 K 线对齐至同一行进行矢量化并行比对:

Top_Fractal=(Hshift2>Hshift0)(Hshift2>Hshift1)(Hshift2>Hshift3)(Hshift2>Hshift4)\text{Top_Fractal} = (H_{shift2} > H_{shift0}) \land (H_{shift2} > H_{shift1}) \land (H_{shift2} > H_{shift3}) \land (H_{shift2} > H_{shift4})


📝 动手练一练

下面我们用 Python 编写一段 5-Bar 顶分型与底分型量化检测引擎,演示如何使用 Pandas 矢量化提取形态,并严格保持时间因果律,杜绝未来函数:

import pandas as pd
import numpy as np

def compute_fractal_signals(df):
    """
    矢量化计算标准 5-bar 顶分型 (Top Fractal) 与 底分型 (Bottom Fractal)
    并在 t 日 (第 5 根 K 线走完的时刻) 确认 t-2 日的极值形态,严格保持时间因果律
    """
    df = df.copy()
    
    # 构造 5 根连续 K 线的高低点切片 (对齐至当前 t 日)
    h_mid = df['High'].shift(2)  # 中间根 (t-2)
    h_0 = df['High']             # 当日 (t)
    h_1 = df['High'].shift(1)    # (t-1)
    h_3 = df['High'].shift(3)    # (t-3)
    h_4 = df['High'].shift(4)    # (t-4)
    
    l_mid = df['Low'].shift(2)   # 中间根 (t-2)
    l_0 = df['Low']              # 当日 (t)
    l_1 = df['Low'].shift(1)     # (t-1)
    l_3 = df['Low'].shift(3)     # (t-3)
    l_4 = df['Low'].shift(4)     # (t-4)
    
    # 顶分型: 中间根最高价同时高于前后各两根
    df['Top_Fractal_Confirmed'] = (h_mid > h_0) & (h_mid > h_1) & (h_mid > h_3) & (h_mid > h_4)
    
    # 底分型: 中间根最低价同时低于前后各两根
    df['Bottom_Fractal_Confirmed'] = (l_mid < l_0) & (l_mid < l_1) & (l_mid < l_3) & (l_mid < l_4)
    
    return df

def test_fractal_run():
    np.random.seed(42)
    dates = pd.date_range("2023-01-01", periods=10, freq="D")
    
    # 构造含明确底分型 (Day 3) 与顶分型 (Day 7) 的高低点时序
    highs = [12.0, 11.0, 10.0, 11.5, 13.0, 14.0, 15.0, 14.2, 13.5, 12.0]
    lows  = [10.5,  9.5,  8.0,  9.8, 11.0, 12.5, 13.8, 13.0, 12.0, 10.8]
    
    df = pd.DataFrame({'High': highs, 'Low': lows}, index=dates)
    res = compute_fractal_signals(df)
    
    bottom_dates = res[res['Bottom_Fractal_Confirmed']].index.strftime('%Y-%m-%d').tolist()
    top_dates = res[res['Top_Fractal_Confirmed']].index.strftime('%Y-%m-%d').tolist()
    
    print("================ 5-Bar 顶分型/底分型量化检测引擎 ================")
    print(res[['High', 'Low', 'Bottom_Fractal_Confirmed', 'Top_Fractal_Confirmed']])
    print("----------------------------------------------------------------")
    print(f"确认底分型形态落地日期 (t 日): {bottom_dates} (对应极值低点发生在 t-2 日 2023-01-03)")
    print(f"确认顶分型形态落地日期 (t 日): {top_dates} (对应极值高点发生在 t-2 日 2023-01-07)")
    print("量化防坑: 分形必须滞后 2 根 K 线确认,切忌在 t-2 当天提前交易,否则构成未来函数!")
    print("================================================================")

if __name__ == "__main__":
    test_fractal_run()

运行结果输出:

================ 5-Bar 顶分型/底分型量化检测引擎 ================
            High   Low  Bottom_Fractal_Confirmed  Top_Fractal_Confirmed
2023-01-01  12.0  10.5                     False                  False
2023-01-02  11.0   9.5                     False                  False
2023-01-03  10.0   8.0                     False                  False
2023-01-04  11.5   9.8                     False                  False
2023-01-05  13.0  11.0                      True                  False
2023-01-06  14.0  12.5                     False                  False
2023-01-07  15.0  13.8                     False                  False
2023-01-08  14.2  13.0                     False                  False
2023-01-09  13.5  12.0                     False                   True
2023-01-10  12.0  10.8                     False                  False
----------------------------------------------------------------
确认底分型形态落地日期 (t 日): ['2023-01-05'] (对应极值低点发生在 t-2 日 2023-01-03)
确认顶分型形态落地日期 (t 日): ['2023-01-09'] (对应极值高点发生在 t-2 日 2023-01-07)
量化防坑: 分形必须滞后 2 根 K 线确认,切忌在 t-2 当天提前交易,否则构成未来函数!
================================================================

本章小结

  1. 掌握分形几何定义:顶分型代表局部最高阻力位,底分型代表局部最低支撑位。
  2. 严防未来函数漏洞:分形需要左右两侧数据支撑,必须滞后 2 根 K 线确认,严禁在未走完前提前入场。
  3. 拓展形态想象空间:分形支持不对称宽度(如 N=7,9N=7, 9)与复合形态(W 底、头肩顶),是构造高级形态滤波器的基础。

📋 行动清单 (Action Checklist)

  • 运行本讲分形检测代码,确认 Bottom_Fractal_Confirmed 准确在第 5 天落地,对应第 3 天的低点;
  • 尝试编写 7-Bar 分形识别函数(中间根对比前后各 3 根 K 线),对比信号频率的变化;
  • 阅读下一讲,系统总结第二章四大信号系统,并做好第三章搭建回测系统的准备。

— 小象教研组

配套学习资源与课件
  • 第2章课件:认识量化信号系统(PDF · 2.1MB)
    下载
  • 开发环境准备:软件安装指导(PDF · 0.9MB · 建议第3章动手实践前先通读)
    下载
  • 量化入门推荐书单(PDF · 318KB)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加课程顾问,免费获取网盘下载链接
微信二维码:扫码添加课程顾问微信扫码添加顾问