期权#
回测平台支持的期权资产行情数据类型包括:快照,分钟频率,日频。
引擎配置说明#
key |
说明 |
备注 |
|---|---|---|
"start_date" |
开始日期 |
必须配置,DATE 类型,例如 “2020.01.01” |
"end_date" |
结束日期 |
必须配置,DATE 类型,例如 “2020.01.01” |
"asset_type" |
策略类型 |
必须配置,“option” |
"cash" |
初始资金 |
必须配置,DOUBLE 类型 |
"data_type" |
行情类型 |
必须配置,INT 类型,可选值为:
|
"frequency" |
快照数据以指定频率合成 bar |
INT 类型,默认为 0,仅当
|
"msg_as_table" |
行情的数据格式 |
BOOL 类型,默认为 false。
|
"matching_mode" |
订单撮合模式 |
INT 类型,根据行情类型模式不同,可选值为:
当 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 类型:
|
"enable_indicator_optimize" |
是否开启指标优化 |
BOOL 类型,默认为 false。
|
"is_backtest_mode" |
是否为回测模式 |
BOOL 类型,默认为 true。
|
"data_retention_window" |
开始指标优化时数据保留的窗口 |
STRING 或 INT 类型,当 enable_indicator_optimize = true 时生效。
|
"add_time_column_in_indicator" |
指标订阅时是否给指标数表增加时间列 |
BOOL 类型,默认 false。
|
"context" |
策略逻辑上下文类结构 |
由全局策略变量组成的字典,例如: |
"callback_for_snapshot" |
快照行情触发回调模式 |
data_type = 1 仅有。INT 类型,可选值为:
on_bar 回调函数,即 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 |
合约代码 |
underlyingAssetType |
INT |
期权品种:
|
multiplier |
DOUBLE |
合约乘数 |
type |
INT |
期权类型:
|
strikePrice |
DOUBLE |
行权价 |
marginRatio |
DOUBLE |
保证金比率 |
tradeUnit |
DOUBLE |
合约单位 |
priceUnit |
DOUBLE |
报价单位 |
priceTick |
DOUBLE |
价格最小变动单位 |
commission |
DOUBLE |
手续费 |
deliveryCommissionMode |
INT |
|
lastTradingDay |
DATE |
合约最后交易日 |
exerciseDate |
DATE |
期权行权日 |
exerciseSettlementDate |
DATE |
行权交收日 |
exDate |
DATE |
分红或者付息日期,交易日大于等于 exDate 时,行权价和合约乘数使用 adjStrikePrice 和 adjMultiplier |
adjStrikePrice |
DOUBLE |
调整后的行权价,交易日大于等于 exDate 时,行权价和合约乘数使用 adjStrikePrice 和 adjMultiplier |
adjMultiplier |
DOUBLE |
调整后的合约乘数,交易日大于等于 exDate 时,行权价和合约乘数使用 adjStrikePrice 和 adjMultiplier |
快照#
行情数据结构说明#
通过 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",
"signal": "DOUBLE",
"prevClosePrice": "DOUBLE",
"settlementPrice": "DOUBLE",
"prevSettlementPrice": "DOUBLE",
"underlyingPrice": "DOUBLE",
"Theta": "DOUBLE",
"Vega": "DOUBLE",
"Gamma": "DOUBLE",
"Delta": "DOUBLE",
"IV": "DOUBLE"
},
size=0,
capacity=10000000
)
注:
快照合成 bar 行情时(frequency > 0 且 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 |
前结算价 |
underlyingPrice |
DOUBLE |
标的价格 |
Theta |
DOUBLE |
/ |
Vega |
DOUBLE |
/ |
Gamma |
DOUBLE |
/ |
Delta |
DOUBLE |
/ |
IV |
DOUBLE |
/ |
快照行情(frequency > 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",
"prevClosePrice": "DOUBLE",
"settlementPrice": "DOUBLE",
"prevSettlementPrice": "DOUBLE",
"underlyingPrice": "DOUBLE",
"Theta": "DOUBLE",
"Vega": "DOUBLE",
"Gamma": "DOUBLE",
"Delta": "DOUBLE",
"IV": "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"。
字段名须严格与下表一致,字段顺序除首列必须为 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 |
前结算价 |
underlyingPrice |
DOUBLE |
标的价格 |
Theta |
DOUBLE |
/ |
Vega |
DOUBLE |
/ |
Gamma |
DOUBLE |
/ |
Delta |
DOUBLE |
/ |
IV |
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 WHERE timestamp = max(timestamp)",
vars={
'messageTable': message_table
}
)
# demo of signal field generation
# sf.sql(
# "UPDATE messageTable SET signal = fixedLengthArrayVector([close])",
# vars={'messageTable': message_table, 'fixedLengthArrayVector': F.fixedLengthArrayVector}
# )
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 |
前结算价 |
underlyingPrice |
DOUBLE |
标的价格 |
Theta |
DOUBLE |
/ |
Vega |
DOUBLE |
/ |
Gamma |
DOUBLE |
/ |
Delta |
DOUBLE |
/ |
IV |
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 的 分钟频率的 bar 数据字典。每个 K 线包含字段如下:
字段 |
类型 |
备注 |
|---|---|---|
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 |
前结算价 |
underlyingPrice |
DOUBLE |
标的价格 |
Theta |
DOUBLE |
/ |
Vega |
DOUBLE |
/ |
Gamma |
DOUBLE |
/ |
Delta |
DOUBLE |
/ |
IV |
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",
"underlyingPrice": "DOUBLE",
"Theta": "DOUBLE",
"Vega": "DOUBLE",
"Gamma": "DOUBLE",
"Delta": "DOUBLE",
"IV": "DOUBLE"
},
size=0,
capacity=10000000
)
注:
字段名须严格与下表一致,字段顺序除首列必须为 symbol 列外,无其它要求,此外还支持 INT,DOUBLE,STRING 类型的列,或名为 signal 的 DOUBLE ARRAY VECTOR 类型的列作为扩展字段。
分钟频行情数据表必需字段如下所示:
字段 |
类型 |
备注 |
|---|---|---|
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 |
前结算价 |
underlyingPrice |
DOUBLE |
标的价格 |
Theta |
DOUBLE |
/ |
Vega |
DOUBLE |
/ |
Gamma |
DOUBLE |
/ |
Delta |
DOUBLE |
/ |
IV |
DOUBLE |
/ |
回测行情回放结束时,发送一条 symbol 为 “END” 的消息:
message_table = sf.sql(
"SELECT TOP 1 * FROM messageTable",
vars={
'messageTable': message_table
}
)
# demo for generating signal field
# sf.sql(
# "UPDATE messageTable SET signal = fixedLengthArrayVector([close])",
# vars={'messageTable': message_table, 'fixedLengthArrayVector': F.fixedLengthArrayVector}
# )
sf.sql(
"UPDATE messageTable SET symbol = `END",
vars={'messageTable': message_table}
)
backtester.append_data(message_table)
策略回调函数说明#
k 线行情回调函数 on_bar:输入参数 msg
msg 为字典时,是以 symbol 为 key 的 分钟频率的 snapShot 数据字典。每个 K 线包含字段如下:
字段 |
类型 |
备注 |
|---|---|---|
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 |
前结算价 |
underlyingPrice |
DOUBLE |
标的价格 |
Theta |
DOUBLE |
/ |
Vega |
DOUBLE |
/ |
Gamma |
DOUBLE |
/ |
Delta |
DOUBLE |
/ |
IV |
DOUBLE |
/ |