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

认识一个量化策略(2)

约 14 分钟

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

认识一个量化交易策略(2)

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

在量化投资的世界中,构建一个策略究竟需要经历哪些标准步骤?为什么在数学模型上看起来天衣无缝的博弈策略,在真实金融市场中却往往难以直接照搬?

承接上一讲对博弈论策略的探讨,本讲将深入剖析真实市场群体博弈的动态本质,并以量化交易中最经典的原型——**双均线策略(MA5 / MA10)**为例,完整走通从参数初始化、数据准备、信号检测到回测归因诊断的全生命周期,揭示策略从”逻辑构想”到”实战检验”的真实演进规律。


💡 核心导读

  • 群体博弈的现实本质
    • 任何资金都不可能长期绝对控盘或操纵全市场大盘;
    • 真实金融市场充满假象、博弈与反制,不存在固定正期望的静态套利游戏
    • 量化策略没有绝对的”对与错”,只有与自身风险偏好和资金规模相匹配的”合适与不合适”。
  • 量化策略的标准生命周期
    • 参数与标的初始化:设定基准(Benchmark 如沪深 300)、交易标的、摩擦成本(印花税与佣金);
    • 行情数据对齐:加载高开低收成交量(OHLCV)标准时序数据;
    • 信号生成逻辑:金叉买入(短周期上穿长周期)、死叉卖出(短周期下穿长周期);
    • 回测验证与归因诊断:重点观察收益率、最大回撤幅度与回撤持续时长。
  • 经典双均线策略实战警示
    • 朴素双均线策略在震荡行情中极易产生连续假突破与频繁摩擦磨损;
    • 实盘量化追求的是平稳向上的资金曲线,单纯依赖原始均线交叉不可直接上实盘,必须叠加过滤器与头寸控制。
┌─────────────────────────────────────────────────────────────┐
│                    量化策略标准开发与回测流水线                 │
└──────────────────────────────┬──────────────────────────────┘

 ┌─────────────────────────────┼─────────────────────────────┐
 ▼                             ▼                             ▼
┌──────────────────┐   ┌──────────────────┐   ┌──────────────────┐
│  参数与环境初始化 │   │  信号检测与触发   │   │  回测归因与诊断   │
├──────────────────┤   ├──────────────────┤   ├──────────────────┤
│ • 标的/基准设定  │   │ • MA5 > MA10 金叉│   │ • 累计收益 vs 基准│
│ • 佣金与税费规费 │   │ • MA5 < MA10 死叉│   │ • 最大回撤与夏普比│
│ • 日线数据加载   │   │ • 生成交易指令   │   │ • 震荡市磨损评估 │
└──────────────────┘   └──────────────────┘   └──────────────────┘

一、从博弈游戏到二级市场:群体博弈的动态真实

在上一讲的猜硬币博弈模型中,当庄家(美女)以特定概率 y(1/4,3/8)y \in (1/4, 3/8) 随机出正面时,无论对手采取何种出牌概率 xx,对手的数学期望收益恒为负:

E=12xy4(x+y)+1<0E = 12xy - 4(x+y) + 1 < 0

然而,在真实二级市场中,这种”单向绝对收割模型”并不存在:

  1. 不存在全知全能的控盘资金:没有任何机构能长期锁定全市场指数。市场由成千上万具有不同目标、周期和信息的参与者共同博弈构成。
  2. 反制与动态平衡:若某一策略模式被普遍识别,市场博弈结构会迅速演化出反制策略,原有规律随之钝化或消失。
  3. 策略的适配性原则:量化交易中没有放之四海皆准的”圣杯”。高收益往往伴随高波动,稳健收益往往牺牲爆发力。策略研发的核心在于寻找与自身资金属性、流动性需求和心理承受力最契合的方案

二、经典量化原型:双均线策略的全流程拆解

双均线策略(Dual Moving Average Crossover)是趋势跟踪领域最基础、最直观的经典策略:

1. 策略核心逻辑

  • 短期均线(MA5):反映资产近 5 个交易日的短期持仓成本与动量;
  • 长期均线(MA10):反映资产近 10 个交易日的中期趋势方向;
  • 交易规则
    • 黄金交叉(金叉)MA5MA_5 向上穿越 MA10MA_{10},表明短期动能强劲,发出买入开仓信号;
    • 死亡交叉(死叉)MA5MA_5 向下穿越 MA10MA_{10},表明短期趋势转弱,发出平仓卖出信号。

2. 真实回测必须包含的交易摩擦成本

在量化回测中,如果忽略交易成本,回测结果将完全失真。标准股票回测应内置以下摩擦规费:

  • 印花税:单边卖出收取万分之五(0.05%,2023-08-28 起减半征收);
  • 佣金费率:双边收取(如万分之三 0.03%),且设置单笔最低佣金(如 5 元);
  • 滑点与冲击成本:市价单成交时的价差损耗。

三、回测诊断与实战反思:为什么简单均线不能直接上实盘?

在专业量化平台对标的进行双均线历史回测时,常观察到以下典型现象:

  1. 趋势行情中表现优异:在单边大幅上涨行情中,均线系统能牢牢捕捉主升浪,实现可观收益;
  2. 震荡行情中频繁挨打(锯齿形磨损):在无明显趋势的横盘震荡区间,价格频繁上下穿插均线,导致系统高频发出错误信号,出现”追高买入即回落、止损卖出即反弹”的反复亏损;
  3. 回撤持续时间漫长:朴素双均线策略的最大回撤往往超过 20% ~ 30%,且回撤修复周期可能长达一年以上,夏普比率较低(常在 0.3 以下)。

💡 专业量化的改进方向: 简单均线策略是极佳的学习样板,但实战中必须引入波动率过滤器(如 ATR)、均线发散阈值确认、宏观大盘状态过滤以及动态仓位管理模块,才能真正转化为具备抗风险能力的实盘策略。


📝 动手练一练

下面我们用纯 Python 实现一个完整的双均线策略回测引擎,内置佣金与印花税摩擦成本扣除,模拟计算买入持有基准(Benchmark)与双均线策略在 250 个交易日中的资金曲线演变及最大回撤指标:

import numpy as np
import pandas as pd

def dual_moving_average_backtest():
    """
    实现经典双均线(MA5 / MA10)策略回测引擎
    对比策略收益率、买入持有基准收益率与最大回撤
    """
    np.random.seed(42)
    n_days = 250  # 模拟 250 个交易日 (约 1 个完整自然年)
    
    # 1. 模拟资产日线价格序列 (几何布朗运动)
    daily_returns = np.random.normal(0.0005, 0.02, n_days)
    prices = 10.0 * np.exp(np.cumsum(daily_returns))
    
    df = pd.DataFrame({'Close': prices})
    
    # 2. 计算 5 日与 10 日移动平均线
    df['MA5'] = df['Close'].rolling(window=5).mean()
    df['MA10'] = df['Close'].rolling(window=10).mean()
    
    # 3. 信号检测: MA5 上穿 MA10 产生金叉(持仓 Signal=1),否则空仓(Signal=0)
    df['Signal'] = 0
    df.loc[df['MA5'] > df['MA10'], 'Signal'] = 1
    
    # 次日开盘执行信号 (避免未来函数,持仓滞后一期生效)
    df['Position'] = df['Signal'].shift(1).fillna(0)
    
    # 4. 计算每日收益与累计净值曲线
    df['Pct_Change'] = df['Close'].pct_change().fillna(0)
    df['Strategy_Return'] = df['Position'] * df['Pct_Change']
    
    # 5. 扣除交易摩擦成本: 买入收佣金万三, 卖出收佣金万三 + 印花税万五
    COMMISSION = 0.0003   # 佣金费率 (双边收取)
    STAMP_TAX = 0.0005    # 印花税 (仅卖出单边收取, 2023-08-28 起减半征收)
    position_change = df['Position'].diff().fillna(0)  # 持仓变动: +1 买入开仓, -1 卖出平仓
    cost_rate = np.where(position_change > 0, COMMISSION, COMMISSION + STAMP_TAX)
    df['Strategy_Return'] = df['Strategy_Return'] - np.abs(position_change) * cost_rate
    
    initial_cash = 100000.0
    df['Benchmark_Equity'] = (1 + df['Pct_Change']).cumprod() * initial_cash
    df['Strategy_Equity'] = (1 + df['Strategy_Return']).cumprod() * initial_cash
    
    # 6. 计算最大回撤指标
    peak = df['Strategy_Equity'].cummax()
    drawdown = (peak - df['Strategy_Equity']) / peak
    max_dd = drawdown.max()
    
    strat_ret = (df['Strategy_Equity'].iloc[-1] - initial_cash) / initial_cash
    bench_ret = (df['Benchmark_Equity'].iloc[-1] - initial_cash) / initial_cash
    
    print("================ 双均线策略 (MA5/MA10) 回测诊断 ================")
    print(f"回测周期: {n_days} 个交易日")
    print(f"基准(买入持有)收益: {bench_ret*100:.2f}% | 最终资产: {df['Benchmark_Equity'].iloc[-1]:,.2f} 元")
    print(f"双均线策略收益:     {strat_ret*100:.2f}% | 最终资产: {df['Strategy_Equity'].iloc[-1]:,.2f} 元")
    print(f"策略最大资产回撤:   {max_dd*100:.2f}%")
    print("=============================================================")
    return df

if __name__ == "__main__":
    dual_moving_average_backtest()

运行结果输出:

================ 双均线策略 (MA5/MA10) 回测诊断 ================
回测周期: 250 个交易日
基准(买入持有)收益: 10.79% | 最终资产: 110,788.32 元
双均线策略收益:     -13.54% | 最终资产: 86,456.32 元
策略最大资产回撤:   23.00%
=============================================================

📌 成本侵蚀实证:完全相同的信号序列下,若不扣成本,策略收益为 -11.91%、最大回撤 22.04%;计入佣金与印花税后,收益进一步恶化至 -13.54%、回撤扩大至 23.00%。震荡市中双均线频繁换手,每一次买卖都被摩擦成本持续蚕食净值——这正是「锯齿形磨损」在资金曲线上的量化体现。


本章小结

  1. 深刻理解博弈演化:金融市场不存在单向收割的静态套利机会,量化策略的有效性取决于对市场环境变化的动态适应。
  2. 掌握策略开发四部曲:参数初始化 → 干净数据对齐 → 明确信号判定 → 严谨回测归因。
  3. 正视震荡市假突破缺陷:朴素双均线策略易在震荡行情中产生频繁假信号与资本磨损,必须结合多周期过滤与仓位控制综合优化。

📋 行动清单 (Action Checklist)

  • 运行本讲双均线回测代码,尝试将均线参数由 (5, 10) 修改为 (10, 30)(20, 60),观察交易频率与回撤特征的变化;
  • 思考并记录:在双均线策略中加入什么附加过滤条件(如成交量放大或价格偏离幅度),能够有效减少震荡行情中的假金叉亏损;
  • 熟练掌握避免未来函数(shift(1) 信号次日生效)的标准回测设计方法。

— 小象教研组

配套学习资源与课件
  • 第1章课件:量化投资的发展和理工生跨界做量化的开启姿势(PDF · 2.5MB)
    下载
  • 开发环境准备:软件安装指导(PDF · 0.9MB · 建议第3章动手实践前先通读)
    下载
  • 量化入门推荐书单(PDF · 318KB)
    下载
🎁 免费学习资源

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

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

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