衍生品市场概念
定义
在使用线性合约的衍生品市场中(与反向合约不同),一个标的为 AAA/BBB 的合约提供了对基础资产 AAA 的敞口,并使用报价货币 BBB 作为保证金和结算货币。对于每个合约,报价单位是 BBB 货币单位的 AAA 价格,例如 ETH 的 USDT 价格。
名义价值(Notional) - 头寸的名义价值为:
notional = quantity * price
。退款(Refunds) - 在我们的清算系统中,退款指的是增加账户可用余额的操作。当账户上的负担解除时,资金将被释放(例如,取消限价订单、将订单的应付费用减少为做市商费用、使用较少的保证金来资助市场订单等)。
永久市场交易生命周期
永久市场创建
市场首先通过以下两种方式之一创建:
通过 MsgInstantPerpetualMarketLaunch
或 MsgInstantExpiryFuturesMarketLaunch
的即时启动功能创建市场,这种方式通过支付额外费用创建市场,不需要治理批准。
或者通过治理的正常方式创建市场,即通过 MsgPerpetualMarketLaunchProposal
或 MsgExpiryFuturesMarketLaunchProposal
提交提案。
余额管理
将资金存入交易所
交易者可以通过发送 MsgDeposit 将资金(例如 USDT)存入交易所,这会将币种从 Cosmos-SDK 银行模块转移到交易者在交易所模块中的子账户存款。
存入一定数量的币种将增加交易者子账户存款的 AvailableBalance
和 TotalBalance
,增幅为存入的金额。
从交易所提取资金
交易者可以通过发送 MsgWithdraw
从交易所提取资金,这将从交易者在交易所模块中的子账户转移币种。
提取要求:提取一定数量的币种将减少交易者子账户存款的 AvailableBalance
和 TotalBalance
,减少的金额为提取的数量。注意:提取金额必须小于或等于 AvailableBalance
。
在子账户之间转移资金
交易者可以通过发送 MsgSubaccountTransfer 在自己的子账户之间转移资金,该操作会将币种从一个子账户存款转移到另一个同样由交易者拥有的子账户。
子账户转移与正常提取的要求相同。
转移资金到其他交易所账户
交易者可以通过发送 MsgExternalTransfer
将资金转移到外部账户,该操作会将资金从交易者的子账户转移到另一个第三方账户。
外部资金转移与正常提取的要求相同。
订单管理
下限价单
Note that it is possible for an order to be partially matched and for the remaining unmatched portion to be added to the orderbook.
交易者可以通过发送 MsgCreateDerivativeLimitOrder
发布限价买单或卖单。提交后,订单可以:
在 Endblocker 批量拍卖中立即(完全或部分)与订单簿上的其他对立未成交订单进行撮合,从而为用户建立一个头寸。
被添加到订单簿。
注意,订单可能会部分匹配,剩余未匹配的部分会被添加到订单簿中。
下市价单
交易者可以通过发送 MsgCreateDerivativeMarketOrder
发布市价买单或卖单。提交后,市价单将与订单簿上的其他对立未成交订单在 Endblocker 批量拍卖中执行,从而为用户建立一个头寸。
取消限价单
用户通过发送 MsgCancelDerivativeOrder
来取消限价买单或卖单,这将把用户的限价单从订单簿中移除。
增加头寸保证金
用户可以通过发送 MsgIncreasePositionMargin
来增加头寸的保证金。
平掉破产头寸
如果头寸的维持保证金比例被突破,第三方可以通过发送 MsgLiquidatePosition
来平掉任何用户的头寸。
初始保证金要求
这是新建头寸时保证金与订单名义价值和标记价格的比例要求。额外的标记价格要求旨在减少交易价格和标记价格在短时间内过度偏离时的强平风险。根据初始保证金比例,订单必须满足以下两个要求:
保证金要求: 保证金必须满足:
Margin ≥ InitialMarginRatio * Price * Quantity
例如,在最大杠杆为 20 倍的市场中,初始保证金比例为 0.05。任何新建头寸的保证金必须至少为其名义价值的 0.05。标记价格要求: 保证金必须满足标记价格要求:
Margin ≥ Quantity * (InitialMarginRatio * MarkPrice - PNL)
其中,PNL 是头寸的预期盈亏,如果在当前标记价格下平仓的话。通过解方程得到标记价格的计算公式:
买单:MarkPrice ≥ (Margin - Price * Quantity) / ((InitialMarginRatio - 1) * Quantity)
卖单:MarkPrice ≤ (Margin + Price * Quantity) / ((InitialMarginRatio + 1) * Quantity)
维持保证金要求
在一个活跃仓位的生命周期中,如果未满足以下保证金要求,该仓位将面临平仓。(注意:为了简化符号表示,且不失一般性,我们假设所考虑的仓位没有任何融资)。
对于多头:保证金 >= 数量 * 维持保证金比例 * 标记价格 - (标记价格 - 进场价格)
对于空头:保证金 >= 数量 * 维持保证金比例 * 标记价格 - (进场价格 - 标记价格)
平仓支付
当您的仓位低于维持保证金比例时,任何人都可以平仓。链上的操作是自动创建一个与仓位大小相同的仅减仓市场订单。该市场订单的最差价格定义为无穷大或0,这意味着它将在订单簿中可用的任何价格上进行匹配。 执行仅减仓市场订单的支付不会直接给仓位所有者。相反,剩余资金的一部分将转移到清算机器人,另一部分将转移到保险基金。资金的分配比例由交易所参数中的LiquidatorRewardShareRate
定义。如果仓位的支付为负,即仓位的负PNL大于其保证金,则保险基金将覆盖缺失的资金。 还需注意,清算会在一个区块内立即执行,而不会等到其他订单匹配发生后。
资金支付
资金支付仅适用于永续市场,作为一种将交易价格与标记价格对齐的机制。它指的是在每个资金周期结束时(例如每小时),多头和空头之间交换的定期支付。当资金利率为正时,多头支付空头;当资金利率为负时,空头支付多头。
仓位大小 = 仓位数量 * 标记价格
资金支付 = 仓位大小 * 每小时资金利率(HFR)
HFR = Cap((TWAP((SyntheticVWAPExecutionPrice - 标记价格) / 标记价格) + 日利率) * 1/24)
SyntheticVWAPExecutionPrice = (Price_A * Volume_A + Price_B * Volume_B + Price_C * Volume_C) / (Volume_A + Volume_B + Volume_C)
A 是市场买入批次执行
B 是市场卖出批次执行
C 是限价匹配批次执行
资金支付通过修改累计资金(CumulativeFunding)值来应用于整个市场。每个仓位存储当前的累计资金作为累计资金入口(CumulativeFundingEntry)。后续的资金支付仅在仓位变动时应用,并可以通过以下公式计算:
资金支付
对于多头:FundingPayment ← PositionQuantity * (CumulativeFunding - CumulativeFundingEntry)
对于空头:FundingPayment ← PositionQuantity * (CumulativeFundingEntry - CumulativeFunding)
Margin' ← Margin + FundingPayment
CumulativeFundingEntry' ← CumulativeFunding
永续市场交易规范
仓位
交易者的仓位记录了交易者进入衍生品合约时的条件,定义如下:
仓位定义:
数量
进场价格
保证金
持仓数量
累计资金入口
举例说明,考虑以下在ETH/USDT市场的仓位:
数量 = -2
进场价格 = 2200
保证金 = 800
持仓数量 = 1
累计资金入口 = 4838123
该仓位代表在ETH/USDT市场中做空2张合约,保证金为800 USDT,进场价格为2200。持仓数量代表交易者的反向订单的仓位数量。累计资金入口代表该仓位上次更新时的累计资金值。
仓位对冲: 当一个新的普通订单与现有仓位的子账户匹配时,新仓位将是将现有仓位与新普通订单对冲后的结果。一个匹配的普通订单会产生一个仓位变化,定义为成交数量(FillQuantity)、成交保证金(FillMargin)和结算价格(ClearingPrice)。
将仓位变化应用于同方向的仓位:
进场价格' ← (数量 * 进场价格 + 成交数量 * 结算价格) / (数量 + 成交数量)
数量' ← 数量 + 成交数量
保证金' ← 保证金 + 成交保证金
将仓位变化应用于反向仓位:
进场价格 - 无变化
数量' ← 数量 - 成交数量
保证金' ← 保证金 * (数量 - 成交数量) / 数量
限价买单
限价买单是指以指定的价格购买一定数量的衍生品合约,并提供一定数量的保证金作为抵押。
限价卖单
限价卖单是指以指定的价格卖出一定数量的衍生品合约,并提供一定数量的保证金作为抵押。
匹配的仓位将扣除费用,这些费用取决于限价单是否作为做市单(maker order)或吃单(taker order)执行。
市价买单
市场买单是指以指定的最差价格购买一定数量的衍生品合约,并使用子账户的可用余额作为保证金抵押。
市场订单的处理器(Handler)和结束区块执行(EndBlocker)与限价买单(立即匹配的情况)的执行在概念上是相同的,因为交易者提供的保证金隐含地设定了一个最大价格限制,这一限制是由于初始的最低保证金要求所决定的。
市价卖单
市场卖单是指以指定的最差价格卖出一定数量的衍生品合约,并使用子账户的可用余额作为保证金抵押。
市场订单的处理器(Handler)和结束区块执行(EndBlocker)与限价卖单(立即匹配的情况)的执行在概念上是相同的,因为交易者提供的保证金隐含地设定了一个最低价格限制,这一限制是由于初始的最低保证金要求所决定的。
订单类型
BUY (1): 标准买单,按当前市场价格或设定的限价价格购买资产。
SELL (2): 标准卖单,按当前市场价格或设定的限价价格卖出资产。
STOP_BUY (3): 止损买单,当预言机价格达到或超过指定的触发价格时,转换为常规买
STOP_SELL (4): 止损卖单,当预言机价格降至或低于指定的触发价格时,转换为常规卖单。
TAKE_BUY (5): 止盈买单,当预言机价格达到或跌至指定的触发价格时,转换为常规买单。
TAKE_SELL (6): 止盈卖单,当预言机价格达到或超过指定的触发价格时,转换为常规卖单。
BUY_PO (7): 仅挂单买单。此订单类型确保订单只会被加入到订单簿中,而不会与已有订单匹配。它保证您将成为市场的“做市商”,而不是“吃单者”。
SELL_PO (8): 仅挂单卖单。与BUY_PO类似,确保您的卖单只会为订单簿提供流动性,而不会与已有订单匹配。
BUY_ATOMIC (9): 原子买单是一种市场单,立即执行,绕过频繁批次拍卖(FBA)。此类型适用于需要立即执行交易的智能合约。支付较高的费用,该费用在全球交易所参数中定义。
SELL_ATOMIC (10): 原子卖单类似于BUY_ATOMIC,它立即在当前市场价格下执行,绕过FBA。
仅减仓订单(卖出仓位)
限价买入仅减仓订单
限价买入仅减仓订单旨在通过指定数量的ETH(基础货币)减少现有的多头暴露。平仓时的支付将扣除相应的费用。
限价卖出仅减仓订单
限价卖出仅减仓订单旨在通过指定数量的ETH(基础货币)减少现有的空头暴露。平仓时的支付将扣除相应的费用。
Last updated