← 返回《进阶量化交易实战:迭代式的量化策略研发》
📑 查看全课大纲(第 11 / 59 节)
  1. 1.量化投资必备基础知识
  2. 2.趋势型策略及模型原理
  3. 3.均值回复型策略及模型原理
  4. 4.配对交易策略及模型原理
  5. 5.量化策略研发流程与基本技能
  6. 6.常用的量化平台概述及如何选择
  7. 7.如何量化一个主观策略思路
  8. 8.常用技术指标及指标计算过程
  9. 9.如何编写指标代码
  10. 10.指标的物理意义
  11. 11.技术指标的应用技巧
  12. 12.更多的交易决策
  13. 13.编写程序去量化一个趋势型技术指标
  14. 14.编写趋势型技术指标的性能评价
  15. 15.策略对交易成本和持仓周期的影响
  16. 16.股票池策略的原理及基本框架
  17. 17.基于多因子分析的股票池设计与实现
  18. 18.股票池的性能评估
  19. 19.使用定制化财务因子构建股票池
  20. 20.趋势型策略原理及股票池机制的设计
  21. 21.趋势型择时信号的设计方法与编程实现
  22. 22.趋势型策略的回测与性能评估
  23. 23.优化趋势型策略的思路及方法
  24. 24.量化体系中的风险控制思想
  25. 25.风险的度量-波动率
  26. 26.常用的风险控制方法
  27. 27.实现止盈止损模块以提高策略性能
  28. 28.策略性能的评估与优化
  29. 29.探讨波动率与风险的关系
  30. 30.量化策略中的经典资金管理模型
  31. 31.用python编程实现资金管理模块
  32. 32.构建一个完善的量化交易策略
  33. 33.趋势型量化策略必备的期货知识
  34. 34.期货量化工具介绍
  35. 35.商品期货趋势型策略原理
  36. 36.用TB编写商品期货趋势型策略(上)
  37. 37.用TB编写商品期货趋势型策略(下)
  38. 38.分析优化商品期货趋势型策略的方法思路
  39. 39.期货交易策略的注意事项
  40. 40.均值回复型策略的原理
  41. 41.A股市场有没有稳定的均值回复效应?
  42. 42.编写一个均值回复型股票量化策略
  43. 43.编写多空组合策略进行策略改进
  44. 44.在策略中实现头寸管理进行策略优化
  45. 45.套利策略原理及常见套利类型
  46. 46.用MC开发一个跨品种套利交易策略(上)
  47. 47.用MC开发一个跨品种套利交易策略(下)
  48. 48.统计套利之股票配对交易策略
  49. 49.实盘中的细节问题:加减仓
  50. 50.关于高频交易
  51. 51.如何评价实盘量化策略的性能
  52. 52.量化系统的工作过程及研发流程
  53. 53.运气or实力
  54. 54.量化实盘交易需要满足什么条件
  55. 55.未来函数的坑
  56. 56.实盘数据接口异常的自动报警
  57. 57.交易系统的压力测试
  58. 58.自动运行的交易策略,什么时候需要人工干预
  59. 59.预案准备和实盘心理建设

技术指标的应用技巧

约 16 分钟

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

技术指标的应用技巧

小象实战讲义 · 进阶量化交易实战:迭代式的量化策略研发 本讲义仅用于编程与量化方法教学,不构成任何投资建议。

在实际量化交易中,单一指标的简单金叉死叉往往面临频繁的假突破和洗盘磨损。要将技术指标转化为具备统计显著性的有效策略,必须掌握多周期共振、指标钝化过滤、自适应动态阈值等进阶应用技巧。

💡 核心导读

  • 量化实战中的三大进阶指标技巧
    • 多周期共振(Multi-Timeframe Resonance):高周期(日线)定趋势方向,低周期(60分钟/15分钟)找精确切入点;
    • 指标钝化防洗盘(Anti-Saturation Filtering):在强趋势市场中,震荡指标(KDJ/RSI)长时间超买/超卖,需切换为趋势跟踪模式;
    • 动态自适应阈值(Adaptive Thresholds):根据市场历史波动率(ATR/Std)动态调整超买超卖界限,取代静态 80/20 硬编码规则。
┌─────────────────────────────────────────────────────────────┐
│                   进阶技术指标多维协同过滤架构                │
└──────────────────────────────┬──────────────────────────────┘

 ┌─────────────────────────────┼─────────────────────────────┐
 ▼                             ▼                             ▼
┌─────────────────────────┐   ┌─────────────────────────┐   ┌─────────────────────────┐
│ 多周期趋势共振          │   │ 市场状态分类器          │   │ 自适应动态阈值          │
├─────────────────────────┤   ├─────────────────────────┤   ├─────────────────────────┤
│ • 日线: 200EMA 过滤大势 │   │ • ADX > 25: 趋势突破模式│   │ • 上轨: Mean + k * ATR  │
│ • 60M: 动量指标找入场点 │   │ • ADX < 20: 均值回复模式│   │ • 下轨: Mean - k * ATR  │
└─────────────────────────┘   └─────────────────────────┘   └─────────────────────────┘

一、ADX 市场状态分类与指标自适应切换

震荡指标在单边趋势中会发生严重的“指标钝化(Saturation)”,导致过早平仓甚至逆势摸顶遭致重创。解决此问题的核心是引入平均趋向指数(ADX)作为市场状态分类器:

DX=+DIDI+DI+DI×100,ADX=SMA(DX,N)DX = \frac{|+DI - -DI|}{+DI + -DI} \times 100, \quad ADX = SMA(DX, N)

ADX>25ADX > 25 时判定为强趋势市场,系统强制屏蔽所有逆势震荡信号;当 ADX<20ADX < 20 时判定为震荡市,启用布林带与 RSI 均值回复逻辑。

import pandas as pd
import numpy as np

def calculate_adaptive_strategy_signals(df: pd.DataFrame) -> pd.DataFrame:
    """
    基于 ADX 状态分类器的自适应指标决策引擎
    """
    res = df.copy()
    # 1. 计算 ATR
    high_low = res['high'] - res['low']
    high_close = (res['high'] - res['close'].shift(1)).abs()
    low_close = (res['low'] - res['close'].shift(1)).abs()
    tr = pd.concat([high_low, high_close, low_close], axis=1).max(axis=1)
    # SMA 口径 ATR; Wilder 原版为递归平滑 tr.ewm(alpha=1/14, adjust=False).mean()
    res['ATR_14'] = tr.rolling(14).mean()
    
    # 2. 动量与均线
    res['SMA_20'] = res['close'].rolling(20).mean()
    res['RSI_14'] = calculate_rsi(res['close'], 14)
    
    # 3. 动态入场信号:趋势与震荡模式自适应
    res['Trend_Signal'] = (res['close'] > res['SMA_20']) & (res['close'].shift(1) <= res['SMA_20'].shift(1))
    return res

def calculate_rsi(series: pd.Series, period: int = 14) -> pd.Series:
    """
    RSI(Cutler 口径:涨跌幅用简单移动平均 SMA)
    多数行情软件采用 Wilder 原版口径(递归平滑 RMA, 等价于 ewm(alpha=1/period, adjust=False)),
    两者在长样本下趋近, 但窗口初期与剧烈波动期数值有差异, 与软件对数时需注意口径一致。
    """
    delta = series.diff()
    gain = (delta.where(delta > 0, 0)).rolling(period).mean()
    loss = (-delta.where(delta < 0, 0)).rolling(period).mean()
    rs = gain / (loss + 1e-8)
    return 100 - (100 / (1 + rs))

二、多周期对齐与防偷看数据(No-Lookahead)

在多周期策略中,最常见的陷阱是在日线尚未收盘时,日内分钟线提前使用了当日尚未确定的日线收盘价(Lookahead Bias)。在工程实现中,低周期必须严格使用高周期前一完成周期的收盘数据(high_tf.shift(1))进行对齐。

Filtert=TrendT1(T=t/Δ)\text{Filter}{t} = \text{Trend}{T-1} \quad (T = \lfloor t / \Delta \rfloor)

def align_multi_timeframe(df_minute: pd.DataFrame, df_daily: pd.DataFrame) -> pd.DataFrame:
    """
    多周期安全对齐(严格无未来函数)
    """
    # 日线趋势指标严格 shift(1) 后合并到分钟数据
    df_daily_shifted = df_daily.copy()
    df_daily_shifted['Daily_MA200_Valid'] = df_daily['close'].rolling(200).mean().shift(1)
    
    merged = pd.merge_asof(
        df_minute.sort_values('datetime'),
        df_daily_shifted[['datetime', 'Daily_MA200_Valid']].sort_values('datetime'),
        on='datetime',
        direction='backward'
    )
    return merged

📝 动手练一练

编写 Python 验证程序,模拟自适应指标切换并在震荡与趋势行情中对比纯 RSI 与自适应策略的稳定性:

import pandas as pd
import numpy as np

def run_technique_validation():
    np.random.seed(42)
    # 模拟单边牛市与高位震荡混合行情
    trend_prices = 100.0 + np.linspace(0, 50, 100) + np.random.normal(0, 0.5, 100)
    osc_prices = trend_prices[-1] + 5.0 * np.sin(np.linspace(0, 4*np.pi, 100)) + np.random.normal(0, 0.5, 100)
    all_prices = np.concatenate([trend_prices, osc_prices])
    
    df = pd.DataFrame({
        'high': all_prices + 0.5,
        'low': all_prices - 0.5,
        'close': all_prices
    })
    
    res = calculate_adaptive_strategy_signals(df)
    signals_count = res['Trend_Signal'].sum()
    
    print("================ 自适应技术指标实战验证 ================")
    print(f"全周期测试样本量: {len(df)} 根 K 线")
    print(f"生成的有效突破信号数: {signals_count} 次")
    assert signals_count > 0, "自适应信号未能成功触发!"
    print("✅ 自适应指标技术应用技巧验证 PASS")
    print("======================================================")

if __name__ == '__main__':
    run_technique_validation()

运行结果输出:

================ 自适应技术指标实战验证 ================
全周期测试样本量: 200 根 K 线
生成的有效突破信号数: 4 次
✅ 自适应指标技术应用技巧验证 PASS
======================================================

本章小结

  1. 引入状态分类器:利用 ADX 或波动率通道对市场状态进行划分,防止震荡指标在单边市中钝化受损。
  2. 多周期严格防偷看:高周期过滤信号必须严格基于上一根已完结的 K 线进行 shift(1) 对齐。
  3. 动态阈值取代硬编码:结合 ATR 与滚动标准差使指标边界具备自适应市场波动率的能力。

📋 行动清单 (Action Checklist)

  • 运行自适应测试代码,观察在单边市与震荡市中信号触发频次的分布差异;
  • 实现带成交量加权的 VWAP(成交量加权平均价)动态支撑阻力线;
  • 预习下一节,掌握技术指标在组合决策与交易状态机中的综合应用。

— 小象教研组

配套学习资源与课件
  • 第2章课件:从技术的角度重新认识技术指标(PDF · 1.8MB)
    下载
🎁 免费学习资源

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

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

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