跳到主要内容

价格区间执行规则

免责声明:

  • 此处使用的交易对和数值均为虚构,不代表实际交易所的配置。

什么是执行规则?

执行规则是在订单执行时强制执行的交易规则。目前唯一可用的执行规则是价格区间规则。

价格区间执行规则的作用是什么?

该规则确保交易只能在参考价格附近的价格区间内(包括区间边界)执行。

如何查询某个交易对允许的执行价格区间?

请参考以下接口/方法:

API请求
REST APIGET /api/v3/executionRules
WebSocket APIexecutionRules

如何查询参考价格?

请参考以下接口/方法:

API请求
REST APIGET /api/v3/referencePrice
WebSocket APIreferencePrice
WebSocket 数据流<symbol>@referencePrice

请注意,参考价格是持续变化的,建议通过 WebSocket 数据流实时监控参考价格。

价格区间执行规则如何工作?

举例说明,假设该交易对的执行规则如下:

{
"symbolRules": [
{
"symbol": "BAZUSD",
"rules": [
{
"ruleType": "PRICE_RANGE",
"bidMultiplierUp": "2.0000",
"bidMultiplierDown": "0.5000",
"askMultiplierUp": "2.0000",
"askMultiplierDown": "0.5000"
}
]
}
]
}

如果该交易对的参考价格为:

{
"symbol": "BAZUSD",
"referencePrice": "10.00",
"timestamp": 1770736694138
}

这意味着在时间点 1770736694138

  1. 买入订单的执行价格不得高于参考价格的两倍,也不得低于参考价格的一半。
  2. 卖出订单的执行价格不得高于参考价格的两倍,也不得低于参考价格的一半。

如果订单尝试以超出允许价格区间的价格执行,会发生什么

如果吃单尝试以超出允许价格区间的价格执行,该订单将会过期(状态为 EXPIRED),过期原因是 EXECUTION_RULE_PRICE_RANGE_EXCEEDED

服务参考字段
非FIX接口expiryReason
FIX接口ExpiryReason <25056>
用户数据流"eR"

参考价格是如何计算的?

如果参考价格由撮合引擎计算,则查询参考价格计算方式时返回 "calculationType": "ARITHMETIC_MEAN"

如果参考价格由撮合引擎外部计算,则查询参考价格计算方式时返回 "calculationType": "EXTERNAL"。详情见下文。

撮合引擎如何计算参考价格?

撮合引擎将参考价格计算为一段时间窗口内交易价格的简单移动平均。计算配置包括毫秒级的桶宽(bucketWidthMs)和桶数量(bucketCount)。桶宽乘以桶数量定义了时间窗口大小。

当发生交易时,撮合引擎会记录该交易价格并将其添加到当前的时间桶中。每个时间桶包含:

  • 开始时间(open time),该时间是引擎时间与桶宽度取模
  • 交易数量(trade count),以固定小数点表示,精确到小数点后四位
  • 该时间桶内所有交易价格的总和,以固定小数点表示,精度比报价资产的精度多四位小数

撮合引擎通过将总和除以交易数量计算该桶的平均价格。某个开始时间的第一个交易创建该桶,随着交易发生,撮合引擎逐渐累积桶。当桶的结束时间超出时间窗口时,该桶会被丢弃。这意味着:

  • 当前时间点最旧的桶的开始时间可能在时间窗口之外,但结束时间在时间窗口内。
  • 引擎维护的最大桶数实际上比配置的 bucketCount 多1。

以下说明中,将时间窗口的最旧时间称为“截止时间”。

当最旧的桶跨越截止时间时,其内容会被按比例调整:

  • 桶外过期部分的比例为:(截止时间 - 桶的开始时间)除以桶宽,称为“过期比例”。
  • 桶的交易数量按过期比例减少。
  • 桶的总和按过期比例减少。
  • 桶的开始时间设置为截止时间。

参考价格为所有桶的总和除以所有桶的交易数量,除法为截断式整数除法。

外部计算参考价格的方式?

如果参考价格由撮合引擎外部计算,则查询参考价格计算方式时返回 "externalCalculationId": 后跟一个整数。每个数字代表不同的计算方法。

外部参考价格计算方法 0

参考价格由人工手动设置。该计算方法仅在不适合使用算法计算参考价格的情况下使用。