股票#
回测平台支持的股票资产行情数据类型包括:逐笔或逐笔+快照,快照,快照+逐笔成交明细,分钟频率,日频,逐笔(宽表),逐笔+快照(宽表)等。
引擎配置说明#
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 类型,必填,可选值:
|
"frequency" |
逐笔数据以指定频率合成快照或快照数据以指定频率合成 bar |
INT 类型,默认 0。
|
"msg_as_table" |
行情数据格式 |
BOOL 类型,默认 false。
|
"matching_mode" |
订单撮合模式 |
INT 类型,可选:
按委托价格撮合 注意:
|
"bench_mark" |
基准标的 |
STRING 或 SYMBOL 类型,必须以 |
"latency" |
订单延时(毫秒) |
INT 类型,从下单到执行的延时 |
"stock_dividend" |
分红及除权信息表 |
TABLE 类型 |
"enable_algo_order" |
是否启用算法订单 |
|
"enable_indicator_optimize" |
是否启用指标优化 |
|
"is_backtest_mode" |
是否回测模式 |
|
"data_retention_window" |
指标优化数据保留策略 |
STRING/INT 类型,仅当 enable_indicator_optimize = true 且 is_backtest_mode = true 生效:
|
"add_time_column_in_indicator" |
是否在指标表中增加时间列 |
|
"context" |
策略逻辑上下文结构 |
一个字典,由策略全局变量组成,例如: |
"callback_for_snapshot" |
快照回调模式 |
仅适用于 data_type=1。
|
"enable_subscription_to_tick_quotes" |
是否订阅逐笔行情 |
适用于 data_type=0,5,6。
on_tick 回调。 |
"output_queue_position" |
输出订单在盘口中的排队信息 |
适用于 data_type=0,5,6 且 enable_subscription_to_tick_quotes=true。
触发时会在交易明细和未成交接口中增加以下指标:
|
"prev_close_price" |
前收盘价表 |
TABLE 类型,字段为 |
"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 类型,必填,可选值:
|
"lineOfCredit" |
授信额度 |
DOUBLE 类型,必填 |
"margin_trading_interest_rate" |
融资利率 |
DOUBLE 类型,必填,例如 0.15 |
"secu_lending_interest_rate" |
融券利率 |
DOUBLE 类型,必填,例如 0.15 |
"maintenance_margin" |
维持担保比例 |
必填,DOUBLE 数组,例如 |
"long_concentration" |
净多头集中度 |
DOUBLE 数组,例如 |
"short_concentration" |
净空头集中度 |
DOUBLE 数组,例如 |
"output_order_info" |
是否在订单明细表中输出风控日志 |
|
"repay_without_margin_buy" |
是否允许融资买入的券抵消融券卖出的券 |
|
"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 |
是否是可充抵保证金证券
|
conversionRatio |
DOUBLE |
保证金折算率(影响可用保证金可用余额) |
tradingMargin |
DOUBLE |
融资保证金比例(影响可用保证金可用余额) |
lendingMargin |
DOUBLE |
融券保证金比例(影响可用保证金可用余额) |
eligibleForMarginTrading |
BOOL |
是否是可融资状态
|
eligibleForLending |
BOOL |
是否是可融券状态
|
逐笔或逐笔+快照#
行情数据结构说明#
通过接口 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 |
股票代码 |
symbolSource |
STRING |
"XSHG"(上交所)或者 "XSHE"(深交所) |
timestamp |
TIMESTAMP |
时间戳 |
sourceType |
INT |
0 代表委托数据 entrust;1 代表成交数据 trade |
orderType |
INT |
entrust:
|
price |
DOUBLE |
订单价格 |
qty |
LONG |
订单数量 |
buyNo |
LONG |
trade 对应其原始数据;entrust 中的委托单号填充 |
sellNo |
LONG |
trade 对应其原始数据;entrust 中的委托单号填充 |
direction |
INT |
1(买)或 2(卖) |
channelNo |
INT |
通道号 |
seqNum |
LONG |
逐笔数据序号 |
snapshot 表结构:
字段 |
类型 |
备注 |
|---|---|---|
symbol |
SYMBOL |
股票代码 |
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 |
股票代码 |
symbolSource |
STRING |
".XSHG"(上交所)或者 ".XSHE"(深交所) |
timestamp |
TIMESTAMP |
时间戳 |
sourceType |
INT |
0 代表委托数据 entrust;1 代表成交表 trade |
orderType |
INT |
entrust:1 市价;2 限价;3 本方最优;10 撤单(仅上交所,即上交所撤单记录在 entrust 中) |
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 |
股票代码 |
symbolSource |
SYMBOL |
股票市场 |
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 |
股票代码 |
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 |
股票代码 |
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 |
股票代码 |
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 行情的开盘价 |
close |
DOUBLE |
合成 bar 行情的收盘价 |
low |
DOUBLE |
合成 bar 行情的最低价 |
high |
DOUBLE |
合成 bar 行情的最高价 |
volume |
LONG |
合成 bar 行情的成交量 |
注:
快照合成 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 |
股票代码 |
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 |
股票代码 |
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 |
股票代码 |
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 |
股票代码 |
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 行情的开盘价 |
close |
DOUBLE |
合成 bar 行情的收盘价 |
low |
DOUBLE |
合成 bar 行情的最低价 |
high |
DOUBLE |
合成 bar 行情的最高价 |
volume |
LONG |
合成 bar 行情的成交量 |
注:
快照合成 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 |
股票代码 |
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 |
|
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 |
|
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 |
|
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 |
|
orderType |
INT |
|
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 |
|
orderType |
INT |
|
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 |
|
orderType |
INT |
|
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(宽表) |