查看全课大纲(第 15 / 38 节)

基于分形的交易信号开发

约 5 分钟

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

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

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

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


💡 核心导读

  • 分形结构的几何定义(以标准 5-bar 对称结构为例):
    • 顶分型(Top Fractal / 局部极值高点):
      • 中间根 K 线(t−2t-2)的最高价同时高于其左侧两根(t−4,t−3t-4, t-3)与右侧两根(t−1,tt-1, t)的最高价: Hight−2>Hight−4∧Hight−2>Hight−3∧Hight−2>Hight−1∧Hight−2>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 线(t−2t-2)的最低价同时低于其左侧两根(t−4,t−3t-4, t-3)与右侧两根(t−1,tt-1, t)的最低价: Lowt−2<Lowt−4∧Lowt−2<Lowt−3∧Lowt−2<Lowt−1∧Lowt−2<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
  • 工程防坑铁律:滞后确认与未来函数防范:
    • 要想在数学上严格确认 t−2t-2 日是顶/底分型,必须等待其右侧的两根 K 线(t−1t-1 与 tt)完全走完且收盘!
    • 绝对禁忌:若在 t−2t-2 日当天或盘中提前发出分型买卖信号并以 t−2t-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 线收盘,Hight−2High_{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})

⚠️ 分形信号的滞后性:分型必须等 t 日收盘才能确认 t-2 的形态,本质是滞后信号,确认时价格往往已经走出一段;它只描述几何形态,不预测方向。本节代码与输出均基于内置合成行情,仅演示信号的计算口径,不构成任何买卖建议,也不代表信号在真实市场的胜率或收益;技术指标在震荡市可能频繁假信号,信号参数(周期/阈值)过度贴合某段历史即过拟合,实盘还须计入滑点、佣金与冲击成本。回测偏差的系统讨论见 3.7、5.4。

📌 合规自查(回测/策略类内容的通用前提):幸存者偏差(回测样本必须包含当时在市、日后可能退市的全部标的,只在幸存股票上计算会虚增表现)。


📝 动手练一练

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

import pandas as pd
# 保证宽表在任意终端宽度下都完整打印(不折叠中间列),使输出确定、可复现
pd.set_option("display.width", 250)
pd.set_option("display.max_columns", None)
pd.set_option("display.max_rows", None)
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("================================================================")
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
    下载