快速入门

一、综述

闪策回测系统 提供了两种主要的回测方式,帮助用户在不同场景下高效验证策略的有效性与稳健性:文件单回测策略回测。两种方式各有优势,用户可根据策略开发阶段与资源条件灵活选择。

  • 文件单回测 是通过将策略生成的订单流数据导入回测系统,由系统根据历史行情数据模拟订单的成交过程,并计算策略的回测绩效。此方式既可在本地环境中运行,也支持远程回测模式。

  • 策略回测 通过回测API接口将策略与回测系统深度联动,使策略能在回测过程中动态响应行情与成交事件。系统提供行情回放、下单接口、成交回调等核心功能,策略可完全复现实盘逻辑,实现精细化、交互式的历史回测。

总体而言,闪策回测系统为不同需求场景提供了灵活的解决方案:

  • 文件单回测 轻量、快速,适合远程验证与快速评估

  • 策略回测 灵活、精确,适合深度策略开发与仿真验证

用户可根据自身的策略复杂度、开发需求及计算环境选择最合适的回测模式,从而高效评估策略表现并持续优化交易逻辑。

二、文件单回测

互联网回测环境地址:http://202.101.23.226:19001/ 用户名和密码请联系闪策相关人员 使用详细说明书见 文件单回测章节

三、策略回测

策略回测环境支持两种部署方式:Linux 部署Windows-WSL2 部署

提示:如果在执行文档中的命令时出现 “未找到该命令” 的错误,请根据您的操作系统尝试以下解决方案:

  • Ubuntu/Debian 系统:使用 apt update && apt install <package-name> 安装缺失的包

    • 例如:apt install docker.io docker-compose-v2 wget tar

  • Windows 系统

    • 使用 winget 安装:winget install <package-name>

  • Python 包:使用 pip install <package-name> 安装 Python 依赖

  • WSL2:确认 WSL 已正确安装,可使用 wsl --list --verbose 验证

3.1 Linux 部署

3.1.1 环境要求

需要两台机器(资源紧张可使用一台Ubuntu机器)

  • 机器A: 基础设施环境,回测基础设施的运行机器,包括数据库、前端服务等的部署。操作系统不做要求,需要有docker,docker-compose

  • 机器B: 策略开发环境,策略开发/运行机器,调试运行策略。要求操作系统:Ubuntu18.04 / Ubuntu20.04

3.1.2 基础设施环境搭建

要求安装基本命令,需要当前机器有docker, docker-compose 2.0以上版本,需要当前用户有sudo权限。

3.1.2.1 组件安装

下载链接

回测系统中使用了 MongoDB(静态数据存储), MySQL(回测结果存储), Superset(回测绩效展示)组件,闪策提供了一键安装脚本,首先根据拿到的压缩包,解压缩,安装相关组件

tar -zxvf backtest_project.tar.gz
cd backtest_project/
./install.sh
./start.sh

确保所有组件安装完成并启动成功

  • 服务器上的3306端口(MySQL)、27017端口(MongoDB)、8088(Superset)端口均处于监听状态

  • 验证Superset是否正常可登录 其他机器访问http://<your-server-ip>:8088,用户名密码为 admin/admin

  • 运行完成后存在 /split_datas/SCSymbol.table 文件,之后/split_datas/目录下存放回测所需的历史行情数据文件,如果开发环境和基础设施部署了两套系统,需要确保开发环境机器可以共享访问/split_datas/目录。

  • 如果上述 start.sh 在执行过程中出现错误,后续可以执行 stop.sh 之后在执行 start.sh

3.1.2.2 数据准备

闪策回测系统试用,准备了2025.4.1-2025.4.30一个月的期货L1数据和证券L2数据,由于数据量比较大,需要从闪策sftp服务器下载,操作步骤:

进入数据目录下:

cd /split_datas/

下载一天的期货L1数据的命令(密码请联系闪策相关人员):

wget -r -nH --cut-dirs=1 --ftp-user=scclient1 --ftp-password=<password> ftp://202.101.23.226:2001/download/futures_L1_datas/2025/04/01 .

下载一天的证券L2数据命令如下:

wget -r -nH --cut-dirs=1 --ftp-user=scclient1 --ftp-password=<password> ftp://202.101.23.226:2001/download/stock_L2_datas/2025/04/01 .

注: 在 Windows PowerShell 中需使用 wget.exe

3.1.3 策略开发/运行环境搭建

包含两种语言的开发包,C++开发包 和Python开发包

环境准备(绩效指标分析所需要)

# 安装Python环境,3.8 ~ 3.13 均支持
# 安装Python依赖包
pip install DBUtils mysql-connector-python pandas pymongo PyMySQL
  1. C++开发包

    下载链接

    • 解开压缩包

    tar -zxvf backtestapi.tar.gz
    cd backtestapi/
    
    • 修改基础设施环境连接信息

    // backtest_runtime/conf/db_connection.json
    {
        "host": "127.0.0.1",      // MySQL的host地址
        "port": 3306,             // MySQL的端口信息
        "user": "sc",             // MySQL用户名
        "password": "shance123!", // MySQL密码
        "database": "scbacktest", // MySQL回测数据库
        "mongodb": {
            "uri": "mongodb://sc_reader:shance123%21@127.0.0.1:27017/" // MongoDB连接信息
        }
    }
    
    • 修改conf/initConfig.json回测配置参数,主要是要回测的品种、开始/结束时间等内容,具体参数配置说明见 initConfig 配置说明

    • 根据策略逻辑需要修改 src/Strategy.cc,目前内部是简单的策略逻辑(只交易 au2505.SHFE 合约)。

    • 编译并运行策略 ./run.sh

    • 详见 C++ API 回测

  2. Python开发包

    下载链接

    • 解开压缩包

    tar -zxvf backtestapi-python.tar.gz
    cd backtestapi-python/
    
    • 配置参数,同上述C++配置参数。

    backtest_runtime/conf/db_connection.json
    conf/initConfig.json
    
    • 根据策略逻辑需要修改 src/Strategy.py,目前内部是简单的策略逻辑(只交易 au2505.SHFE 合约)。

    • 运行Python策略 ./run.sh

    • 详见 Python API 回测

  3. 查看绩效指标

    上述 run.sh 运行结束之后,通过脚本输出的 task-id,可以在网页查看绩效指标

    • 登录 Supperset 网页 http://<your-server-ip>:8088

    SuppersetHomePage

    • 点击 dashboard 可查看当前/历史回测信息

      SuppersetHomePage

    • 点击对应的 task-id 可查看对应的回测信息

      SuppersetHomePage

      SuppersetHomePage

3.2 Windows-WSL2 部署

本节介绍在 Windows 系统中通过 WSL2 部署回测环境的方法,适用于无法使用 Linux 机器但需要在 Windows 上进行策略回测的用户。

3.2.1 前置检查

在开始部署之前,需要完成以下检查项目。

3.2.1.1 端口检查

确认 Windows 本机以下端口未被占用:

  • 3306 端口(MySQL)

  • 27017 端口(MongoDB)

  • 8088 端口(Superset)

可以通过以下命令检查端口占用情况:

netstat -ano | findstr "3306 27017 8088"

如果上述端口被占用,需要关闭对应进程或选择其他端口进行配置。

3.2.1.2 CPU 虚拟化检查

WSL2 需要在 BIOS/UEFI 中开启 CPU 虚拟化功能才能正常运行。在开始部署之前,请务必检查并确保该功能已启用。

检查虚拟化是否已开启

在 Windows 命令行或 PowerShell 中执行以下命令:

systeminfo

在输出信息中查找以下字段:

Hyper-V 要求:                    是 (= 已启用 Hyper-V)
 virtualization extensions in firmware: Yes (= 已启用虚拟化)

如果显示 “Hyper-V 要求: 否” 或 “virtualization extensions in firmware: No”,则需要按照下方步骤开启虚拟化。

开启 CPU 虚拟化

  1. 进入 BIOS/UEFI 设置

    • 重启计算机

    • 在开机画面出现时按下对应按键(通常是 DelF2F10EscF12,具体取决于主板厂商)

    • 进入 AdvancedConfiguration 选项卡

  2. 启用虚拟化技术

    • 找到 Intel Virtualization Technology (Intel CPU) 或 AMD-V / SVM Mode (AMD CPU) 选项

    • 将其设置为 Enabled

    • 保存设置并退出(通常按 F10

  3. 开启 Windows Hyper-V 功能(可选,但推荐):

    以管理员身份运行 PowerShell,执行:

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
    

    重启计算机使配置生效。

参考链接:更多关于 Windows 虚拟化设置的信息,请参考微软官方文档:https://support.microsoft.com/zh-cn/windows/c5578302-6e43-4b4b-a449-8ced115f58e1

3.2.1.3 WSL 版本检查

本系统仅支持 WSL2,不支持 WSL1。这是因为回测服务在 Linux 环境中使用 systemctl 命令管理进程,而 WSL1 不支持 systemd。

检查当前 WSL 版本

在 Windows 命令行或 PowerShell 中执行以下命令:

wsl --list --verbose

输出示例:

NAME                          STATE           VERSION
* Ubuntu-22.04-Backtest       Running         2
  • VERSION 列显示 2 表示使用的是 WSL2

  • VERSION 列显示 1 表示使用的是 WSL1

将 WSL1 转换为 WSL2

如果发现当前使用的是 WSL1,可以通过以下命令将其转换为 WSL2:

wsl --set-version Ubuntu-22-04-Backtest 2

转换过程可能需要几分钟时间,等待完成即可。

设置默认 WSL 版本

如果希望此后安装的任何新 WSL 发行版默认使用 WSL2,可以执行:

wsl --set-default-version 2

3.2.2 数据准备

  1. 在 Windows D 盘根目录下创建以下数据目录:

    D:\split_datas\futures_L1_datas
    D:\split_datas\stock_L2_datas
    
  2. 数据下载方式请参考 3.1.2.2 数据准备 节内容,将下载的数据文件放置到对应目录中。

3.2.3 WSL 系统导入

  1. 从以下地址下载 WSL 系统包:

    下载链接

  2. 在 Windows 命令行或 PowerShell 中执行以下命令导入 WSL 系统:

    wsl --import Ubuntu-22.04-Backtest D:\WSL-Ubuntu-22-04-Backtest D:\path\to\WSL-Ubuntu-22-04-Backtest.tar
    

    说明:

    • D:\WSL-Ubuntu-22-04-Backtest 为 WSL 系统导入的目标目录

    • D:\path\to\WSL-Ubuntu-22-04-Backtest.tar 为下载的 WSL 系统包路径

    • 可以使用 wsl --list --verbose 查看已导入的系统, 存在名为 Ubuntu-22.04-Backtest 的系统即导入成功

  3. 如果 Windows 中没有 wsl 命令,需要先启用 WSL 功能。请参考微软官方文档:https://learn.microsoft.com/zh-cn/windows/wsl/install

3.2.4 启动 WSL

  1. 使用以下命令启动 WSL 并进入系统:

    wsl -d Ubuntu-22.04-Backtest -u sc
    
  2. 默认用户为 sc,密码为 sc654321

  3. 回测 SDK 安装和运行路径为 /home/sc/backtest/run/,该路径下已包含 CPP 和 Python SDK:

    /home/sc/backtest/run/
    ├── backtestapi/          # C++ SDK
    └── backtestapi-python/   # Python SDK
    

3.2.5 验证部署

  1. WSL 系统启动后,回测服务(Superset)会自动运行

  2. 在 Windows 本机浏览器中打开以下地址访问 Superset:

    http://127.0.0.1:8088
    
  3. 登录账号:

    • 用户名:admin

    • 密码:admin

  4. 登录成功后即可查看回测绩效指标

  5. 如需运行回测策略,请参考 3.1.3 策略开发/运行环境搭建 节中的 C++ 或 Python 开发包使用方法

注意:由于 WSL2 与 Windows 共享网络端口,在 WSL 中运行的服务可直接通过 Windows 本机的 localhost 或 127.0.0.1 访问。

3.2.6 网络访问限制说明

WSL2 启动的服务默认只能在本机通过本地回环地址(localhost/127.0.0.1)访问,局域网内的其他机器无法直接访问。这是 WSL2 的网络架构特性决定的。

如果需要在其他机器上访问 WSL2 中运行的服务,有以下几种解决方案:

  1. 端口转发(推荐):在 Windows 侧配置端口转发,将外部请求转发到 WSL2

    # 以管理员身份运行 PowerShell
    netsh interface portproxy add v4tov4 listenport=8088 connectport=8088 connectaddress=127.0.0.1
    
  2. 修改防火墙规则:在 Windows 防火墙中添加例外,允许指定端口的入站连接

  3. 直接使用 Linux 部署:使用 3.1 节的 Linux 部署方案

3.2.7 WSL2 自动休眠问题解决

当使用 exit 命令退出 WSL2 终端且长时间未重新进入时,WSL2 虚拟机会进入休眠状态 (通过 wsl --list --verbose 可见 Stopped 标志),这会导致其中运行的服务 (如 Superset) 中断。为避免此问题,可以通过配置 WSL 的自动休眠设置来保持 WSL2 虚拟机持续运行。

3.2.7.1 配置 .wslconfig 文件

在 Windows 用户目录下创建或编辑 .wslconfig 文件(路径:C:\Users\<用户名>\.wslconfig):

[general]

# 每个 WSL 实例在空闲后保持运行
# 默认值:8000(8秒)
# - -1:永远不要自动关闭实例
# - 0:在所有进程退出后立即关闭
# - 正整数:在指定的空闲时间(毫秒)后关闭
instanceIdleTimeout=-1

[wsl2]

# 在空闲时关闭 WSL2 虚拟机的持续时间。
# 默认值:60000(60秒)
# - -1:永远不要自动关机
# - 0:在所有WSL实例退出后立即关闭
# - 正整数:在指定的空闲时间(毫秒)后关闭
vmIdleTimeout=-1

保存文件后,需要重启 WSL 使配置生效:

# 重启所有 WSL 实例
wsl --shutdown