永续合约面试手册 | 油条TV - Web3 与 AI 开发社区
← 返回
永续合约面试手册
Web3 / AI 笔记 · 1 小时前
写一篇
适用于交易所、衍生品、量化交易、撮合引擎、清算与风险平台相关岗位。
🔴:最高优先级,面试高频且容易被追问
🟡:应掌握原理与基本计算
🟢:拓展内容,用于拉开回答差距
用户下单
→ 前置风控与保证金检查
→ 撮合成交
→ 更新仓位、成交均价与手续费
→ 计算未实现盈亏和账户权益
→ 资金费率定期结算
→ 标记价格触发风险检查
→ 追加保证金或强制平仓
→ 保险基金 / ADL 处理穿仓
撮合 :决定谁和谁、以什么价格成交。
清算 :处理成交后的账户、仓位、手续费和资金变化。
风控 :判断账户能否继续交易以及何时强平。
资金费率 :让没有到期日的永续合约长期锚定现货或指数价格。
永续合约没有到期交割,因此需要通过资金费率让合约价格锚定现货。交易进入系统后,先经过保证金和限额检查,再由撮合引擎按价格优先、时间优先成交。成交结果进入清算系统,更新仓位、成本、手续费和保证金。风险系统持续使用标记价格计算账户权益和维持保证金,当保证金不足时触发撤单、减仓或强平;若强平后仍发生穿仓,则由保险基金或 ADL 承接尾部风险。
买单按价格从高到低排列。
卖单按价格从低到高排列。
最高买价是 Best Bid,最低卖价是 Best Ask。
两者之差是 Spread。
常见规则是价格优先、同价时间优先(FIFO) 。
卖盘:101 元 5 张;100 元 3 张
买盘: 99 元 4 张; 98 元 6 张
先以 100 元成交 3 张。
再以 101 元成交 3 张。
订单全部成交。
成交价通常取订单簿中已有 Maker 订单的价格,而不是新进入的 Taker 限价。
类型 含义 高频追问 Limit 指定最差可接受价格 是否保证成交? Market 立即按盘口成交 如何限制滑点? IOC 立即成交可成交部分,其余取消 与 FOK 有何区别? FOK 必须立即全部成交,否则全部取消 是否允许部分成交? Post Only 只做 Maker 若会立即成交如何处理? Reduce Only 只能减少仓位 如何处理并发减仓单? Stop 达到触发条件后生成真实订单 使用什么价格触发?
用户持有多仓 10 张,同时提交两笔各 10 张的 Reduce Only 卖单。若只在下单时分别检查,两笔都可能通过,最终平掉 20 张并反向开空。
为减仓订单预占“可平数量”。
将已有未成交减仓订单纳入校验。
成交、撤单或仓位变化时重新裁剪订单数量。
在最终清算层保证仓位不会越过零点。
API Gateway
→ 身份与基础校验
→ 前置风控
→ Sequencer(全序)
→ Matching Engine
→ 成交事件流
→ Clearing / Position / Market Data
单交易对内顺序确定。
低延迟、高吞吐。
不丢单、不重复成交。
支持快照、日志重放和故障恢复。
避免锁竞争。
保证价格和时间优先级的确定性。
方便日志重放与状态恢复。
降低并发修改订单簿造成的争议。
扩容通常通过交易对分片,以及把行情、持久化和清算异步化实现,而不是并发修改同一本订单簿。
价格层:平衡树、跳表或有序映射。
同价格订单:队列或双向链表。
orderId → order node:哈希表,支持快速撤单。
最优买卖价:树的首尾节点或额外指针。
生产系统通常会增加最大滑点、价格保护带和最大成交名义价值,或者将市价单转化为带保护价的 IOC 限价单。
客户端订单号或幂等键。
Sequencer 分配唯一序号。
下游按事件 ID 去重。
客户端重试时返回原请求结果。
超时不代表下单失败。客户端应通过客户端订单号查询最终状态;重试时系统返回原结果,而不是创建第二张订单。
永续合约没有到期日,无法依靠交割使价格回归现货,因此需要资金费率机制:
永续价格明显高于现货时,通常多头向空头支付。
永续价格明显低于现货时,通常空头向多头支付。
支付激励套利者建立反向仓位,使价格回归指数附近。
资金费通常是交易者之间的转移,交易所原则上不是资金费的收益方。
资金费用 = 持仓名义价值 × 资金费率
持仓名义价值 = 持仓数量 × 结算价格
例:持有 2 BTC 多仓,结算价 50,000 USDT,资金费率 0.01%:
名义价值 = 2 × 50,000 = 100,000 USDT
资金费用 = 100,000 × 0.01% = 10 USDT
若费率为正且规则规定多头支付,则多头支付 10 USDT,空头收取。
Funding Rate ≈ Premium Component + Interest Component
Premium:反映永续相对指数价格的溢价或折价。
Interest:反映基础资产与计价资产的利率差。
最终费率通常还有上下限。
溢价指标常使用 TWAP、冲击买卖价和异常值过滤,而不是某一瞬间的最新成交价。
不能。它只提供经济激励;单边行情、套利资金不足、借币成本、跨市场限制和流动性不足仍会造成偏离。
取决于平台的持仓快照规则。重点是明确结算边界、成交与结算的先后顺序,并确保事件顺序确定且可重放。
基差可能继续扩大。
资金费率可能变化。
存在强平、滑点、手续费和借贷成本。
还存在跨平台信用、转账和提现风险。
价格 含义 主要用途 Last Price 最新成交价 行情展示、部分条件单触发 Index Price 多个现货市场形成的参考价格 公允价值基准 Mark Price 指数价格经基差等因素调整后的合理价格 盈亏计算、风险判断和强平
最新成交价容易受到小额成交操纵、瞬时流动性枯竭、异常插针和单一市场故障影响。若直接用于强平,攻击者可能用较小资金触发大量账户清算。
数据源超时和陈旧价格。
单一成分市场停机。
异常偏离与权重调整。
稳定币或法币偏离。
有效成分不足时的降级规则。
指数价格不能只做简单平均。应检查成分价格的新鲜度和偏差,对异常成分临时剔除并重新归一化权重;有效成分不足时进入预定义的保护或降级状态。
多仓未实现盈亏 = 数量 ×(标记价格 - 开仓均价)
空仓未实现盈亏 = 数量 ×(开仓均价 - 标记价格)
UPnL = signedPosition × (markPrice - entryPrice)
Equity = Wallet Balance + Unrealized PnL
Available Margin
= Equity - Initial Margin - Order Margin - 其他占用
先以 50,000 买入 1 BTC,再以 52,000 买入 1 BTC:
平均开仓价 = (1 × 50,000 + 1 × 52,000) / 2
= 51,000 USDT
已实现盈亏 = 0.5 × (53,000 - 51,000)
= 1,000 USDT
回答前应说明平台采用移动加权平均、FIFO 还是其他成本模型。
模式 特点 主要风险 逐仓 Isolated 单仓位使用独立保证金 该仓位保证金耗尽时强平 全仓 Cross 多个仓位共享账户权益 单个仓位可能消耗整个账户余额
组合保证金还可能考虑仓位对冲、相关性、压力场景和集中度附加保证金。
账户权益 ≤ 维持保证金 + 预计平仓费用 + 风险缓冲
Maintenance Margin
= Position Notional × MMR - Deduction
大仓位需要更高的维持保证金率,因为更难快速平仓、市场冲击和尾部损失也更大。
冻结账户或禁止新增风险。
撤销增加风险的挂单,释放订单保证金。
重新计算账户风险。
尝试部分减仓或分层清算。
将剩余仓位移交清算引擎。
使用限价、分片和时间窗口平仓。
负余额由保险基金承接。
保险基金不足时触发 ADL 或损失分摊。
开仓挂单会占用保证金。撤单后可能释放足够保证金,使账户重新满足要求;但 Reduce Only 等降低风险的订单不一定需要撤销。
强平价格 :账户达到维持保证金要求、开始被清算的价格。
破产价格 :账户权益接近零或保证金完全耗尽的价格。
两者间的缓冲用于支付平仓成本并保护系统。
计算精确强平价还需要知道手续费、资金费、风险档位、标记价格规则及保证金计价方式。题目信息不足时,不应声称存在唯一精确答案。
保险基金 用于吸收强平后的负余额,资金可能来自清算剩余、平台注资或特定费用。
**ADL(自动减仓)**在穿仓损失无法由保险基金覆盖时,从盈利对手方中选择账户自动减仓。排序通常考虑盈利程度、有效杠杆、仓位规模或风险贡献。
ADL 的代价是盈利用户的仓位可能在非主动情况下被关闭。
账户状态、权限与余额。
初始保证金和最大名义价值。
最大仓位、价格保护带和频率限制。
Reduce Only 与自成交保护。
风险档位检查。
指数价格和标记价格监控。
实时权益与维持保证金。
大户集中度和市场流动性。
清算队列与保险基金覆盖水平。
订单、成交、仓位和余额对账。
负余额与异常成交检查。
压力测试与风险参数回溯。
每笔成交的买方数量等于卖方数量。
资产不能凭空创造或销毁。
手续费和资金费的借贷双方可以对账。
仓位变化等于成交、清算等事件的累计结果。
同一事件不能被清算两次。
账本余额等于历史账务分录汇总。
日志重放后的状态与故障前一致。
典型竞态:余额只够一笔订单,用户并发提交两笔;两个风控实例同时读取旧余额,导致两笔都通过。
预占保证金。
单账户事件按顺序处理。
原子条件更新。
账户命令进入同一消息分区。
使用版本号或乐观并发控制。
清算层设置最终安全边界。
指数成分市场集体异常。
撮合正常但清算延迟。
大量账户同时触发强平。
清算订单冲击薄弱盘口。
保险基金快速下降。
稳定币脱锚。
常见措施:动态限仓、价格保护带、分段清算、清算节流、熔断或只减仓模式、多源指数和压力测试。
单向持仓还是双向持仓?
线性合约还是反向合约?
逐仓、全仓还是组合保证金?
支持哪些订单类型?
目标 TPS、交易对数量和延迟是多少?
一致性、可用性和恢复目标是什么?
API / Authentication
Order Management
Pre-trade Risk
Sequencer
Matching Engine
Market Data
Clearing & Ledger
Position Service
Funding Service
Mark / Index Price
Liquidation Engine
Insurance Fund / ADL
Reconciliation & Audit
OrderAccepted
OrderRejected
OrderCancelled
TradeExecuted
PositionUpdated
FundingSettled
MarginChanged
LiquidationStarted
LiquidationFilled
ADLExecuted
每个事件至少包含唯一事件 ID、全局或分区序号、账户和订单标识、时间以及可审计的计算输入与结果。
单订单簿由 Sequencer 建立全序。
单账户资金和仓位事件保持顺序。
跨服务使用事件驱动和幂等消费。
资产账本使用复式记账或等价平衡模型。
使用周期性快照与追加式日志。
从快照加载后按序重放。
主备切换时防止双主和重复出单。
永续没有到期交割,通过资金费率锚定现货;交割合约在到期日结算,基差会随到期临近自然收敛。
不一定。杠杆首先表示保证金相对名义敞口的比例;是否存在真实借贷取决于产品和账户模型。
全仓账户中,其他仓位亏损可能侵蚀账户权益;资金费、手续费、抵押品贬值或风险参数变化也可能导致保证金不足。
已有挂单提供流动性,是 Maker;新进入并吃掉流动性的订单是 Taker。
已成交部分不可撤销,只取消剩余数量,并释放对应订单保证金。
不一定。常由条件单服务监听触发价格,触发后向订单系统提交真实订单。重点是可靠性、幂等性和触发顺序。
止损尚未触发。
触发后订单没有成交。
盘口跳空或流动性不足。
止损触发价与强平使用的标记价格不同。
强平条件先于止损满足。
巨大市价单可能造成严重滑点,引发更多强平,形成清算瀑布,因此通常需要分片、限价、节流和流动性评估。
不一定。真正的清算必须在订单簿成交,风险还取决于可成交深度和市场冲击成本。
Q:数据库显示订单成功,但撮合引擎中没有订单怎么办?
应明确权威状态源:订单状态由有序命令和撮合事件驱动,数据库作为持久化视图;通过序号、事件日志和对账发现差异。
Q:消息队列能实现 Exactly Once 吗?
端到端更现实的目标是 At-least-once 加幂等处理。资金系统还需要唯一业务键、账本约束、事务边界和对账,不能只依赖消息队列语义。
账户余额 10,000 USDT,以 50,000 买入 1 BTC,标记价格为 48,000:
未实现盈亏 = 1 × (48,000 - 50,000) = -2,000 USDT
账户权益 = 10,000 - 2,000 = 8,000 USDT
判断是否强平还需要维持保证金率、其他持仓和挂单、预计手续费及资金费。
持有 5 ETH 多仓,结算价格 3,000 USDT,资金费率 -0.02%:
名义价值 = 5 × 3,000 = 15,000 USDT
资金费绝对值 = 15,000 × 0.02% = 3 USDT
若负费率表示空头向多头支付,则多头收到 3 USDT。
假设账户权益为 2,500,维持保证金为 2,000,平台定义:
Margin Ratio = Maintenance Margin / Equity
= 2,000 / 2,500
= 80%
若强平阈值为 100%,账户尚未触发,但已处于高风险状态。不同平台可能采用相反定义,回答前应确认公式。
标记价格、指数价格和最新成交价的区别。
资金费率如何锚定现货,以及为什么不是无风险套利。
账户权益、未实现盈亏、初始保证金和维持保证金的关系。
强平价、破产价、保险基金和 ADL 的关系。
完整强平流程:撤单、重算、部分清算、保险基金、ADL。
价格优先、时间优先以及 Maker/Taker 逻辑。
撮合的确定性、Sequencer、快照和日志重放。
下单风控与清算之间的一致性。
幂等、重复消息和客户端超时重试。
账本、仓位的关键不变量和对账机制。
线性合约未实现盈亏。
加权开仓均价和部分平仓盈亏。
资金费用。
初始保证金和维持保证金。
简化强平条件。
大仓位风险档位。
反向合约的盈亏公式。
组合保证金和压力测试。
指数异常值处理。
清算市场冲击模型。
稳定币脱锚风险。
多交易对与多账户分片。
双主防护和灾难恢复。
ADL 排序的公平性。
给出定义
→ 解释机制
→ 提供数字例子
→ 补充异常场景
→ 说明系统实现与风险边界
这种结构可以同时体现业务理解、计算能力、系统设计能力和风险意识。