📑 查看全课大纲(第 12 / 38 节)
- 1.课程介绍与学习目标
- 2.量化交易的发展
- 3.主观投资与量化投资的关系
- 4.认识一个量化策略(1)
- 5.认识一个量化策略(2)
- 6.理工生做量化的优势
- 7.量化交易系统的基本架构
- 8.必要的交易基础知识及参考资料
- 9.上节课思考题及本节课内容介绍
- 10.技术指标简介
- 11.基于MACD的交易信号开发(1)
- 12.基于MACD的交易信号开发(2)
- 13.基于RSI的交易信号开发
- 14.基于BOLL的交易信号开发
- 15.基于分形的交易信号开发
- 16.总结及下节课预告
- 17.开发环境安装
- 18.获取指数和个股历史行情数据
- 19.修复行情数据中的问题
- 20.抓取财报数据、数据定时更新
- 21.实现低PE股票池(1)
- 22.实现低PE股票池(2)
- 23.实现低PE策略的回测(1)
- 24.实现低PE策略的回测(2)
- 25.风险控制综述
- 26.风险控制中的止盈止损
- 27.仓位管理的工程实现
- 28.完整策略介绍-基础策略
- 29.策略的分步优化
- 30.策略评价指标(1)
- 31.策略评价指标(2)
- 32.如何评价策略
- 33.如何优化策略
- 34.tick数据的意义
- 35.tick数据的介绍及使用
- 36.Hans123策略
- 37.经典买入三法策略
- 38.量化系统的完整研发和系统搭建
基于MACD的交易信号开发(2)
约 2 分钟
📺 正在播放小象官方高清录播(支持倍速与清晰度调节)
基于MACD的交易信号开发(二):相切与粘合边界判定
小象实战讲义 · 初阶量化交易:策略编写及系统搭建 本讲义仅用于编程与量化方法教学,不构成任何投资建议。
在量化策略由理论公式走向实盘工程落地的过程中,最考验工程师功力的往往不是标准趋势下的常规计算,而是面对极端行情数据时的边界异常情况处理。在指标交叉信号的判定中,两条曲线恰好相等(相切 Tangency)或连续数日贴合波动(粘合 Cohesion)是造成回测与实盘信号漂移的经典工程隐患。
本讲紧承上一讲的 MACD 交叉原理,深入探讨指标曲线相切与粘合时的量化判定哲学、状态回溯机制与死区过滤算法,帮助开发者构建具备强鲁棒性的工业级信号检测器。
💡 核心导读
- 相切(Tangency)是否算作交叉?
- 策略定义差异:相切表示两条曲线数值相等()。若随后同向反弹(并未真正穿透),是否触发买卖取决于交易者的风控偏好;
- 严格过滤方案:若要求真正的趋势穿越,必须向前回溯历史有效方向(回溯至 或更早的非零状态),仅在符号发生真正的正负反转( 或 )时才确认交叉。
- 多根 K 线粘合(Cohesion)的工程治理:
- 在窄幅横盘震荡行情中,快慢线可能连续多日处于极其微小的数值波动范围(受浮点数精度影响频繁在 0 附近跳变);
- 治理手段:引入死区容差阈值(Deadband Tolerance)或确认延迟计数器,过滤微小噪音引起的虚假高频换手。
- 信号状态机的完备性设计:
- 量化系统切忌小觑”交叉”二字,必须保证在相切、粘合、数据缺失、浮点微差等全场景下具备确定性的逻辑闭环。
┌─────────────────────────────────────────────────────────────┐
│ 指标相切与粘合的判定逻辑 │
└──────────────────────────────┬──────────────────────────────┘
│
┌─────────────────────────────┴─────────────────────────────┐
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ 相切反弹 (未穿透) │ │ 真正穿越 (穿透) │
├──────────────────┤ ├──────────────────┤
│ t-1: DIFF < DEA │ │ t-1: DIFF < DEA │
│ t : DIFF == DEA │ │ t : DIFF == DEA │
│ t+1: DIFF < DEA │ │ t+1: DIFF > DEA │
│ => 严格过滤,不触发│ │ => 确认金叉,触发买入│
└──────────────────┘ └──────────────────┘一、指标相切与粘合的本质解析
1. 相切(Tangency)现象
在价格接近反转但动能不足时,快线 往往向上触碰慢线 后再度拐头向下。在数学判定式中: 如果条件写成 或 ,相切点将被误判为金叉;若下一交易日再度回落,就会产生无意义的虚假开仓与滑点损耗。
2. 粘合(Cohesion)现象
在长时间的无趋势横盘中, 与 的差值可能在 之间徘徊。如果未设置浮点数死区,计算机底层的数值舍入误差可能导致买卖信号频繁来回震荡,严重干扰仓位管理。
二、鲁棒交叉检测器的工程实现方案
为杜绝边界相切与浮点微差导致的误触发,成熟量化系统通常采用如下状态机设计:
- 浮点死区截断(Tolerance Clean):对差值小于容差 (如 )的波动视为 0;
- 有效状态前向填充(Direction ffill):将相切点(0)替换为前一个非零的有效运动方向;
- 符号跃迁检测(Sign Shift Inversion):仅在有效方向由 跃迁至 时确认金叉,由 跃迁至 时确认死叉。
📝 动手练一练
下面我们通过 Python 代码,实现一个具备相切过滤与死区容差能力的鲁棒交叉信号检测器,测试在指标相切并反弹的数据形态下能否精准杜绝误报:
import pandas as pd
import numpy as np
def robust_cross_detector(series_fast, series_slow, tolerance=1e-5):
"""
鲁棒的交叉信号检测器:
妥善处理指标相切 (Tangency) 与 多日粘合 (Cohesion) 等极端边界情况
"""
delta = series_fast - series_slow
# 1. 消除浮点数微小精度误差,落入死区内的置为 0
delta_clean = delta.apply(lambda x: 0.0 if abs(x) < tolerance else x)
# 2. 计算方向符号: +1 (快线在上), -1 (快线在下), 0 (粘合/相切)
sign = np.sign(delta_clean)
# 3. 有效方向前向填充: 排除相切反弹与中途粘合
valid_sign = sign.replace(0, np.nan).ffill().fillna(0)
# 4. 严格边沿判定: 仅当方向真正跨越 0 轴时确认交叉
strict_gold_cross = (valid_sign.shift(1) < 0) & (valid_sign > 0)
strict_dead_cross = (valid_sign.shift(1) > 0) & (valid_sign < 0)
df = pd.DataFrame({
'Fast': series_fast,
'Slow': series_slow,
'Delta': delta_clean,
'Strict_Gold': strict_gold_cross,
'Strict_Dead': strict_dead_cross
})
return df
def test_tangency_case():
dates = pd.date_range("2023-01-01", periods=6, freq="D")
# 构造一条 Fast 与 Slow 在第 3、4 天连续相切但未向上穿透的价格序列
fast = pd.Series([10.0, 9.5, 9.0, 9.0, 8.5, 8.0], index=dates)
slow = pd.Series([11.0, 10.0, 9.0, 9.0, 9.5, 10.0], index=dates)
res = robust_cross_detector(fast, slow)
print("================ 指标相切与粘合异常检测 ================")
print(res)
print("-------------------------------------------------------")
print(f"严格金叉触发次数: {res['Strict_Gold'].sum()} (成功过滤中途相切假信号)")
print("=======================================================")
if __name__ == "__main__":
test_tangency_case()运行结果输出:
================ 指标相切与粘合异常检测 ================
Fast Slow Delta Strict_Gold Strict_Dead
2023-01-01 10.0 11.0 -1.0 False False
2023-01-02 9.5 10.0 -0.5 False False
2023-01-03 9.0 9.0 0.0 False False
2023-01-04 9.0 9.0 0.0 False False
2023-01-05 8.5 9.5 -1.0 False False
2023-01-06 8.0 10.0 -2.0 False False
-------------------------------------------------------
严格金叉触发次数: 0 (成功过滤中途相切假信号)
=======================================================本章小结
- 重视工程边界条件:简单的交叉判定在面对相切与粘合数据时极易产生虚假信号,必须设计明确的边界仲裁规则。
- 引入死区与状态回溯:使用容差阈值消除浮点精度抖动,使用有效方向前向回溯确认真实的符号反转。
- 保持逻辑自洽与完备:在编写量化信号函数时,切忌依赖偶然性假设,务必确保各类边缘用例均有确定性处理。
📋 行动清单 (Action Checklist)
- 运行本讲鲁棒交叉检测代码,尝试将第 4 天
fast改为 9.5,观察状态机能否正确触发严格金叉; - 在自己的技术指标计算模块中引入浮点死区截断机制(如 );
- 预习下一讲,学习摆动型指标代表 RSI 的相对强弱数学建模与超买超卖信号开发。
— 小象教研组
配套学习资源与课件
🎁 免费学习资源
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加课程顾问,免费获取网盘下载链接
微信扫码添加顾问