股票#

回测平台支持的股票资产行情数据类型包括:逐笔或逐笔+快照,快照,快照+逐笔成交明细,分钟频率,日频,逐笔(宽表),逐笔+快照(宽表)等。

引擎配置说明#

key

说明

备注

"start_date"

开始日期

DATE 类型,必填(例如 “2020.01.01”)

"end_date"

结束日期

DATE 类型,必填(例如 “2020.01.01”)

"asset_type"

策略类型

必须是 "stock"

"cash"

初始资金

DOUBLE 类型,必填

"commission"

手续费

DOUBLE 类型,默认 0.0

"tax"

印花税

DOUBLE 类型,默认 0.0

"data_type"

行情类型

INT 类型,必填,可选值:

  • 0: tick (orders + trades) + snapshot
  • 1: snapshot
  • 2: snapshot + trades
  • 3: 分钟数据
  • 4: 日频数据
  • 5: tick (orders 和 trades 合并为宽表)
  • 6: tick + snapshot (orders、trades 和 snapshot 合并为宽表)

"frequency"

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

INT 类型,默认 0。

  • 当 data_type=0 或 5 时,frequency > 0 必填,tick 数据按指定频率合并为 snapshot 并触发 on_snapshot
  • 当 data_type=0,1 或 2 时,frequency > 0 时,snapshot 数据按指定频率合并为 bar 并触发 on_bar

"msg_as_table"

行情数据格式

BOOL 类型,默认 false。

  • false: 字典
  • true: 表(仅支持通过 createBacktestEngine 创建引擎时使用)

"matching_mode"

订单撮合模式

INT 类型,可选:
1:

  • 日频:以收盘价撮合
  • 分钟频:订单时间早于行情时间时撮合
2:
  • 日频:以开盘价撮合
  • 分钟频:行情时间等于订单时间时,以收盘价撮合
3:
按委托价格撮合
注意:
  • data_type=3 或 4 时,默认使用模式 1
  • 高频数据(非 3 或 4)时,设置为 1 或 2 均使用模拟撮合引擎,按价格优先和时间优先撮合

"bench_mark"

基准标的

STRING 或 SYMBOL 类型,必须以 .XSHG(上交所)或 .XSHE(深交所)结尾,例如 "000300.XSHG"

"latency"

订单延时(毫秒)

INT 类型,从下单到执行的延时

"stock_dividend"

分红及除权信息表

TABLE 类型

"enable_algo_order"

是否启用算法订单

  • true: 启用
  • false: 禁用

"enable_indicator_optimize"

是否启用指标优化

  • true: 启用
  • false: 禁用

"is_backtest_mode"

是否回测模式

  • true(默认):回测模式
  • false:撮合模式

"data_retention_window"

指标优化数据保留策略

STRING/INT 类型,仅当 enable_indicator_optimize = true 且 is_backtest_mode = true 生效:

  • "ALL"(默认):保留全部数据
  • "None":不保留数据
  • 按交易日保留,例如 "20d" 表示保留最近 20 个交易日的数据
  • 按条数保留,例如 "20" 表示每个标的保留最新 20 条数据

"add_time_column_in_indicator"

是否在指标表中增加时间列

  • true: 增加时间列
  • false: 不增加

"context"

策略逻辑上下文结构

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

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

"callback_for_snapshot"

快照回调模式

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

  • 0: 仅触发 on_snapshot
  • 1: 触发 on_snapshoton_bar
  • 2: 仅触发 on_bar。当 frequency > 0 时,必须触发 on_bar (callback_for_snapshot = 1 2)。

"enable_subscription_to_tick_quotes"

是否订阅逐笔行情

适用于 data_type=0,5,6。

  • true: 订阅
  • false(默认): 不订阅
当 data_type=0 或 5 时,用于 on_tick 回调。

"output_queue_position"

输出订单在盘口中的排队信息

适用于 data_type=0,5,6 且 enable_subscription_to_tick_quotes=true。
INT 类型:

  • 0: 禁用
  • 1: 包含最新 tick 的盘口位置
  • 2: 不包含最新 tick(撮合前位置)

触发时会在交易明细和未成交接口中增加以下指标:
  • 盘口价格优于该订单的委托总量
  • 盘口价格劣于该订单的委托总量
  • 盘口价格等于该订单的委托总量
  • 盘口价格等于该订单且先于用户委托的总量
  • 价格优于该订单的档位数量

"prev_close_price"

前收盘价表

TABLE 类型,字段为 [symbol, tradeDate, prevClose]。仅深市创业板适用,适用于 data_type=0,5,6。

"orderbook_matching_ratio"

成交比例

DOUBLE 类型,0–1.0,默认 1.0,适用于 data_type=0,1,2,5,6。

"matching_ratio"

区间撮合比例

DOUBLE 类型,0–1.0,默认 1.0,适用于 data_type=0,1,2,5,6。

"set_last_day_position"

设置底仓

TABLE 类型

参数set_last_day_position 用于配置基本位置。 详细字段定义如下所示:

字段

类型

备注

symbol

SYMBOL

标的代码

longPosition

LONG

买入持仓量

costPrice

DOUBLE

持仓均价

closePrice

DOUBLE

昨日收盘价

注:

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

  • 快照行情触发回调模式 “callback_for_snapshot” 参数只有在快照行情时设置;

  • 是否订阅逐笔行情 “enable_subscription_to_tick_quotes” 、是否需要获取订单在行情中的位置 “output_queue_position” 以及前收盘价数据表 “prev_close_price” 只有在含逐笔的行情类型中可以设置,即 data_type = 0 、5、6;

  • 与行情订单薄的成交百分比 “orderbook_matching_ratio” 以及区间撮合比例 “matching_ratio” 只有在含快照的行情类型中可以设置,即 data_type = 0 、1、2、 5、6。

分红除权基本信息表说明#

股票分红除权基本信息表字段说明如下:

字段

名称

symbol

股票代码

endDate

分红年度

annDate

预案公告日

recordDate

股权登记日

exDate

除权除息日

payDate

派息日

divListDate

红股上市日

bonusRatio

每股送股比例

capitalConversion

每股转增比例

afterTaxCashDiv

每股分红(税后)

allotPrice

配股价格

allotRatio

每股配股比例

融资融券#

引擎配置说明#

除上述所需的基本参数配置,用户可以根据下表添加两融行情所需的参数配置,其中策略类型需要更改为 “securityCreditAccount”,行情类型仅支持快照、分钟频以及日频。此外,融资融券策略的行情数据以及行情回调函数说明与股票的保持一致,融资融券策略支持分红除权的设置,具体的结构请参考股票中分红除权表的说明。

Key

说明

备注

"asset_type"

策略类型

必须是 "securityCreditAccount"

"data_type"

行情类型

INT 类型,必填,可选值:

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

"lineOfCredit"

授信额度

DOUBLE 类型,必填

"margin_trading_interest_rate"

融资利率

DOUBLE 类型,必填,例如 0.15

"secu_lending_interest_rate"

融券利率

DOUBLE 类型,必填,例如 0.15

"maintenance_margin"

维持担保比例

必填,DOUBLE 数组,例如 [1.45, 1.3, 1.2],依次为警戒线、追保线、最低线

"long_concentration"

净多头集中度

DOUBLE 数组,例如 [1.0, 0.85, 0.6],控制各保证金线的买入集中度,最后一个元素为最高线,第一个元素为底线

"short_concentration"

净空头集中度

DOUBLE 数组,例如 [1.0, 0.85, 0.6],集中度越小,说明组合风险越低

"output_order_info"

是否在订单明细表中输出风控日志

  • true: 输出
  • false: 不输出

"repay_without_margin_buy"

是否允许融资买入的券抵消融券卖出的券

  • true: 允许抵消
  • false: 不允许抵消

"set_last_day_position"

设置底仓

TABLE 类型,,对于每一支选池内的股票进行底仓设置

参数 set_last_day_position 用于设置底仓。 详细字段定义如下所示:

字段

类型

备注

symbol

SYMBOL

标的代码

marginSecuPosition

LONG

担保品买入持仓量

marginSecuAvgPrice

DOUBLE

买成交均价

marginPosition

LONG

融资买入持仓量

marginBuyValue

DOUBLE

融资买入金额

secuLendingPosition

LONG

融券卖出持仓量

secuLendingSellValue

DOUBLE

融券卖出金额

closePrice

DOUBLE

收盘价

conversionRatio

DOUBLE

保证金折算率

tradingMargin

DOUBLE

融资保证金比例

lendingMargin

DOUBLE

融券保证金比例

基本信息表说明#

字段

类型

备注

symbol

SYMBOL

标的代码

tradeDate

DATE

交易日

symbolSource

SYMBOL

交易所

securityRating

SYMBOL

标的分类

marginable

BOOL

是否是可充抵保证金证券

  • true:可以担保品买入
  • false:无法担保品买入

conversionRatio

DOUBLE

保证金折算率(影响可用保证金可用余额)

tradingMargin

DOUBLE

融资保证金比例(影响可用保证金可用余额)

lendingMargin

DOUBLE

融券保证金比例(影响可用保证金可用余额)

eligibleForMarginTrading

BOOL

是否是可融资状态

  • true:可以融资买入
  • false:无法融资买入

eligibleForLending

BOOL

是否是可融券状态

  • true:可以融券卖出
  • false:无法融券卖出

逐笔或逐笔+快照#

行情数据结构说明#

通过接口 append_data 向引擎中插入数据时,msg 结构:

message_table = sf.streaming.table(
    types={
        "msgTime": "TIMESTAMP",
        "msgType": "SYMBOL",
        "msgBody": "BLOB",
        "symbol": "STRING",
        "channelNo": "INT",
        "seqNum": "LONG",
    },
    size=0,
    capacity=10000000
)

带有逐笔行情时,msgType 有 "entrust", "trade", "snapshot", "END" 四种类型,当使用逐笔数据合成指定频率的快照数据时,可以不使用 msgType 为 "snapshot" 的行情数据。在这种情况下,系统将根据逐笔交易数据和委托单数据生成对应频率的快照数据。不同 msgType 类型的逐笔数据表通过回放函数 replayDS 以及 replay输出得到回测所需的表messageTable。下面为各类逐笔数据表的结构说明:

逐笔数据 entrust 和 trade 表结构:

字段

类型

备注

symbol

SYMBOL

股票代码
上交所以 ".XSHG" 结尾
深交所以 ".XSHE" 结尾

symbolSource

STRING

"XSHG"(上交所)或者 "XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

sourceType

INT

0 代表委托数据 entrust;1 代表成交数据 trade

orderType

INT

entrust:

  • 1 市价
  • 2 限价
  • 3 本方最优
  • 10 撤单(仅上交所,记录在 entrust 中)
trade:
  • 0 成交
  • 1 撤单(仅深交所,记录在 trade 中)

price

DOUBLE

订单价格

qty

LONG

订单数量

buyNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

sellNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

direction

INT

1(买)或 2(卖)

channelNo

INT

通道号

seqNum

LONG

逐笔数据序号

snapshot 表结构:

字段

类型

备注

symbol

SYMBOL

股票代码
上交所以 ".XSHG" 结尾
深交所以 ".XSHE" 结尾

symbolSource

STRING

"XSHG"(上交所)或者 "XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

totalBidQty

LONG

区间成交买数量

totalOfferQty

LONG

区间成交卖数量

bidPrice

DOUBLE[]

委买价格列表

bidQty

LONG[]

委买量列表

offerPrice

DOUBLE[]

委卖价格列表

offerQty

LONG[]

委卖量列表

signal

DOUBLE[]

指标列表

seqNum

LONG

逐笔数据序号

prevClosePrice

DOUBLE

前收盘价

回测行情回放结束时,增加一条 msgType 为 "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)

行情回调函数说明#

逐笔行情回调函数 onTick :输入参数 msg

msg 为字典时,是以 symbol 为 key 的 tick 数据字典。其中 value 为这支股票对应的行情信息以及 initialize 中定义的指标计算结果。每个 tick 对象包含字段如下:

字段

类型

备注

symbol

SYMBOL

股票代码
上交所以 ".XSHG" 结尾
深交所以 ".XSHE" 结尾

symbolSource

STRING

".XSHG"(上交所)或者 ".XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

sourceType

INT

0 代表委托数据 entrust;1 代表成交表 trade

orderType

INT

entrust:1 市价;2 限价;3 本方最优;10 撤单(仅上交所,即上交所撤单记录在 entrust 中)
trade:0 成交;1 撤单(仅深交所,即深交所撤单记录在 trade 中)

price

DOUBLE

订单价格

qty

LONG

订单数量

buyNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

sellNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

direction

INT

1(买)或 2(卖)

channelNo

INT

通道号

seqNum

LONG

逐笔数据序号

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

msg 为字典时,是以 symbol 为 key 的 snapShot 数据字典。其中 value 为这支股票对应的行情信息以及initialize 中定义的指标计算结果。每个 snapShot 对象包含字段如下:

字段

类型

备注

symbol

SYMBOL

股票代码
上交所以 ".XSHG" 结尾
深交所以 ".XSHE" 结尾

symbolSource

SYMBOL

股票市场
".XSHG"(上交所)或者 ".XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停板价

downLimitPrice

DOUBLE

跌停板价

totalBidQty

LONG

买单成交数量总和

totalOfferQty

LONG

卖单成交数量总和

bidPrice

DOUBLE[]

买单价格列表

bidQty

LONG[]

买单数量列表

offerPrice

DOUBLE[]

卖单价格列表

offerQty

LONG[]

卖单数量列表

signal

DOUBLE[]

指标列表

快照#

行情数据结构说明#

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

col_types = {
    "symbol": "SYMBOL",
    "symbolSource": "SYMBOL",
    "timestamp": "TIMESTAMP",
    "lastPrice": "DOUBLE",
    "upLimitPrice": "DOUBLE",
    "downLimitPrice": "DOUBLE",
    "totalBidQty": "LONG",
    "totalOfferQty": "LONG",
    "bidPrice": "DOUBLE[]",
    "bidQty": "LONG[]",
    "offerPrice": "DOUBLE[]",
    "offerQty": "LONG[]",
    "prevClosePrice": "DOUBLE"
}

message_table = sf.table(
    types=col_types,
    size=0,
    capacity=10000
)

注:

  • 标的代码 symbol 必须带有交易所标识(".XSHG",".XSHE")结尾,如 600000.XSHG,不然报错。

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

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

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

字段

类型

备注

symbol

SYMBOL

股票代码
上交所以 ".XSHG" 结尾
深交所以 ".XSHE" 结尾

symbolSource

STRING

"XSHG"(上交所)或者 "XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

totalBidQty

LONG

区间买量

totalOfferQty

LONG

区间卖量

bidPrice

DOUBLE[]

委买价格列表

bidQty

LONG[]

委买量列表

offerPrice

DOUBLE[]

委卖价格列表

offerQty

LONG[]

委卖量列表

signal

DOUBLE[]

指标列表

prevClosePrice

DOUBLE

前收盘价

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

col_types = {
    "symbol": "STRING",
    "symbolSource": "STRING",
    "timestamp": "TIMESTAMP",
    "lastPrice": "DOUBLE",
    "upLimitPrice": "DOUBLE",
    "downLimitPrice": "DOUBLE",
    "totalBidQty": "LONG",
    "totalOfferQty": "LONG",
    "bidPrice": "DOUBLE[]",
    "bidQty": "LONG[]",
    "offerPrice": "DOUBLE[]",
    "offerQty": "LONG[]",
    "prevClosePrice": "DOUBLE",
    "open": "DOUBLE",
    "close": "DOUBLE",
    "low": "DOUBLE",
    "high": "DOUBLE",
    "volume": "LONG"
}

message_table = sf.table(
    types=col_types,
    size=0,
    capacity=10_000_000
)

注:

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

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

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

字段

类型

备注

symbol

SYMBOL

股票代码
上交所以 ".XSHG" 结尾
深交所以 ".XSHE" 结尾

symbolSource

STRING

"XSHG"(上交所)或者 "XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

totalBidQty

LONG

区间买量

totalOfferQty

LONG

区间卖量

bidPrice

DOUBLE[]

委买价格列表

bidQty

LONG[]

委买量列表

offerPrice

DOUBLE[]

委卖价格列表

offerQty

LONG[]

委卖量列表

signal

DOUBLE[]

指标列表

prevClosePrice

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 msgType=`END", vars={'messageTable':message_table})
backtester.append_data(message_table)

行情回调函数说明#

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

msg 为字典时,是以 symbol为 key 的 snapShot 数据字典。其中 value 为这支股票对应的行情信息。每个 snapShot 对象包含字段如下:

名称

类型

含义

symbol

SYMBOL

股票代码
上交所以 ".XSHG" 结尾
深交所以 ".XSHE" 结尾

symbolSource

STRING

".XSHG"(上交所)或者 ".XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停板价

downLimitPrice

DOUBLE

跌停板价

totalBidQty

LONG

买单成交数量总和

totalOfferQty

LONG

卖单成交数量总和

bidPrice

DOUBLE[]

买单价格列表

bidQty

LONG[]

买单数量列表

offerPrice

DOUBLE[]

卖单价格列表

offerQty

LONG[]

卖单数量列表

signal

DOUBLE[]

其他

open

DOUBLE

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

close

DOUBLE

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

low

DOUBLE

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

high

DOUBLE

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

volume

LONG

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

注:

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

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

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

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

字段

类型

备注

symbol

SYMBOL

股票代码
上交所以 ".XSHG" 结尾
深交所以 ".XSHE" 结尾

tradeTime

TIMESTAMP

交易日

open

DOUBLE

开盘价

low

DOUBLE

最低价

high

DOUBLE

最高价

close

DOUBLE

收盘价

volume

LONG

成交量

amount

DOUBLE

成交额

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

prevClosePrice

DOUBLE

前收盘价

signal

DOUBLE[]

其他

快照+逐笔成交明细#

行情数据结构说明#

快照+逐笔成交明细行情(frequency=0,callback_for_snapshot=0)时的表结构:

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

注:

  • 标的代码 symbol 必须带有交易所标识(".XSHG",".XSHE")结尾,如 600000.XSHG,不然报错。

上述为快照+逐笔成交明细行情(frequency=0,callback_for_snapshot=0),即非快照合成 bar 行情的输入表结构。

具体字段说明如下:(与快照行情比增加tradePrice 和 tradeQty 两个字段)

字段

类型

备注

symbol

SYMBOL

股票代码
上交所以 ".XSHG" 结尾
深交所以 ".XSHE" 结尾

symbolSource

STRING

"XSHG"(上交所)或者 "XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

totalBidQty

LONG

区间买量

totalOfferQty

LONG

区间卖量

bidPrice

DOUBLE[]

委买价格列表

bidQty

LONG[]

委买量列表

offerPrice

DOUBLE[]

委卖价格列表

offerQty

LONG[]

委卖量列表

tradePrice

DOUBLE[]

成交价格

tradeQty

LONG[]

成交数量

signal

DOUBLE[]

指标列表

prevClosePrice

DOUBLE

前收盘价

快照+逐笔成交明细行情(frequency>0,callback_for_snapshot=1或者2)时的表结构:

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

注:

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

具体字段说明如下:(与快照行情比增加tradePrice 和 tradeQty 两个字段)

字段

类型

备注

symbol

SYMBOL

股票代码
上交所以 ".XSHG" 结尾
深交所以 ".XSHE" 结尾

symbolSource

STRING

"XSHG"(上交所)或者 "XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

totalBidQty

LONG

区间买量

totalOfferQty

LONG

区间卖量

bidPrice

DOUBLE[]

委买价格列表

bidQty

LONG[]

委买量列表

offerPrice

DOUBLE[]

委卖价格列表

offerQty

LONG[]

委卖量列表

tradePrice

DOUBLE[]

成交价格

tradeQty

LONG[]

成交数量

signal

DOUBLE[]

指标列表

prevClosePrice

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数据字典。其中 value 为这支股票对应的行情信息。每个 snapShot 对象包含字段如下:

字段

类型

备注

symbol

SYMBOL

股票代码
上交所以 ".XSHG" 结尾
深交所以 ".XSHE" 结尾

symbolSource

STRING

".XSHG"(上交所)或者 ".XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停板价

downLimitPrice

DOUBLE

跌停板价

totalBidQty

LONG

买单成交数量总和

totalOfferQty

LONG

卖单成交数量总和

bidPrice

DOUBLE[]

买单价格列表

bidQty

LONG[]

买单数量列表

offerPrice

DOUBLE[]

卖单价格列表

offerQty

LONG[]

卖单数量列表

signal

DOUBLE[]

其他

open

DOUBLE

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

close

DOUBLE

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

low

DOUBLE

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

high

DOUBLE

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

volume

LONG

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

注:

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

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

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

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

字段

类型

备注

symbol

SYMBOL

股票代码
上交所以 ".XSHG" 结尾
深交所以 ".XSHE" 结尾

tradeTime

TIMESTAMP

交易日

open

DOUBLE

开盘价

low

DOUBLE

最低价

high

DOUBLE

最高价

close

DOUBLE

收盘价

volume

LONG

成交量

amount

DOUBLE

成交额

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

prevClosePrice

DOUBLE

前收盘价

signal

DOUBLE[]

其他

分钟频或日频#

行情数据结构说明#

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

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

注:

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

分钟频行情数据表必需字段如下所示:

字段

类型

备注

symbol

SYMBOL

股票代码

tradeTime

TIMESTAMP

时间戳

open

DOUBLE

开盘价

low

DOUBLE

最低价

high

DOUBLE

最高价

close

DOUBLE

收盘价

volume

LONG

成交量

amount

DOUBLE

成交金额

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

prevClosePrice

DOUBLE

前收盘价

signal

DOUBLE[]

其他字段列表

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

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

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

backtester.append_data(message_table)

行情回调函数说明#

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

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

字段

类型

备注

symbol

SYMBOL

股票代码。上交所以 ".XSHG" 结尾,深交所以 ".XSHE" 结尾

tradeTime

TIMESTAMP

交易日

open

DOUBLE

开盘价

low

DOUBLE

最低价

high

DOUBLE

最高价

close

DOUBLE

收盘价

volume

LONG

成交量

amount

DOUBLE

成交额

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

prevClosePrice

DOUBLE

前收盘价

signal

DOUBLE[]

其他

逐笔(宽表)#

行情数据结构说明#

执行回测时输入表 messageTable 结构: append_data

message_table = sf.table(
    types={
        "symbol": "SYMBOL",
        "symbolSource": "INT",
        "timestamp": "TIMESTAMP",
        "sourceType": "INT",
        "orderType": "INT",
        "price": "DOUBLE",
        "qty": "LONG",
        "buyNo": "LONG",
        "sellNo": "LONG",
        "direction": "INT",
        "channelNo": "INT",
        "seqNum": "LONG",
        "reserve1": "DOUBLE"
    },
    size=0,
    capacity=1000
)

逐笔(宽表)行情数据表结构:

字段

类型

备注

symbol

SYMBOL

股票代码。上交所以 ".XSHG" 结尾,深交所以 ".XSHE" 结尾

symbolSource

INT

0(上交所)或者 1(深交所)

timestamp

TIMESTAMP

时间戳

sourceType

INT

0 代表委托数据 entrust;1 代表成交表 trade

orderType

INT

  • entrust:1 市价;2 限价;3 本方最优;10 撤单(仅上交所,即上交所撤单记录在 entrust 中)
  • trade:0 成交;1 撤单(仅深交所,即深交所撤单记录在 trade 中)

price

DOUBLE

订单价格

qty

LONG

订单数量

buyNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

sellNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

direction

INT

1(买)或 2(卖)

channelNo

INT

通道号

seqNum

LONG

逐笔数据序号

reserve1

DOUBLE

预留字段1(宽表)

与逐笔数据相比,逐笔(宽表)增加了”reserve1“ 这个预留字段。

回测行情回放结束时,增加一条 symbol 为”END“的消息。如下示例:

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

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

backtester.append_data(message_table)

行情回调函数说明#

逐笔行情回调函数 on_tick :输入参数 msg

msg 为字典时,是以 symbol 为 key 的 tick 数据字典。其中 value 为这支股票对应的行情信息以及 initialize 中定义的指标计算结果。每个 tick 对象包含字段如下:

字段

类型

备注

symbol

SYMBOL

股票代码。上交所以 ".XSHG" 结尾,深交所以 ".XSHE" 结尾

symbolSource

STRING

".XSHG"(上交所)或者 ".XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

sourceType

INT

0 代表委托数据 entrust;1 代表成交表 trade

orderType

INT

  • entrust:1 市价;2 限价;3 本方最优;10 撤单(仅上交所,即上交所撤单记录在 entrust 中)
  • trade:0 成交;1 撤单(仅深交所,即深交所撤单记录在 trade 中)

price

DOUBLE

订单价格

qty

LONG

订单数量

buyNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

sellNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

direction

INT

1(买)或 2(卖)

channelNo

INT

通道号

seqNum

LONG

逐笔数据序号

reserve1

DOUBLE

预留字段1(宽表)

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

msg 为字典时,是以 symbol 为 key 的 on_snapshot 数据字典。其中 value 为这支股票对应的行情信息以及 initialize 中定义的指标计算结果。每个 snapShot 对象包含字段如下:

字段

类型

备注

symbol

SYMBOL

股票代码。上交所以 ".XSHG" 结尾,深交所以 ".XSHE" 结尾

symbolSource

STRING

".XSHG"(上交所)或者 ".XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

sourceType

INT

0 代表委托数据 entrust;1 代表成交表 trade

orderType

INT

  • entrust:1 市价;2 限价;3 本方最优;10 撤单(仅上交所,撤单记录在 entrust 中)
  • trade:0 成交;1 撤单(仅深交所,撤单记录在 trade 中)

price

DOUBLE

订单价格

qty

LONG

订单数量

buyNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

sellNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

direction

INT

1(买)或 2(卖)

channelNo

INT

通道号

seqNum

LONG

逐笔数据序号

reserve1

DOUBLE

预留字段1(宽表)

逐笔+快照(宽表)#

行情数据结构说明#

执行回测时输入表 messageTable 的数据结构: append_data

message_table = sf.table(
    types={
        "symbol": "SYMBOL",
        "symbolSource": "STRING",
        "timestamp": "TIMESTAMP",
        "sourceType": "INT",
        "orderType": "INT",
        "price": "DOUBLE",
        "qty": "LONG",
        "buyNo": "LONG",
        "sellNo": "LONG",
        "direction": "INT",
        "channelNo": "INT",
        "seqNum": "LONG",
        "lastPrice": "DOUBLE",
        "upLimitPrice": "DOUBLE",
        "downLimitPrice": "DOUBLE",
        "totalBidQty": "LONG",
        "totalOfferQty": "LONG",
        "bidPrice": "DOUBLE[]",
        "bidQty": "LONG[]",
        "offerPrice": "DOUBLE[]",
        "offerQty": "LONG[]",
        "prevClosePrice": "DOUBLE"
    },
    size=0,
    capacity=1000
)

逐笔+快照(宽表)行情数据表结构:

字段

类型

备注

symbol

SYMBOL

股票代码。上交所以 ".XSHG" 结尾,深交所以 ".XSHE" 结尾

symbolSource

INT

0(上交所)或者 1(深交所)

timestamp

TIMESTAMP

时间戳

sourceType

INT

  • 0:委托数据 entrust
  • 1:成交数据 trade
  • 2:快照数据 snapshot

orderType

INT

  • entrust:1 市价;2 限价;3 本方最优;10 撤单(仅上交所,撤单记录在 entrust 中)
  • trade:0 成交;1 撤单(仅深交所,撤单记录在 trade 中)

price

DOUBLE

订单价格

qty

LONG

订单数量

buyNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

sellNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

direction

INT

1(买)或 2(卖)

channelNo

INT

通道号

seqNum

LONG

逐笔数据序号

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

totalBidQty

LONG

区间买量

totalOfferQty

LONG

区间卖量

bidPrice

DOUBLE[]

委买价格列表

bidQty

LONG[]

委买量列表

offerPrice

DOUBLE[]

委卖价格列表

offerQty

LONG[]

委卖量列表

prevClosePrice

DOUBLE

前收盘价

reserve1

DOUBLE

预留字段1(宽表)

reserve2

DOUBLE

预留字段2(宽表)

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

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

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

backtester.append_data(message_table)

行情回调函数说明#

逐笔行情回调函数 on_tick :输入参数 msg

msg 为字典时,是以 symbol 为 key 的 tick 数据字典。其中 value 为这支股票对应的行情信息以及 initialize 中定义的指标计算结果。每个 tick 对象包含字段如下:

字段

类型

备注

symbol

SYMBOL

股票代码。上交所以 ".XSHG" 结尾,深交所以 ".XSHE" 结尾

symbolSource

STRING

".XSHG"(上交所)或者 ".XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

sourceType

INT

  • 0:委托数据 entrust
  • 1:成交表 trade
  • 2:快照数据 snapshot

orderType

INT

  • entrust:1 市价;2 限价;3 本方最优;10 撤单(仅上交所,撤单记录在 entrust 中)
  • trade:0 成交;1 撤单(仅深交所,撤单记录在 trade 中)

price

DOUBLE

订单价格

qty

LONG

订单数量

buyNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

sellNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

direction

INT

1(买)或 2(卖)

channelNo

INT

通道号

seqNum

LONG

逐笔数据序号

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

totalBidQty

LONG

区间买量

totalOfferQty

LONG

区间卖量

bidPrice

DOUBLE[]

委买价格列表

bidQty

LONG[]

委买量列表

offerPrice

DOUBLE[]

委卖价格列表

offerQty

LONG[]

委卖量列表

prevClosePrice

DOUBLE

前收盘价

reserve1

DOUBLE

预留字段 1(宽表)

reserve2

DOUBLE

预留字段 2(宽表)

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

msg 为字典时,是以 symbol 为 key 的 snapShot 数据字典。其中 value 为这支股票对应的行情信息以及 initialize 中定义的指标计算结果。每个 snapShot 对象包含字段如下:

字段

类型

备注

symbol

SYMBOL

股票代码。上交所以 ".XSHG" 结尾,深交所以 ".XSHE" 结尾

symbolSource

STRING

".XSHG"(上交所)或者 ".XSHE"(深交所)

timestamp

TIMESTAMP

时间戳

sourceType

INT

  • 0:委托数据 entrust
  • 1:成交表 trade
  • 2:快照数据 snapshot

orderType

INT

  • entrust:1 市价;2 限价;3 本方最优;10 撤单(仅上交所,撤单记录在 entrust 中)
  • trade:0 成交;1 撤单(仅深交所,撤单记录在 trade 中)

price

DOUBLE

订单价格

qty

LONG

订单数量

buyNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

sellNo

LONG

trade 对应其原始数据;entrust 中的委托单号填充

direction

INT

1(买)或 2(卖)

channelNo

INT

通道号

seqNum

LONG

逐笔数据序号

lastPrice

DOUBLE

最新成交价

upLimitPrice

DOUBLE

涨停价

downLimitPrice

DOUBLE

跌停价

totalBidQty

LONG

区间买量

totalOfferQty

LONG

区间卖量

bidPrice

DOUBLE[]

委买价格列表

bidQty

LONG[]

委买量列表

offerPrice

DOUBLE[]

委卖价格列表

offerQty

LONG[]

委卖量列表

prevClosePrice

DOUBLE

前收盘价

reserve1

DOUBLE

预留字段 1(宽表)

reserve2

DOUBLE

预留字段 2(宽表)