期权回测配置

回测插件支持对以下类型的期权数据进行回测:快照、分钟频、日频。

引擎配置说明

可通过 createBacktester 或 createBacktestEngine 创建回测引擎,其参数 config 用于配置引擎参数。config 是一个字典,其支持的键值对可参考下表:

表 1. 表 1-1 config 参数说明
键 值类型 必填 说明
"startDate" DATE 是 回测开始的日期,例如 2020.01.01。
"endDate" DATE 是 回测结束的日期,例如 2020.06.01。
"strategyGroup" STRING 是 策略类型,期权回测固定填 "option"。
"cash" DOUBLE 是 初始资金。
"dataType" INT 是 行情类型,可选值如下:
  • 1:快照
  • 3:分钟频
  • 4:日频
"frequency" INT 否 快照数据合成 K 线的频率,默认为 0,单位为毫秒。
  • 该配置仅在 dataType = 1 时生效。
  • 当 frequency = 0 时,该配置无效。
  • 当 frequency > 0 时,按照指定频率合成的 K 线触发 onBar 回调函数。
"msgAsTable" BOOL 否 行情的数据格式,默认为 false。
  • false:字典
  • true:表(此时通过 createBacktestEngine 创建引擎)
"matchingMode" INT 否 订单撮合模式 类型,可选值如下:
  • 1:
    • 日频:以收盘价撮合订单。
    • 分钟频:行情时间大于订单时间时撮合订单。
  • 2:
    • 日频:以开盘价撮合订单。
    • 分钟频:行情时间等于订单时间时以当前行情的收盘价撮合订单,后续未完成订单的撮合模式同 matchingMode = 1。
  • 3:以委托价格成交。
注:

当 dataType = 1 时,该配置设置为 1 或 2 时无效,默认都会使用模拟撮合引擎按照价格优先、时间优先逻辑撮合订单。

"enableSettlementPrice" BOOL 否 指定是否使用结算价计算每日盘后权益。
  • true:调用 getDailyTotalPortfolios,以及在 afterTrading 回调函数中调用的 getTotalPortfolios,使用结算价替代最新价计算指标。 在其他回调函数中调用 getTotalPortfolios 时,仍使用最新价。
  • false:使用最新价计算指标。
注:

结算价取行情表中该标的最新的 settlementPrice 字段值。 启用后,快照、分钟频和日频行情表均须包含该字段,否则报错。

"benchmark" STRING 否 用于 getReturnSummary 接口进行收益表现比较的基准标的。例如 "A2305"。
"latency" INT 否 订单从发出到被处理的延时,单位为毫秒,默认为 0,表示无延时。
"maintenanceMargin" DOUBLE 否 维持担保比例。取值 0~1.0 之间, 默认为 1.0。
"enableAlgoOrder" BOOL 否 指定是否开启算法订单。默认为 false。
  • true:开启
  • false:不开启
"enableIndicatorOptimize" BOOL 否 指定是否开启指标优化。默认为 false。
  • true:开启
  • false:不开启
"isBacktestMode" BOOL 否 指定是否为回测模式。默认为 true。
  • true:回测模式
  • false:模拟交易模式
"dataRetentionWindow" STRING 否 数据保留的窗口。仅当 enableIndicatorOptimize = true 时,该配置生效。
  • isBacktestMode = true 时,可选值如下:
    • "None"(默认值):不保留数据
    • "ALL":保留全部数据
    • "{num}d":按交易日天数保留数据,{num} 为正整数,如 "20d" 代表 20 个交易日
    • "{num}":按条数保留数据,{num} 为正整数,如 "20" 代表每个 symbol 保留最新的 20 条数据
  • isBacktestMode = false 时,无需设置。

"addTimeColumnInIndicator" BOOL 否 指定指标订阅时是否给指标数据表增加时间列,默认 false。
  • true:增加
  • false:不增加
"context" DICT 否 全局策略变量,如:
context=dict(STRING,ANY)
context["buySignalRSI"]=70.
userConfig["context"]=context
"callbackForSnapshot " INT 否 快照行情的回调触发模式。该配置仅在 dataType = 1 时生效。可选值如下:
  • 0(默认值):只触发 onSnapshot
  • 1 :既触发 onSnapshot 又触发 onBar
  • 2 :只触发 onBar
注:

当 frequency > 0 时,必须触发 onBar,即将 callbackForSnapshot 设置为 1 或 2。

"orderBookMatchingRatio" DOUBLE 否 与行情订单薄的成交比例。该配置仅在 dataType = 1 时生效。取值在 0~1.0 之间,默认为 1.0。
"matchingRatio" DOUBLE 否 区间撮合比例。该配置仅在 dataType = 1 时生效。取值在 0~1.0 之间。未指定时取 orderBookMatchingRatio 的值;若两者均未指定,则默认为 1.0。
"msgAs​PiecesOnSnapshot" BOOL 否 onSnapshot 回调的触发方式。默认为 false。
  • false:每条行情数据依次触发 onSnapshot。
  • true:同一时间戳的所有行情数据同时触发 onSnapshot。
注:

不同的期权行情类型(dataType)的引擎配置有所差异。frequency、callbackForSnapshot、orderBookMatchingRatio、matchingRatio 仅在 dataType = 1 时生效。

基本信息表说明

createBacktester 的参数 securityReference 用于指定合约的基本信息表,表结构如下:

表 2. 表 1-2 基本信息表
列名 类型 说明
symbol SYMBOL 合约代码
underlyingAssetType INT 期权品种。可选值如下:
  • 1:商品期权
  • 2:股指期权
  • 3:ETF 期权
multiplier DOUBLE 合约乘数
type INT 期权类型。可选值如下:
  • 1:看涨期权(call)
  • 2:看跌期权(put)
strikePrice DOUBLE 行权价
marginRatio DOUBLE 保证金比率
tradeUnit DOUBLE 合约单位
priceUnit DOUBLE 报价单位
priceTick DOUBLE 价格最小变动单位
commission DOUBLE 手续费率或每手手续费,具体含义由 deliveryCommissionMode 决定。
deliveryCommissionMode INT 手续费计费方式。可选值如下:
  • 1:按手数计费,手续费 = commission * 手数
  • 2:按成交额比例计费,手续费 = commission * 成交额
lastTradingDay DATE 合约最后交易日
exerciseDate DATE 期权行权日
exerciseSettlementDate DATE 行权交收日
exDate DATE
  • exDate:分红或者付息日期
  • adjStrikePrice:调整后的行权价
  • adjMultiplier:调整后的合约乘数
注:

交易日大于等于 exDate 时,行权价和合约乘数使用 adjStrikePrice 和 adjMultiplier。

adjStrikePrice DOUBLE
adjMultiplier DOUBLE
intradayClosingFee DOUBLE 日内平仓费用

快照

行情表结构说明

快照行情(dataType = 1)的表结构如下:

注:

表的列名须严格与下表一致。除首列必须为 symbol 列外,其余列的顺序不限。此外还支持 INT、DOUBLE、STRING 类型的列,或名为 signal、类型为 DOUBLE ARRAY VECTOR 的列作为扩展列。

表 3. 表 1-3 快照行情的表结构
列名 类型 说明
symbol STRING / SYMBOL 期权代码
symbolSource STRING / SYMBOL 交易所
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 最低价
underlyingPrice DOUBLE 标的价格
open DOUBLE 当 callbackForSnapshot = 1 或 callbackForSnapshot = 2 时,需要增加以下五列,代表由快照合成的 K 线:
  • open:开盘价
  • close:收盘价
  • low:最低价
  • high:最高价
  • volume:成交量
close DOUBLE
low DOUBLE
high DOUBLE
volume LONG
settlementPrice DOUBLE 可选,enableSettlementPrice = true、且实际使用结算价估值或输出时,需提供该列且值为正数。
amount DOUBLE 可选,成交金额
prevClosePrice DOUBLE 可选,昨日收盘价
prevSettlementPrice DOUBLE 可选,昨日结算价
Theta DOUBLE 期权价格相对于时间变化的敏感性
Vega DOUBLE 期权价格相对于标的资产波动率的敏感性
Gamma DOUBLE 期权 Delta 相对于标的资产价格的敏感性
Delta DOUBLE 期权价格相对于标的资产价格的敏感性
IV DOUBLE 隐含波动率

回调函数说明

  • 快照行情回调函数 onSnapshot:输入参数 msg。msg 为字典时,是以 symbol 为 key、以对应快照行情数据(snapShot)为 value 的字典。每个 snapShot 对象包含的字段参考表 1-3 快照行情的表结构。
  • callbackForSnapshot = 1 或 callbackForSnapshot = 2,还需 onBar 回调函数。

    K 线回调函数 onBar:输入参数 msg。msg 为字典时,是以 symbol 为 key、以对应 K 线数据为 value 的字典。每根 K 线包含字段如下:

表 4. 表 1-4 K 线数据字段
字段 类型 备注
symbol STRING / SYMBOL 期权代码
symbolSource STRING / SYMBOL 交易所
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 标的价格

分钟频和日频

行情表结构说明

分钟频(dataType = 3)和日频(dataType = 4)行情的表结构如下:

注:

表的列名须严格与下表一致。除首列必须为 symbol 列外,其余列的顺序不限。此外还支持 INT、DOUBLE、STRING 类型的列,或名为 signal、类型为 DOUBLE ARRAY VECTOR 的列作为扩展列。

表 5. 表 1-5 分钟频和日频行情的表结构
列名 类型 说明
symbol STRING / SYMBOL 期权代码
symbolSource STRING / SYMBOL 交易所
tradeTime TIMESTAMP 时间戳
tradingDay DATE 交易日/结算日期
open DOUBLE 开盘价
low DOUBLE 最低价
high DOUBLE 最高价
close DOUBLE 收盘价
volume LONG 成交量
upLimitPrice DOUBLE 涨停价
downLimitPrice DOUBLE 跌停价
underlyingPrice DOUBLE 标的价格
settlementPrice DOUBLE 可选,enableSettlementPrice = true、且实际使用结算价估值或输出时,需提供该列且值为正数。
amount DOUBLE 可选,成交金额
prevClosePrice DOUBLE 可选,昨日收盘价
prevSettlementPrice DOUBLE 可选,昨日结算价
Theta DOUBLE 期权价格相对于时间变化的敏感性
Vega DOUBLE 期权价格相对于标的资产波动率的敏感性
Gamma DOUBLE 期权 Delta 相对于标的资产价格的敏感性
Delta DOUBLE 期权价格相对于标的资产价格的敏感性
IV DOUBLE 隐含波动率

回调函数说明

K 线回调函数 onBar:输入参数 msg。msg 为字典时,是以 symbol 为 key、以对应 K 线数据为 value 的字典。每根 K 线包含的字段参考表 1-4 K 线数据字段。