数字货币#

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

数字货币引擎支持单个引擎中同时管理现货和期货的多个账户,其使用方式与单账户引擎有所不同。多账户设计遵循以下原则:

  1. 数字货币行情中可以存在不同的合约类型,on_bar 回调会一次性提供对应时间段内所有合约类型的数据,便于用户根据不同合约的行情设计策略。

  2. 回测币种接口支持 Account 来指定要操作的账户。

引擎配置说明#

key

说明

备注

"start_data"

开始日期

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

"end_data"

结束日期

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

"asset_type"

策略分组

必须为 “cryptocurrency”

"cash"

每个账户的初始资金(字典类型){“spot”: 100000.“futures”: 100000.“option”: 100000.}

DOUBLE 类型,必填。

  • spot: 现货账户
  • futures: 期货和永续账户
  • option: 期权账户

"data_type"

市场数据类型

INT 类型,必填。

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

"msg_as_table"

将行情数据处理为表格或字典

BOOL 类型。

  • false(默认):字典
  • true:表格

"matchingMode"

撮合模式

INT 类型。
日频数据:

  • 1:以收盘价撮合订单
  • 2:以开盘价撮合订单
分钟级数据:
  • 1:行情时间大于订单时间时撮合
  • 2:行情时间等于订单时间时以收盘价撮合;未成交订单使用模式 1 撮合
快照数据:
以委托价格成交

"bench_mark"

基准标的

STRING 或 SYMBOL 类型

"latency"

从订单提交到执行的延迟

DOUBLE 类型,单位毫秒

"funding_rate"

永续合约资金费率

TABLE 类型,字段说明见下表

"enable_indicator_optimize"

是否启用指标计算优化

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

"add_time_column_in_indicator"

指标订阅结果是否增加时间列

  • true:增加时间列
  • false(默认):不增加时间列

"is_backtest_mode"

是否为回测模式

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

"data_retention_window"

指标优化的数据保留策略

STRING 或 INT 类型,仅在 enable_indicator_optimize = true 且 is_backtest_mode = true 时生效:

  • “ALL”:保留所有数据
  • 按交易日保留数据,例如 “20d” 表示保留 20 个交易日
  • “None”(默认):不保留数据
  • 按条数保留数据,例如 “20” 表示每个 symbol 保留最新 20 条

"context"

策略上下文结构

包含全局策略变量的字典,例如:
context = {"buySignalRSI": 70} userConfig["context"] = context

"orderbook_matching_ratio"

订单实际成交比例

DOUBLE 类型,默认 1.0,取值范围 0~1.0。
仅在 data_type = 1 或 2 时使用

"matching_ratio"

价位区间内撮合比例

DOUBLE 类型,取值范围 0~1.0,默认等于 orderbook_matching_ratio。
仅在 data_type = 1 或 2 时使用

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

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

永续合约资金费率表 “funding_rate”:

字段

类型

备注

symbol

STRING 或 SYMBOL

合约

settlementTime

TIMESTAMP

结算时间

lastFundingRate

DECIMAL128(8)

结算费率

基本信息表说明#

字段

类型

备注

symbol

SYMBOL 或 STRING

品种代码

contractType

INT

合约类型:

  • 0:现货
  • 1:交割期货
  • 2:永续合约
  • 3:期权

optType

INT

期权类型

  • 1:看涨(call)
  • 2:看跌(put)

strikePrice

DECIMAL128(8)

行权价

contractSize

DECIMAL128(8)

合约乘数

marginRatio

DECIMAL128(8)

保证金比例

tradeUnit

DECIMAL128(8)

合约单位

priceUnit

DECIMAL128(8)

报价单位

priceTick

DECIMAL128(8)

价格最小变动单位

takerRate

DECIMAL128(8)

吃单手续费

makerRate

DECIMAL128(8)

挂单手续费

deliveryCommissionMode

INT

指定交易执行时交易费用的计算方式:

  • 1:每手的 makerRate(或 takerRate)
  • 2:交易价值×makerRate(或 takerRate)

fundingSettlementMode

INT

定义永续合约多头和空头头寸之间的资金费用如何结算:

  • 1:每手 lastfunding_rate
  • 2:名义价值×lastfunding_rate

lastTradeTime

TIMESTAMP

最后交易时间

:

  • 费用计算,每个品种相应的保证金、费用等不一致

  • 若品种类型为永续合约时,持仓费用计算还需参考配置的永续合约资金费率表

快照#

行情数据结构说明#

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

col_type = {
    "symbol": "STRING", "symbolSource": "STRING", "timestamp": "TIMESTAMP", "tradingDay": "DATE", 
    "lastPrice": "DECIMAL128(8)", "upLimitPrice": "DECIMAL128(8)", "downLimitPrice": "DECIMAL128(8)", 
    "totalBidQty": "DECIMAL128(8)", "totalOfferQty": "DECIMAL128(8)", "bidPrice": "DECIMAL128(8)[]", 
    "bidQty": "DECIMAL128(8)[]", "offerPrice": "DECIMAL128(8)[]", "offerQty": "DECIMAL128(8)[]", 
    "highPrice": "DECIMAL128(8)", "lowPrice": "DECIMAL128(8)", "prevClosePrice": "DECIMAL128(8)", 
    "settlementPrice": "DECIMAL128(8)", "prevSettlementPrice": "DECIMAL128(8)", "contractType": "INT"
}

message_table = sf.streaming.table(types=col_type, size=0, capacity=10000000)

快照行情数据表结构:

字段

类型

备注

symbol

STRING

品种代码

symbolSource

STRING

交易所

timestamp

TIMESTAMP

时间戳

tradingDay

DATE

交易日/结算日期

lastPrice

DECIMAL128(8)

最新成交价

upLimitPrice

DECIMAL128(8)

涨停价

downLimitPrice

DECIMAL128(8)

跌停价

totalBidQty

DECIMAL128(8)

区间成交买数量

totalOfferQty

DECIMAL128(8)

区间成交卖数量

bidPrice

DECIMAL128(8)[]

委托买价

bidQty

DECIMAL128(8)[]

委托买量

offerPrice

DECIMAL128(8)[]

委托卖价

offerQty

DECIMAL128(8)[]

委托卖量

highPrice

DECIMAL128(8)

最高价

lowPrice

DECIMAL128(8)

最低价

signal

DOUBLE[]

其他字段列表

prevClosePrice

DECIMAL128(8)

前收盘价

settlementPrice

DECIMAL128(8)

结算价

prevSettlementPrice

DECIMAL128(8)

前结算价

contractType

INT

合约类型:

  • 0:现货
  • 1:交割合约
  • 2:永续合约
  • 3:期权

:不同品种类型对应的基本信息表说明见本节最后一栏。

回测行情回放结束时,发送一条 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

STRING

品种代码

symbolSource

STRING

交易所

timestamp

TIMESTAMP

时间戳

tradingDay

DATE

交易日/结算日期

lastPrice

DECIMAL128(8)

最新成交价

upLimitPrice

DECIMAL128(8)

涨停价

downLimitPrice

DECIMAL128(8)

跌停价

totalBidQty

DECIMAL128(8)

区间成交买数量

totalOfferQty

DECIMAL128(8)

区间成交卖数量

bidPrice

DECIMAL128(8)[]

委托买价

bidQty

DECIMAL128(8)[]

委托买量

offerPrice

DECIMAL128(8)[]

委托卖价

offerQty

DECIMAL128(8)[]

委托卖量

highPrice

DECIMAL128(8)

最高价

lowPrice

DECIMAL128(8)

最低价

signal

DOUBLE[]

其他字段列表

prevClosePrice

DECIMAL128(8)

前收盘价

settlementPrice

DECIMAL128(8)

结算价

prevSettlementPrice

DECIMAL128(8)

前结算价

contractType

INT

合约类型:

  • 0:现货
  • 1:交割合约
  • 2:永续合约
  • 3:期权

分钟频率或日频#

行情数据结构说明#

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

col_type = {
    "symbol": "SYMBOL", "symbolSource": "SYMBOL", "tradeTime": "TIMESTAMP", "tradingDay": "DATE", 
    "open": "DECIMAL128(8)", "low": "DECIMAL128(8)", "high": "DECIMAL128(8)", "close": "DECIMAL128(8)", 
    "volume": "DECIMAL128(8)", "amount": "DECIMAL128(8)", "upLimitPrice": "DECIMAL128(8)", 
    "downLimitPrice": "DECIMAL128(8)", "prevClosePrice": "DECIMAL128(8)", "settlementPrice": "DECIMAL128(8)", 
    "prevSettlementPrice": "DECIMAL128(8)", "contractType": "INT"
}

message_table = sf.streaming.table(types=col_type, size=0, capacity=10000000)

分钟频行情数据表结构:

字段

类型

备注

symbol

SYMBOL

品种代码

symbolSource

SYMBOL

交易所

tradeTime

TIMESTAMP

时间戳

tradingDay

DATE

交易日/结算日期

open

DECIMAL128(8)

开盘价

low

DECIMAL128(8)

最低价

high

DECIMAL128(8)

最高价

close

DECIMAL128(8)

收盘价

volume

DECIMAL128(8)

成交量

amount

DECIMAL128(8)

成交金额

upLimitPrice

DECIMAL128(8)

涨停价

downLimitPrice

DECIMAL128(8)

跌停价

signal

DOUBLE[]

其他字段列表

prevClosePrice

DECIMAL128(8)

前收盘价

settlementPrice

DECIMAL128(8)

结算价

prevSettlementPrice

DECIMAL128(8)

前结算价

contractType

INT

合约类型:

  • 0:现货
  • 1:交割合约
  • 2:永续合约
  • 3:期权

:不同品种类型对应的基本信息表说明见本节最后一栏。

回测行情回放结束时,发送一条 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

SYMBOL

交易所

tradeTime

TIMESTAMP

时间戳

tradingDay

DATE

交易日/结算日期

open

DECIMAL128(8)

开盘价

low

DECIMAL128(8)

最低价

high

DECIMAL128(8)

最高价

close

DECIMAL128(8)

收盘价

volume

DECIMAL128(8)

成交量

amount

DECIMAL128(8)

成交金额

upLimitPrice

DECIMAL128(8)

涨停价

downLimitPrice

DECIMAL128(8)

跌停价

signal

DOUBLE[]

其他字段列表

prevClosePrice

DECIMAL128(8)

前收盘价

settlementPrice

DECIMAL128(8)

结算价

prevSettlementPrice

DECIMAL128(8)

前结算价

contractType

INT

合约类型:

  • 0:现货
  • 1:交割合约
  • 2:永续合约
  • 3:期权