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

开发环境安装

约 30 分钟

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

量化回测系统全流程架构与开发环境准备

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

在完成了前两章关于量化交易基础通识与四大经典信号系统的学习后,我们正式进入从零搭建轻量级量化回测验证系统的工程实战阶段。一个工业级的量化交易系统并非简单的代码片段,而是一个涵盖数据工程(行情/财报爬取与清洗)、因子选股(低估值股票池构建)、择时信号引擎、事件驱动撮合回测以及资产净值诊断的完整软件闭环。

本讲首先系统梳理量化回测系统的标准工业架构,明确本章的核心战略目标——构建一个经典的低 PE 价值选股 + 10 日均线择时回测引擎;随后详细指导 Python 3.12 虚拟环境、MongoDB 非关系型数据库、PyMongo 驱动与 Tushare 财经数据接口的标准化搭建与环境体检。


💡 核心导读

  • 量化回测系统的五大标准子系统: 数据接入与清洗→财务因子选股 (PE)→择时信号生成 (MA10)→事件驱动撮合回测→资金收益归因\text{数据接入与清洗} \xrightarrow{\quad} \text{财务因子选股 (PE)} \xrightarrow{\quad} \text{择时信号生成 (MA10)} \xrightarrow{\quad} \text{事件驱动撮合回测} \xrightarrow{\quad} \text{资金收益归因}
  • 第三章核心实战策略目标定义:
    • 股票池(Stock Pool):
      • 估值区间:0<PE<300 < PE < 30(剔除 EPS 为负的亏损暴雷股,剔除估值泡沫股);
      • 排序与容量:按 PE 升序排列,剔除停牌与退市股,选取前 100 只低估值龙头;
      • 调仓周期:7 个交易日定期换仓(平衡交易摩擦成本与估值有效性);
    • 择时规则(Timing Execution):
      • 买入条件:候选股 K 线上穿 10 日均线(金叉入场);
      • 卖出条件:K 线下穿 10 日均线(死叉离场)或该标的在定期调仓日被移出低 PE 股票池。
  • 为什么选择 MongoDB 作为量化时序数据库?
    • 金融行情与财报数据具有字段多变、动态拓展(Schema-free)的特点;
    • 文档型数据库支持天然的 JSON 结构映射,高并发批量 Upsert 写入性能极高,非常适合存储海量日 K 线与财务报表。
┌─────────────────────────────────────────────────────────────┐
│                    量化交易系统全流程架构图                 │
└──────────────────────────────┬──────────────────────────────┘
                               │
 ┌─────────────────────────────┼─────────────────────────────┐
 ▼                             ▼                             ▼
┌──────────────────┐   ┌──────────────────┐   ┌──────────────────┐
│ 1. 数据工程层    │   │ 2. 策略选股层    │   │ 3. 回测执行层    │
├──────────────────┤   ├──────────────────┤   ├──────────────────┤
│ • Tushare 行情   │   │ • 计算动态 PE    │   │ • 10日均线择时   │
│ • 东财财报爬虫   │   │ • 0 < PE < 30    │   │ • 7日定期调仓    │
│ • 异常缺口修复   │   │ • 排序取前 100 只│   │ • 资金净值曲线   │
└──────────────────┘   └──────────────────┘   └──────────────────┘

一、量化回测系统的核心工程链路

一个完备的量化交易系统遵循以下严密的数据流水线:

① 数据采集:通过 Tushare 获取历史日 K(不复权 daily / 后复权 daily_hfq),爬取东财财务报表
② 数据治理:处理停牌数据、修复除权除息缺口、处理缺失值与异常成交量
③ 因子选股:计算个股动态 PE,按设定阈值与排序规则生成动态候选股票池
④ 信号注入:将第二章开发的择时信号(如 MA10、MACD、RSI)接入股票池标的
⑤ 交易撮合:模拟账户现金与持仓变动,计算交易佣金、印花税与滑点
⑥ 业绩评估:生成资产净值时序(Equity Curve),计算年化收益率、最大回撤与夏普比率

二、开发环境与核心组件配置

组件名称核心用途安装与配置要点
Python 3.12核心量化开发语言推荐使用虚拟环境(venv 或 uv)保持依赖隔离
MongoDB高性能文档型数据库默认端口 27017,数据目录需配置 dbpath
PyMongoPython 操作 MongoDB 官方库支持 UpdateOne 批量操作与复合索引创建
Tushare / Pandas财经数据获取与矩阵计算提供专业级金融时间序列矢量化运算支持

⚠️ 关于真实数据与运行环境:本课所有可运行示例一律使用内置合成数据,不依赖实时行情或付费接口,配置 Python 3.12 + pandas/numpy 即可复现。正文介绍的 Tushare、东方财富接口、MongoDB 是真实工程中的常见选型:Tushare 需注册账号并按其官方文档获取 token,部分接口有积分门槛,字段与限频规则可能随时间调整,请以官方文档为准;MongoDB 仅用于讲解真实系统的存储分工,不安装也能跑通全部演示。另请注意:回测只能使用当时已经公开的历史数据,数据接错时点会直接造成前视偏差(见 3.4、3.7)。

📌 合规自查(回测/策略类内容的通用前提):幸存者偏差(回测样本必须包含当时在市、日后可能退市的全部标的,只在幸存股票上计算会虚增表现);参数过拟合(周期、阈值等参数贴合某段历史不代表样本外有效,须用滚动样本外验证,见 5.4)。


📝 动手练一练

下面我们用 Python 编写一段 量化开发环境与核心依赖库健康度体检脚本,自动检测本地环境版本,并对量化数据库核心集合结构进行预热校验:

import sys
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 major_version(pkg_name):
    """取库的主版本号(如 '3.0.3' → 3)。"""
    return int(pkg_name.split(".")[0])

def check_quant_dev_environment():
    """
    量化开发环境健康度检测:只输出与本机无关的能力结论(PASS/FAIL)。

    为什么不直接打印具体版本号/操作系统?
    印刷输出必须在任何学员的电脑上复现一致:3.12.10/3.0.3/win32 这类真值
    随安装环境变化,写进讲义会让其他人照跑必然对不上。能力断言(≥3.12、
    pandas 主版本≥3、numpy 主版本≥2)才是可复现、可核对的判据。
    """
    checks = {
        "Python >= 3.12": sys.version_info[:2] >= (3, 12),
        "pandas 主版本 >= 3": major_version(pd.__version__) >= 3,
        "numpy 主版本 >= 2": major_version(np.__version__) >= 2,
        "跨平台可用 (Win/macOS/Linux)": sys.platform in ("win32", "darwin", "linux"),
    }

    # 本演示用内存字典模拟数据库集合,无需真实安装/启动 MongoDB
    mock_collections = ["daily", "daily_hfq", "finance_report", "stock_pool", "order_records"]

    print("================ 量化交易系统开发环境体检报告 ================")
    for name, ok in checks.items():
        print(f"  - {name:<28}: {'PASS' if ok else 'FAIL'}")
    print("------------------------------------------------------------")
    print("数据库引擎状态       : Connected (Local Ready,内存字典模拟)")
    print("初始化核心集合列表   : " + ", ".join(mock_collections))
    print("============================================================")
check_quant_dev_environment()

运行结果输出:

================ 量化交易系统开发环境体检报告 ================
  - Python >= 3.12              : PASS
  - pandas 主版本 >= 3             : PASS
  - numpy 主版本 >= 2              : PASS
  - 跨平台可用 (Win/macOS/Linux)     : PASS
------------------------------------------------------------
数据库引擎状态       : Connected (Local Ready,内存字典模拟)
初始化核心集合列表   : daily, daily_hfq, finance_report, stock_pool, order_records
============================================================

👉 点击查看解析

本练习核心是搭建可运行的量化回测项目骨架,重点在于理清数据获取、策略逻辑、回测引擎与绩效评估的模块边界,并确保开发环境依赖与项目结构就绪,能跑通最小示例。

本章小结

  1. 清晰系统全局架构:掌握从数据采集、因子过滤、信号判定到模拟撮合与归因的全链路闭环。
  2. 明确低估值策略逻辑:以 0<PE<300 < PE < 30 锁定低估值标的,以前 100 只分散组合风险,以 7 日调仓平衡摩擦成本。
  3. 夯实开发环境底座:确保 Python 3.12 与 MongoDB 数据集合初始化就绪,为后续模块开发铺平道路。

📋 行动清单 (Action Checklist)

  • 运行本讲环境检测脚本,核验本地 Python 与 Pandas/NumPy 运行环境正常;
  • 确认 MongoDB 数据库服务在本地已正常启动(默认监听 27017 端口);
  • 预习下一讲,学习如何通过 Tushare 批量抓取指数与个股历史行情,并深入理解不复权与后复权的区别。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第3章课件:上手搭建最简单的交易系统
    PDF · 3.8MB
    下载
  • 第3章配套代码包:行情数据获取与低PE策略回测
    ZIP · 49KB
    下载
  • 开发环境准备:软件安装指导
    PDF · 0.9MB · 建议第3章动手实践前先通读
    下载
  • 量化入门推荐书单
    PDF · 318KB
    下载