回测配置文件说明

一、系统概述

本文主要为对接闪策回测系统的终端厂商、策略开发人员以及个人或机构投资者提供帮助指引

二、配置文件类型

  1. 客户配置文件 initConfig.json

  2. 订单列表文件 order.csv

  3. 高级配置文件

三、客户配置文件

3.1 配置文件说明

配置文件 initConfig.json 为回测系统的用户需要关心的配置,其中包含回测可设置的相关参数

样例如下:

{
    "start_time": "2025-04-30 09:00:00",
    "end_time": "2025-05-30 15:00:00",
    "mode": "direct",
    "match_rate": 100,
    "cash": 1000000000000,
    "risk_free_rate": 0.04,
    "instruments": [
        "au2505.SHFE",
        "510050.SHSE",
        "600016.SHSE"
    ],
    "fees": {
        "open_rate": 0.0001,
        "close_rate": 0.0001,
        "close_today_rate": 0.0001,
        "commission_rate": 0.003,
        "min_fee": 5,
        "stamp_rate": 0.001,
        "transfer_rate": 0.00001
    },
    "optionalMode": [
        {
            "instrument": "510050.SHSE",
            "mode": "snapshotAndTick"
        },
        {
            "instrument": "600016.SHSE",
            "mode": "direct",
            "match_rate": 90
        }
    ],
    "order_delay": 123,
    "kline": {
        "1": ["au2505.SHFE"],
        "5": ["au2505.SHFE", "510050.SHSE"],
    },
    "initial_positions": [
        {
            "instrument": "cu2505.SHFE",
            "dir": "long",
            "qty": 5,
            "open_price": 50000
        },
        {
            "instrument": "600016.SHSE",
            "dir": "long",
            "qty": 100,
            "open_price": 180
        }
    ]
}

每一项设置的含义分别为:

字段

说明

赋值格式

start_time

回测开始时间(日期)

YYYY-mm-dd HH:MM:SSYYYY-mm-dd

end_time

回测结束时间(日期)

YYYY-mm-dd HH:MM:SSYYYY-mm-dd

mode

回测默认成交模式:1. 期货快照撮合 / 股票逐笔撮合 / 概率成交

snapshotAndTick / direct

cash

初始资金

<number>

risk_free_rate

无风险率

<number>

instruments

需要订阅行情的合约列表

<str_array>

fees

费率

{ key: <number> }

期货费率

open_rate:开仓手续费

{ key: <number> }

close_rate:平仓手续费

{ key: <number> }

close_today_rate:平今手续费

{ key: <number> }

股票费率

commission_rate:佣金率

{ key: <number> }

min_fee:佣金最小费用

{ key: <number> }

stamp_rate:印花税

{ key: <number> }

transfer_rate:过户费

{ key: <number> }

optionalMode

对指定合约单独设置成交式

{ key: value }

initial_positions

初始持仓

[{ key: value }]

order_delay

订单延时。单位:微秒

<number>

kline

K线配置,按周期订阅多个合约的K线数据,period单位:分钟,类型:整数

{ period: <str_array> }

3.2 回测开始 / 结束时间

回测的开始结束时间支持指定精确到时分秒或仅指定年月日,当仅指定年月日时,默认以交易日的开始和结束处理。

3.3 回测默认成交模式

回测成交模式支持两个字段:

  1. snapshotAndTick:指定期货以快照行情进行撮合,指定股票以逐笔行情进行撮合

  2. direct:指定以概率成交

    1. 当指定概率成交时,需要额外填写配置 match_rate

3.4 需要订阅行情的合约列表

在该数组中声明的合约,回测将会订阅其相关的行情。支持主力合约和次主力合约的回测。闪策主力合约为上一个交易日交易量最大的合约。

  • 郑商所主力合约的格式为:品种999.EXCH,次主力合约的格式为:品种998.EXCH。比如AP999.CZCEAP998.CZCE

  • 其他交易所主力合约的格式为:品种9999.EXCH,次主力合约的格式为:品种9998.EXCH。比如 cu9999.SHFEcu9998.SHFE

3.5 对指定合约单独设置成交模式

通过对指定合约 instrument 设置成交模式 mode,回测将会对合约进行单独处理

3.6 初始持仓

回测撮合中不关心仓位/资金是否足够,只根据下单和当时行情情况决定能否成交,最后由绩效分析模块出绩效。这里的初始持仓主要是方便绩效分析模块能正确进行分析。可指定多个合约的持仓。

字段

说明

instrument

合约代码.交易所,如:cu2409.SHFE, 600000.SHSE。这里的合约必须是实际合约,不能是主力合约

dir

longshort,持仓方向,分别指多头和空头。股票只有多头

qty

持仓量,整数

open_price

开仓价格

3.7 订单延时

表示订单从发出到进入撮合引擎的延时,单位为微秒,支持非负整数

3.7 K线配置

3.7.1 配置格式说明

kline 配置用于指定订阅不同周期的K线数据。配置示例如下:

"kline": {
    "1": ["au2505.SHFE"],
    "5": ["au2505.SHFE", "510050.SHSE"],
}
  • key(周期): K线周期,以分钟为单位的整数

    • "1" 表示 1 分钟K线

    • "5" 表示 5 分钟K线

  • value(合约列表): 该周期要订阅的合约列表,每个元素为合约代码

    • 示例:"au2505.SHFE""510050.SHSE"

3.7.2 使用说明

  1. 多周期订阅: 可以同时为一个合约订阅多个周期的K线

    "kline": {
        "1": ["au2505.SHFE"],
        "5": ["au2505.SHFE"],
    }
    
  2. 多合约订阅: 可以为多个合约订阅同一周期的K线

    "kline": {
        "5": ["au2505.SHFE", "cu2509.SHFE", "510050.SHSE"]
    }
    
  3. 可选配置: kline 字段为可选配置,如果不需要K线数据可以省略该字段

3.7.3 注意事项

  • 周期单位:配置中的周期值均以分钟为单位,类型为整数,系统内部会转换为秒

  • 合约验证:K线配置中的合约必须存在于 instruments 配置中,否则K线数据将被忽略

  • 行情订阅:除了在配置文件中配置要订阅的 K 线行情种类,注意还需要在代码中使用 SubscribeEvent(MSG_DATA_KLINE) 订阅 K 线行情数据

四、订单列表文件

4.1 配置文件说明

配置文件 order.csv 为文件单列表(只有文件单回测需要该文件,策略回测并不需要),回测将会按时间戳依次执行 order.csv 中的所有订单,样例如下(无需表头):

2024-05-06 09:50:56, 510050.SHSE, buy, 10, 0, day, open
09:52:56, 600000.SHSE, buy, 10, 0, day, open
09:55:56, 600016.SHSE, buy, 10, 0, day, open

每一列的含义分别为:

字段

说明

赋值格式

日期时间

发单时间

YYYY-mm-dd HH:MM:SSHH:MM:SS

合约代码

唯一合约的标识代码。是 合约代码交易所 的组合

<合约代码.交易所>

买卖方向

该笔订单的买卖方向

buy / sell

下单数量

该笔订单的下单数量

<number>

价格(元)

该笔订单的下单价格

<number>

TIF

当前仅支持 day

day / ioc / none

开平方向

该笔订单的开平方向

open / close

4.2 发单时间

指定的发单时间支持两种模式:

  1. 年-月-日 时:分:秒:表示在该指定时间发送订单

  2. 时:分:秒:表示在回测的每一天的该时间发送订单

4.3 价格

当价格为0时,表示以市价单下单

4.4 开平方向

需要注意的是,开平方向只在回测期货合约时生效

五、高级配置文件

5.1 配置文件说明

通过开发包中包含的 generateBacktestConfig.py 会将上述 initConfig.json 配置文件生成最终回测使用的配置文件,用户后期有个性化需求可以修改这个文件

完整配置文件示例如下:

{
    "reference_data": {
        "symbol_file_path": "./SCSymbol.table",
        "db": {
            "uri": "mongodb://192.168.0.19:27017/",
            "dbName": "historic_static_data",
            "tradingCalendar": "trading_calendar",
            "tradingSession": "instrument",
            "productInfo": "product"
            "mainContract": "main_contracts_future"
        }
    },
    "start_time": "2025-04-14 09:00:00",
    "end_time": "2025-04-14 15:00:00",
    "instruments": [
        "au2505.SHFE"
    ],
    "marketdata": {
        "data_source": "sc",
        "sc": {
            "skip_missing_file": true,
            "log_missing_file": true,
            "data_path": "/split_datas/futures_L1_datas/{year}/{month}/{day}/{symid}/{symbol}_L1.gz",
            "filter_instrument": true
        }
    },
    "orderexec": {
        "type": "snapshot_match",
        "delay": 2,
        "direct": {
            "execution_probability": 80
        },
        "tick_match": {},
        "snapshot_match": {}
    },
    "orders": [
    ],
    "report": {
        "order_file": "./orderfile.txt",
        "fill_file": "./fillfile.txt"
    },
    "kline": {
        "1": ["au2505.SHFE"],
        "5": ["au2505.SHFE", "cu2509.SHFE"],
    }
}

5.1.1 静态数据 reference_data

"reference_data": {
    "symbol_file_path": "./SCSymbol.table",
    "db": {
        "uri": "mongodb://192.168.0.19:27017/",
        "dbName": "historic_static_data",
        "tradingCalendar": "trading_calendar",
        "tradingSession": "instrument",
        "productInfo": "product"
        "mainContract": "main_contracts_future"
    }
},
  • reference_data.symbol_file_path 用于指定闪策合约编码表

    • 注意 回测依赖该文件,进行交易所合约格式与闪策内部合约格式的转换,每当有新品种上市时,闪策会更新该文件内容

  • reference_data.db 用于指定闪策静态数据库访问配置

5.1.2 回测时间 start_time / end_time

"start_time": "2025-04-14 09:00:00",
"end_time": "2025-04-14 15:00:00",
  • start_time 用于指定回测的开始时间

  • end_time 用于指定回测的结束时间

5.1.2 回测合约 instruments

"instruments": [
    "au2505.SHFE"
],
  • instruments 指定一个列表,其中包含所有要回测的合约。支持主力合约和次主力合约的回测。如:cu9999.SHFE、cu9998.SHFE

    • 注意 在读取行情时,回测会根据该列表的内容,判断应该读取哪些合约的行情内容,所有预计要进行回测的合约,都应填入该列表中

5.1.3 行情源 marketdata

"marketdata": {
    "data_source": "sc",
    "sc": {
        "skip_missing_file": true,
        "log_missing_file": true,
        "data_path": "/split_datas/futures_L1_datas/{year}/{month}/{day}/{symid}/{symbol}_L1.gz",
        "filter_instrument": true
    }
},

该配置项用于指定读取历史行情数据时所需的信息,一般指定历史数据存储的路径等信息

  • marketdata.data_source 用于指定行情源格式,sc 表示闪策原生格式

  • marketdata.sc.skip_missing_filetrue 时,将跳过缺失的行情文件;这里的 sc 即是 data_source 指定的内容

  • marketdata.sc.log_missing_filetrue 时,当遇到行情文件缺失时打印日志

  • marketdata.sc.data_path 用于指定行情源文件格式。{year} / {month} 等内容会由回测内部将实际日期进行替换,用户无需手动指定

  • marketdata.sc.filter_instrument 是否按合约过滤(true 表示启用过滤)

marketdata 还支持为单个合约提供独立配置,示例如下:

"marketdata_instr_map": {
    "marketdata_stock": [
        "600016.SHSE"
    ],
    "marketdata_futures": [
        "au2505.SHFE"
    ]
},
"marketdata_futures": {
    "data_source": "sc",
    "sc": {
        "skip_missing_file": true,
        "log_missing_file": true,
        "data_path": "/split_datas/futures_L1_datas/{year}/{month}/{day}/{symid}/{symbol}_L1.gz",
        "filter_instrument": true
    }
},
"marketdata_stock": {
    "data_source": "sc",
    "sc": {
        "skip_missing_file": true,
        "log_missing_file": true,
        "data_path": "/split_datas/stock_L2_datas/{year}/{month}/{day}/{symid}/{symbol}_L2.gz",
        "filter_instrument": true
    }
},

在上面的示例中,marketdata_instr_map 使用键名 marketdata_stockmarketdata_futures 来指向一组合约列表(此处分别为 ["600016.SHSE"]["au2505.SHFE"])。回测会查找名为 marketdata_stockmarketdata_futures 的配置节,并将该节中的配置应用到对应列表里列出的所有合约上。也就是说,被列出的合约将使用其中定义的读取策略和路径模板来加载行情数据,在如上示例中,回测将会从 split_datas/stock_L2_datas 路径中读取 600016.SHSE 的行情,从 split_datas/futures_L1_datas 路径中读取 au2505.SHFE 的行情

5.1.4 成交模式 orderexec

"orderexec": {
    "type": "snapshot_match",
    "delay": 2, // us
    "direct": {
        "execution_probability": 80
    },
    "tick_match": {},
    "snapshot_match": {}
},
  • orderexec.type 用于指定成交模式的类型,该类型支持几种格式。回测会根据此处的内容读取后续指定配置

    • none 不进行撮合

    • direct 成交概率撮合

    • tick_match 逐笔撮合(仅股票)

    • snapshot_match 快照撮合

  • orderexec.delay 用于指定发单延迟,单位为微秒。当该值不为 0 时,回测会将订单到达撮合模块的时间延后指定时间

  • orderexec.direct.execution_probabilityorderexec.typedirect 时,回测会根据此处的配置决定订单的成交概率。此处设置的数值表示百分比,例如 80 即表示 80% 的成交概率

orderexec 同样支持为单个合约提供独立配置,示例如下:

"exec_instr_map": {
    "orderexec_direct_90": [
        "600016.SHSE"
    ],
    "orderexec_snapshot_match": [
        "au2505.SHFE"
    ]
},
"orderexec_direct_90": {
    "type": "direct",
    "direct": {
        "execution_probability": 90
    }
},
"orderexec_snapshot_match": {
    "type": "snapshot_match",
    "snapshot_match": {}
},

在上面的示例中,exec_instr_map 使用键名 orderexec_direct_90orderexec_snapshot_match 来指向一组合约列表(此处分别为 ["600016.SHSE"]["au2505.SHFE"])。回测会查找名为 orderexec_direct_90orderexec_snapshot_match 的配置节,并将该节中的配置分别应用到各自列表里列出的所有合约上。 也就是说,在如上示例中,回测将会以 90% 的成交概率对 600016.SHSE 进行撮合,而以快照行情对 au2505.SHFE 进行撮合

5.1.5 成交报告 report

"report": {
    "order_file": "./orderfile.txt",
    "fill_file": "./fillfile.txt"
}
  • report.order_file 当该值不为空时,回测会将接收到的有效订单输出到该文件中

  • report.fill_file 当该值不为空时,回测会将成交明细输出到该文件中

5.1.6 文件单 orders

"orders": [
    {
        "SendTime": "2024-04-14 09:50:00",
        "Instrument": "au2505.SHFE",
        "Side": 1,
        "OrderQty": 1,
        "Price": 0.0,
        "TimeInForce": 3,
        "OpenClose": 1
    },
],
  • orders 指定一个列表,其内包含所有在策略之外的文件订单,回测会读取这部分内容并在指定时间点发送订单。 在如上示例中,回测将会在 2024-04-14 09:50:00 时间发送 1au2505.SHFE 合约的 BUY 订单,价格为 市价,开平方向为 平仓

5.1.7 K线配置 kline

"kline": {
    "1": ["au2505.SHFE"],
    "5": ["au2505.SHFE", "cu2509.SHFE"],
},
  • kline 用于指定订阅不同周期的K线数据

    • key(周期):K线周期,以分钟为单位(例如:"1" 表示1分钟,"5" 表示5分钟)

    • value(合约列表):该周期要订阅的合约列表,每个元素为合约代码

关于K线配置的更多详情,包括配置格式、使用说明和注意事项,请参见 客户配置文件的K线配置部分