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

完整策略介绍-基础策略

约 20 分钟

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

完整策略架构设计:双均线基础策略搭建

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

在深入理解了风控止损与 CPR 仓位管理模型的理论之后,我们需要将其整合进一个标准化的量化策略工程底座中。在工业量化研发中,构建策略绝不能一蹴而就写出庞大繁杂的代码,而是必须遵循**“先搭建简洁可跑的基准(Baseline),再插拔式叠加风控与仓位模块进行渐进优化”** 的科学工程方法。

本讲系统介绍一个工业级量化策略的标准代码骨架(初始化配置、盘前准备、盘中撮合、盘后结算);以上证 50 指数成分股为标的池、MA10/MA30 为择时信号,构建极简的双均线基准策略(Baseline);并为下一讲的分步渐进优化提供严格的对照基准。


💡 核心导读

  • 一个完整量化交易系统的五大基础要素标的池 (Universe)×头寸规模 (Position)×入场择时 (Entry)×出场风控 (Exit)×执行撮合 (Execution)\text{标的池 (Universe)} \times \text{头寸规模 (Position)} \times \text{入场择时 (Entry)} \times \text{出场风控 (Exit)} \times \text{执行撮合 (Execution)}
  • 双均线基准策略(Baseline Strategy)设计规范
    • 股票池(Market Universe):上证 50 指数成分股(精选蓝筹龙头,流动性充裕);
    • 择时信号引擎(Timing Signal)
      • 快线 MA10 与 慢线 MA30(日 K 级别);
      • 金叉买入:MA10 上穿 MA30 时发出买入信号;
      • 死叉卖出:MA10 下穿 MA30 时发出清仓信号;
    • 初始仓位模型:模型 2 等价值均仓分配(Equal Value Units);
    • 基准对照组:沪深 300 指数(000300.XSHG)。
  • 标准量化策略生命周期函数接口
    • initialize(context):策略上线与回测启动时触发,配置基准指数、手续费佣金(如万三佣金 + 万五印花税)与定时任务映射;
    • before_market_open(context):每日 09:15 盘前触发,扫描股票池与成分股变动;
    • market_open(context):每日 09:30 盘中触发,执行金叉开仓与死叉平仓撮合;
    • after_market_close(context):每日 15:00 盘后触发,结算账户净值并输出运行日志。
┌─────────────────────────────────────────────────────────────┐
│                    量化策略生命周期与执行流图                 │
└──────────────────────────────┬──────────────────────────────┘

 ┌─────────────────────────────┼─────────────────────────────┐
 ▼                             ▼                             ▼
┌──────────────────┐   ┌──────────────────┐   ┌──────────────────┐
│ initialize       │   │ market_open      │   │ after_market     │
├──────────────────┤   ├──────────────────┤   ├──────────────────┤
│ • 设定基准指数   │   │ • 遍历持仓股     │   │ • 每日收盘结算   │
│ • 配置万三佣金   │   │ • MA10 死叉卖出  │   │ • 核算总资产净值 │
│ • 注册定时调度   │   │ • MA10 金叉买入  │   │ • 记录策略回测日志│
└──────────────────┘   └──────────────────┘   └──────────────────┘

一、双均线基础策略的优缺点剖析

双均线(如 MA10 / MA30)是趋势跟踪策略中最经典的代表:

  • 核心优势:在单边波澜壮阔的大牛市中,能够牢牢抓住主升浪,胜率不高但单笔盈亏比极高;
  • 致命弱点:在无明确趋势的宽幅震荡市或横盘行情中,快慢均线频繁缠绕死叉,会产生密集的虚假交易信号,导致”买在山顶、割在山底”的反复频繁摩擦亏损。

二、基准策略核心代码实现

在标准量化回测框架中,开盘交易核心逻辑如下:

def market_open(context):
    for stock in g.stocks:
        # 获取历史收盘价
        close_data = attribute_history(stock, g.long_window + 5, '1d', ['close'])
        
        # 数据长度校验: 新股上市或长期停牌导致历史数据不足慢线窗口时, 跳过本标的
        if len(close_data) < g.long_window:
            continue
        
        ma_short = close_data['close'][-g.short_window:].mean()
        ma_long = close_data['close'][-g.long_window:].mean()
        
        # 死叉清仓
        if ma_short < ma_long and stock in context.portfolio.positions:
            order_target(stock, 0)
        # 金叉买入
        elif ma_short > ma_long and stock not in context.portfolio.positions:
            order_value(stock, g.cash_per_stock)

📝 动手练一练

下面我们用 Python 编写一段 双均线基准策略模拟引擎,演示当快线 MA10 上穿与下穿慢线 MA30 时,系统如何自动判定金叉买入与死叉平仓:

import pandas as pd
import numpy as np

def run_dual_ma_baseline(prices_df, short_win=10, long_win=30):
    """
    双均线基准策略 (Baseline Strategy):
    1. 计算 MA10 (快线) 与 MA30 (慢线)
    2. MA10 上穿 MA30 产生金叉买入信号
    3. MA10 下穿 MA30 产生死叉卖出信号
    """
    df = prices_df.copy()
    df['MA_Fast'] = df['close'].rolling(short_win).mean()
    df['MA_Slow'] = df['close'].rolling(long_win).mean()
    
    # 判定交叉边沿
    df['Golden_Cross'] = (df['MA_Fast'] > df['MA_Slow']) & (df['MA_Fast'].shift(1) <= df['MA_Slow'].shift(1))
    df['Death_Cross'] = (df['MA_Fast'] < df['MA_Slow']) & (df['MA_Fast'].shift(1) >= df['MA_Slow'].shift(1))
    
    return df

def test_baseline_run():
    np.random.seed(16)
    dates = pd.date_range("2023-01-01", periods=35, freq="B")
    
    # 模拟价格先震荡后走出明显牛市波段
    base = 10.0 + np.cumsum(np.random.normal(0.08, 0.2, 35))
    df = pd.DataFrame({'close': base}, index=dates)
    
    res = run_dual_ma_baseline(df, short_win=5, long_win=15)
    
    print("================ 双均线基准策略 (Baseline) 信号输出 ================")
    crosses = res[res['Golden_Cross'] | res['Death_Cross']]
    print(crosses[['close', 'MA_Fast', 'MA_Slow', 'Golden_Cross', 'Death_Cross']])
    print("------------------------------------------------------------------")
    print(f"回测区间内共捕获金叉买入次数: {res['Golden_Cross'].sum()} | 死叉卖出次数: {res['Death_Cross'].sum()}")
    print("==================================================================")

if __name__ == "__main__":
    test_baseline_run()

运行结果输出:

================ 双均线基准策略 (Baseline) 信号输出 ================
                close   MA_Fast   MA_Slow  Golden_Cross  Death_Cross
2023-01-23  10.196061  9.890427  9.823067          True        False
------------------------------------------------------------------
回测区间内共捕获金叉买入次数: 1 | 死叉卖出次数: 0
==================================================================

本章小结

  1. 规范量化策略架构:严格遵守初始化、盘前准备、盘中撮合与盘后结算四段式生命周期。
  2. 确立基准对照基石:双均线基准策略(MA10/MA30 + 上证 50 + 均仓)为后续所有风控与仓位优化提供了客观检验标尺。
  3. 正视均线滞后缺陷:纯均线死叉离场滞后性大,在剧烈见顶行情中易回吐大量利润,亟需在下一讲引入风控与仓位优化。

📋 行动清单 (Action Checklist)

  • 运行本讲双均线基准代码,核验均线滑动窗口与金叉死叉判定逻辑;
  • 思考如果仅依赖死叉卖出,在标的见顶暴跌 20% 时策略会遭受多大损失;
  • 预习下一讲,学习如何通过叠加 CPR 仓位模型与跟踪止盈对基础策略进行分步阶梯式优化。

— 小象教研组

配套学习资源与课件
  • 第4章课件:仓位管理和风险控制功能实现(PDF · 1.3MB)
    下载
  • 开发环境准备:软件安装指导(PDF · 0.9MB · 建议第3章动手实践前先通读)
    下载
  • 量化入门推荐书单(PDF · 318KB)
    下载
🎁 免费学习资源

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

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

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