期货#

回测平台支持的期货资产行情数据类型包括:快照,分钟频率,日频。

引擎配置说明#

key

说明

备注

"start_date"

开始日期

必须配置,DATE 类型,例如 “2020.01.01”

"end_date"

结束日期

必须配置,DATE 类型,例如 “2020.01.01”

"asset_type"

策略类型

必须配置,“futures”

"cash"

初始资金

必须配置,DOUBLE 类型

"data_type"

行情类型

必须配置,INT 类型,可选值为:

  • 1:快照
  • 3:分钟频
  • 4:日频

"frequency"

快照数据以指定频率合成 bar

INT 类型,默认 = 0。仅当 data_type = 1 时适用。

  • frequency = 0时,该参数被忽略。
  • data_type = 1frequency > 0时,引擎内部以指定频率计算柱,并触发on_bar回调。

"msg_as_table"

行情的数据格式

BOOL 类型,默认为 false.

  • false: 字典
  • true: 表.

"matching_mode"

订单撮合模式

INT 类型,根据行情类型模式不同,可选值为:
1:

  • 每日数据:收盘匹配
  • 分钟级数据:订单将与时间晚于下单时间的行情数据进行匹配
2:
  • 每日数据:开盘时匹配。
  • 分钟级数据:数据时间=下单时间时匹配,使用收盘价
3:
以订单价格匹配订单。
**注:**何时data_type = 1,值1和2无效;订单默认由模拟撮合引擎进行撮合。单

"bench_mark"

基准标的

STRING 或 SYMBOL 类型,例如 “A2305”

"latency"

订单延时

INT 类型,单位为毫秒,用来模拟用户订单从发出到被处理的时延。默认为 0,表示无延迟

"maintenance_margin"

维保比例

DOUBLE 类型,默认 1.0,取值 0~1.0 之间

"enable_algo_order"

是否开启算法订单

BOOL 类型:

  • true:开启
  • false:不开启

"futures_type"

期货品种类型,如股指期货,商品期货等

STRING 或 SYMBOL 类型,目前只支持期货

"enable_indicator_optimize"

是否开启指标优化

BOOL 类型,默认为 false。

  • true:启用;
  • false(默认):禁用。

"is_backtest_mode"

是否为回测模式

BOOL 类型,默认为 true。

  • true:回测模式
  • false:模拟交易模式

"data_retention_window"

开始指标优化时数据保留的窗口

STRING 类型或 INT 类型。当 enable_indicator_optimize = true 时生效。
is_backtest_mode = true 时,默认 “None”,可设置为:

  • “ALL”:全部数据保留
  • “20d”:按交易日保留数据,如 “20d” 代表 20 个交易日
  • “None”:不保留数据
  • 20:按条数保留数据,每个 symbol 保留最新 20 条
is_backtest_mode = false 时,无需设置

"add_time_column_in_indicator"

指标订阅时是否给指标数表增加时间列

BOOL 类型,默认 false。

  • true:增加
  • false:不增加

"context"

策略逻辑上下文类结构

由全局策略变量组成的字典,例如:

context = {}
context["buySignalRSI"] = 30.0
config["context"] = context

"callback_for_snapshot"

快照行情触发回调模式

data_type = 1 仅有。INT 类型,可选值为:

  • 0:只触发 on_snapshot
  • 1:既触发 on_snapshot 又触发 onBar
  • 2:只触发 onBar
默认为 0,当 frequency > 0 时,必须触发 onBar 回调函数,即 callback_for_snapshot = 1 或 2

"order_book_matching_ratio"

与行情订单薄的成交百分比

data_type = 1 仅有。DOUBLE 类型,默认 1.0,取值 0~1.0 之间

"matching_ratio"

区间撮合比例

data_type = 1 仅有。DOUBLE 类型,默认 1.0,取值 0~1.0 之间,默认等于 order_book_matching_ratio

注:

不同的期货行情类型(data_type)的引擎配置参数有所差异:

快照行情触发回调模式 “callback_for_snapshot” 、与行情订单薄的成交百分比 “order_book_matching_ratio” 以及区间撮合比例 “matching_ratio” 只有在快照的行情类型中可以设置,即 data_type = 1。

基本信息表说明#

字段

类型

名称

symbol

SYMBOL 或 STRING

期货合约代码

multiplier

DOUBLE

合约乘数

marginRatio

DOUBLE

保证金比率

tradeUnit

DOUBLE

合约单位

priceUnit

DOUBLE

报价单位

priceTick

DOUBLE

价格最小变动单位

commission

DOUBLE

费用

deliveryCommissionMode

INT

计费方式:

  • 1:费用 * 手数
  • 2:费用 * 金额

快照#

行情数据结构说明#

通过 append_data 写入的行情表结构如下:

message_table = sf.table(
    types={
        "symbol": "STRING",
        "symbolSource": "STRING",
        "timestamp": "TIMESTAMP",
        "tradingDay": "DATE",
        "lastPrice": "DOUBLE",
        "upLimitPrice": "DOUBLE",
        "downLimitPrice": "DOUBLE",
        "totalBidQty": "LONG",
        "totalOfferQty": "LONG",
        "bidPrice": "DOUBLE[]",
        "bidQty": "LONG[]",
        "offerPrice": "DOUBLE[]",
        "offerQty": "LONG[]",
        "highPrice": "DOUBLE",
        "lowPrice": "DOUBLE",
        "prevClosePrice": "DOUBLE",
        "settlementPrice": "DOUBLE",
        "prevSettlementPrice": "DOUBLE"
    },
    size=0,
    capacity=10000000
)

注:

  • 上述为快照行情(callback_for_snapshot = 0),即非快照合成 bar 行情的输入表结构。

  • 字段名须严格与下表一致,字段顺序除首列必须为 symbol 列外,无其它要求,此外还支持 INT,DOUBLE,STRING 类型的列,或名为 signal 的 DOUBLE ARRAY VECTOR 类 型的列作为扩展字段。

快照行情数据表必需字段如下所示:#

字段

类型

备注

symbol

SYMBOL

期货代码

symbolSource

STRING

交易所

timestamp

TIMESTAMP

时间戳

tradingDay

DATE

交易日/结算日期

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

totalBidQty

LONG

区间成交买数量

totalOfferQty

LONG

区间成交卖数量

bidPrice

DOUBLE[]

委托买价

bidQty

LONG[]

委托买量

offerPrice

DOUBLE[]

委托卖价

offerQty

LONG[]

委托卖量

highPrice

DOUBLE

最高价

lowPrice

DOUBLE

最低价

signal

DOUBLE[]

其他字段列表

prevClosePrice

DOUBLE

前收盘价

settlementPrice

DOUBLE

结算价

prevSettlementPrice

DOUBLE

前结算价

快照行情(frequency > 0,callback_for_snapshot = 1 或者 2)表结构:

message_table = sf.table(
    types={
        "symbol": "STRING",
        "symbolSource": "STRING",
        "timestamp": "TIMESTAMP",
        "tradingDay": "DATE",
        "lastPrice": "DOUBLE",
        "upLimitPrice": "DOUBLE",
        "downLimitPrice": "DOUBLE",
        "totalBidQty": "LONG",
        "totalOfferQty": "LONG",
        "bidPrice": "DOUBLE[]",
        "bidQty": "LONG[]",
        "offerPrice": "DOUBLE[]",
        "offerQty": "LONG[]",
        "highPrice": "DOUBLE",
        "lowPrice": "DOUBLE",
        "signal": "DOUBLE",
        "prevClosePrice": "DOUBLE",
        "settlementPrice": "DOUBLE",
        "prevSettlementPrice": "DOUBLE",
        "open": "DOUBLE",
        "close": "DOUBLE",
        "low": "DOUBLE",
        "high": "DOUBLE",
        "volume": "LONG"
    },
    size=0,
    capacity=10000000
)

注:

  • 快照合成 bar 行情时(callback_for_snapshot = 1 或者 2),还需要增加五个字段:"open", "close","low","high","volume"。

  • 字段名须严格与下表一致,字段顺序除首列必须为 symbol 列外,无其它要求,此外还支持 INT,DOUBLE,STRING 类型的列,或名为 signal 的 DOUBLE ARRAY VECTOR 类 型的列作为扩展字段。

快照行情数据表(使用快照合成 bar 行情)必需字段如下所示:

字段

类型

备注

symbol

SYMBOL

期货代码

symbolSource

STRING

交易所

timestamp

TIMESTAMP

时间戳

tradingDay

DATE

交易日/结算日期

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

totalBidQty

LONG

区间成交买数量

totalOfferQty

LONG

区间成交卖数量

bidPrice

DOUBLE[]

委托买价

bidQty

LONG[]

委托买量

offerPrice

DOUBLE[]

委托卖价

offerQty

LONG[]

委托卖量

highPrice

DOUBLE

最高价

lowPrice

DOUBLE

最低价

signal

DOUBLE[]

其他字段列表

prevClosePrice

DOUBLE

前收盘价

settlementPrice

DOUBLE

结算价

prevSettlementPrice

DOUBLE

前结算价

open

DOUBLE

合成 bar 行情的开盘价

close

DOUBLE

合成 bar 行情的收盘价

low

DOUBLE

合成 bar 行情的最低价

high

DOUBLE

合成 bar 行情的最高价

volume

LONG

合成 bar 行情的成交量

回测行情回放结束时,发送一条 symbol 为 “END” 的消息:

message_table = sf.sql(
    "SELECT TOP 1 * FROM messageTable",
    vars={
        'messageTable': message_table
    }
)

sf.sql(
    "UPDATE messageTable SET symbol = `END",
    vars={'messageTable': message_table}
)

backtester.append_data(message_table)

策略回调函数说明#

快照行情回调函数 on_snapshot: 输入参数 msg

msg 为字典时,是 symbol 为 key 值的 snapShot 数据字典,每个 snapShot 对象包含字段如下:

字段

类型

备注

symbol

SYMBOL

期货代码

symbolSource

STRING

交易所

timestamp

TIMESTAMP

时间戳

tradingDay

DATE

交易日/结算日期

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

totalBidQty

LONG

区间成交买数量

totalOfferQty

LONG

区间成交卖数量

bidPrice

DOUBLE[]

委托买价

bidQty

LONG[]

委托买量

offerPrice

DOUBLE[]

委托卖价

offerQty

LONG[]

委托卖量

highPrice

DOUBLE

最高价

lowPrice

DOUBLE

最低价

signal

DOUBLE[]

其他字段列表

prevClosePrice

DOUBLE

前收盘价

settlementPrice

DOUBLE

结算价

prevSettlementPrice

DOUBLE

前结算价

open

DOUBLE

合成 bar 行情的开盘价
(data_type = 1 或 callback_for_snapshot = 1 或 2 时才有)

close

DOUBLE

合成 bar 行情的收盘价
(data_type = 1 或 callback_for_snapshot = 1 或 2 时才有)

low

DOUBLE

合成 bar 行情的最低价
(data_type = 1 或 callback_for_snapshot = 1 或 2 时才有)

high

DOUBLE

合成 bar 行情的最高价
(data_type = 1 或 callback_for_snapshot = 1 或 2 时才有)

volume

LONG

合成 bar 行情的成交量
(data_type = 1 或 callback_for_snapshot = 1 或 2 时才有)

注:

  • 快照合成 bar 行情时(frequency > 0 且 callback_for_snapshot = 1 或者 2), 输入参数 msg 还需要增加五个字段:"open", "close","low","high","volume"。

  • 当 callback_for_snapshot = 1 时,还需回调 on_bar 函数,输入参数 msg 的数据结构如下。

k 线行情回调函数 on_bar:输入参数 msg

msg 是字典时,是 以 symbol 为 key 值的分钟频率的 K 线数据字典,每个 K 线包含字段如下:

字段

类型

备注

symbol

SYMBOL

期货代码

symbolSource

STRING

交易所

timestamp

TIMESTAMP

时间戳

tradingDay

DATE

交易日/结算日期

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

totalBidQty

LONG

区间成交买数量

totalOfferQty

LONG

区间成交卖数量

bidPrice

DOUBLE[]

委托买价

bidQty

LONG[]

委托买量

offerPrice

DOUBLE[]

委托卖价

offerQty

LONG[]

委托卖量

highPrice

DOUBLE

最高价

lowPrice

DOUBLE

最低价

signal

DOUBLE[]

其他字段列表

prevClosePrice

DOUBLE

前收盘价

settlementPrice

DOUBLE

结算价

prevSettlementPrice

DOUBLE

前结算价

分钟频或日频#

行情数据结构说明#

通过 append_data 写入的行情表结构如下:

message_table = sf.table(
    types={
        "symbol": "SYMBOL",
        "symbolSource": "SYMBOL",
        "tradeTime": "TIMESTAMP",
        "tradingDay": "DATE",
        "open": "DOUBLE",
        "low": "DOUBLE",
        "high": "DOUBLE",
        "close": "DOUBLE",
        "volume": "LONG",
        "amount": "DOUBLE",
        "upLimitPrice": "DOUBLE",
        "downLimitPrice": "DOUBLE",
        "prevClosePrice": "DOUBLE",
        "settlementPrice": "DOUBLE",
        "prevSettlementPrice": "DOUBLE"
    },
    size=0,
    capacity=10000000
)

注释:

  • 列名称必须与列出的完全匹配。

  • 列的顺序是灵活的,除了第一列必须是 symbol。

  • 支持 INT、DOUBLE 或 STRING 类型的附加列,以及 DOUBLE ARRAY VECTOR 类型的名为 “signal” 的扩展字段。

分钟频行情数据表必需字段#

字段

类型

备注

symbol

SYMBOL

期货代码

symbolSource

STRING

交易所

tradeTime

TIMESTAMP

时间戳

tradingDay

DATE

交易日/结算日期

open

DOUBLE

开盘价

low

DOUBLE

最低价

high

DOUBLE

最高价

close

DOUBLE

收盘价

volume

LONG

成交量

amount

DOUBLE

成交金额

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

signal

DOUBLE[]

其他字段列表

prevClosePrice

DOUBLE

前收盘价

settlementPrice

DOUBLE

结算价

prevSettlementPrice

DOUBLE

前结算价

回测行情回放结束时,发送一条 symbol 为 “END” 的消息:

message_table = sf.sql(
    "SELECT TOP 1 * FROM messageTable,
    vars={
        'messageTable': message_table
    }
)

sf.sql(
    "UPDATE messageTable SET symbol = `END",
    vars={'messageTable': message_table}
)

backtester.append_data(message_table)

策略回调函数说明#

k 线行情回调函数 on_bar:输入参数 msg

msg 是字典时,是 以 symbol 为 key 值的分钟频率的 K 线数据字典,每个 K 线包含字段如下:

字段

类型

备注

symbol

SYMBOL

期货代码

symbolSource

STRING

交易所

timestamp

TIMESTAMP

时间戳

tradingDay

DATE

交易日/结算日期

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

totalBidQty

LONG

区间成交买数量

totalOfferQty

LONG

区间成交卖数量

bidPrice

DOUBLE[]

委托买价

bidQty

LONG[]

委托买量

offerPrice

DOUBLE[]

委托卖价

offerQty

LONG[]

委托卖量

highPrice

DOUBLE

最高价

lowPrice

DOUBLE

最低价

signal

DOUBLE[]

其他字段列表

prevClosePrice

DOUBLE

前收盘价

settlementPrice

DOUBLE

结算价

prevSettlementPrice

DOUBLE

前结算价