Maker Protection

最近更新 2026年9月30日

Maker Protection是一种短暂的固定延迟机制,适用于可能吃单的订单,覆盖Kraken Derivatives部分市场。它为挂单方的挂单提供短暂的响应窗口,使其在被对手方成交前能够对新信息作出反应。Maker Protection已于2026年9月24日正式上线。

在启用Maker Protection的市场中,所有可能吃单的订单操作都会在到达撮合引擎前被短暂搁置。仅挂单(Post-only)的下单操作及所有撤单请求不受此限制。

  • •

    延迟时长:上线时为20毫秒,最长不超过100毫秒。各市场的延迟时长以makerProtectionMillis字段发布。

  • •

    适用市场:仅限部分衍生品(合约)市场,现货市场不受影响。

  • •

    一致性:REST、WebSocket和FIX的行为完全一致。

  • •

    公平性:延迟对所有客户一视同仁,不设任何账户豁免。

  • •

    如何规避:以Post-only方式提交订单即可。未设置Post-only的限价订单即便最终会挂在盘口上,也仍会被搁置——延迟取决于订单类型,而非成交结果。

被搁置的订单在释放时才进入排队,而非在收到时入队。

权威数据来源是GET /instruments和GET /trading/instruments接口中的makerProtectionMillis字段。若某市场未启用Maker Protection,该字段将完全缺失。字段缺失与字段值为零含义相同:均表示无延迟。

  • •

    上线时(2026年9月24日)共覆盖59个市场。

  • •

    流动性最高的10个线性永续市场被排除在外,以确保主流币种的吃单流不受影响。

  • •

    2026年9月24日之后上线的所有永续合约,自上线起即启用Maker Protection。

  • •

    新增市场将在每次维护窗口前提前在status.kraken.com上公告。

操作

是否延迟?

限价订单、IOC、FOK或市价订单

是

Post-only订单

否

修改可挂单且可吃单的订单

是

修改挂单中的Post-only订单

否

止损、止盈或追踪止损下单

否

止损或止盈触发后发出的订单

是,除非触发的订单为Post-only

含新非只挂单父订单的订单组

是

挂载至现有订单的订单组

否

撤单、全部撤单、定时全部撤单

否

大宗交易及其他场外成交流量同样豁免。

公开API中不存在“持有中”订单状态。Maker Protection体现为激进订单的额外延迟,设计系统时需考虑以下特性:

  • •

    验证在释放时执行。杠杆、价格限制及市场状态均在延迟结束时检查,而非提交时。提交时有效的订单,仍可能被拒绝。

  • •

    完整窗口期始终执行。若使订单具有攻击性的流动性在窗口期内消失,订单仍需等满延迟时间。持有中的订单不会被重新评估。

  • •

    订单按序释放。持有订单按先进先出原则释放,后提交的订单不会超越先提交的订单。

  • •

    延迟时间“至少”为配置窗口时长。由止损或止盈触发器触发的订单,需等到撮合引擎处理下一个事件时才会释放,因此在交易清淡的市场中,等待时间可能明显超过配置的窗口时长。

  • •

    请勿自行测量延迟时间。请直接读取makerProtectionMillis,因为该值随时可能变更。

持有中的订单尚未进入订单簿,也不保证最终能成功进入。在窗口期内,订单可能受到与您交易无关的事件影响:

  • •

    市场已暂停:订单将以marketSuspended状态被拒绝。

  • •

    账户触发风险控制或被强制平仓:订单将以CANCELLED_WHILE_HELD状态被拒绝。

  • •

    杠杆或价格限制对您不利:订单可能在释放时被拒绝。

  • •

    修改杠杆或保证金模式:在有请求处于持有状态期间,此类修改将被拒绝。请等持有请求释放后再重试。

若在提交订单约一个窗口期后收到拒绝通知,通常并非因为订单本身格式有误,请查看返回的状态码。

持有期间可随时撤单,撤单操作从不延迟。但撤单无法撤回已发出的攻击性指令。撤单仅取消该订单在订单簿上挂单的权利,无法免除其成交义务。

具体结果取决于持有的请求类型:

  • •

    限价订单:撤单请求被确认后,订单以即时或取消(IOC)方式释放,尽可能成交,剩余部分自动丢弃。您将收到两条响应:撤单响应,以及约一个窗口期后的订单响应。若订单在释放时无法成交,REST v3返回iocWouldNotExecute。

  • •

    IOC、FOK或市价订单:无可闪兑内容,撤单返回ORDER_NOT_FOUND,订单仍将在释放时落单。

  • •

    修改挂单指令:在窗口期内,原订单以原价格保持活跃。撤单请求被吸收,订单在释放时按修改内容重新定价,并不再作为挂单指令。

  • •

    订单组:若父订单处于挂起状态,则整个订单组在延迟窗口内无法撤销,窗口结束后自动生效。请在订单组生效后再执行撤销。

  • •

    死亡开关(cancelallordersafter):处于挂起状态的订单将以相同方式转换处理。死亡开关不会撤回已挂起的订单。

若需确保既无挂单留存、也无新订单成交,请等待延迟窗口结束(最长100毫秒),再执行撤销操作。

挂起订单释放时,无论账户使用何种自成交策略,系统将自动撤销与之匹配的所有挂单指令。此规则适用于整个账户树,包括主账户、同级账户及子账户。

  • •

    相关挂单指令将以CANCELLED_BY_SELF_TRADE为原因被撤销,释放后的订单正常成交执行。

  • •

    FOK订单及询价(RFQ)除外,仍按已配置的策略正常执行。

  • •

    从未进入挂起状态的订单不受影响。

并发挂起数量限制。同一时间最多可挂起250个请求。超出上限的请求将被拒绝,并以触达订单数量上限的方式上报(REST v3返回tooManyOrders,REST v4返回TOO_MANY_ORDERS,行情数据及SBE返回ORDER_LIMIT_EXCEEDED)。该上限限制的是同时存在的挂起数量,而非发单速率。主账户与子账户共享此上限,待早前挂起请求释放后可安全重试。

账户限额在挂起时确定。为防止账户设置在延迟窗口内被修改,部分限额在挂起时即已结算,而非等到释放时:

  • •

    当前委托数量限额:若已达上限,订单仍会被接受,但将被转换,使其无法以挂单形式停留在订单簿。

  • •

    最大仓位:提交时系统将为订单预留相应额度。此时被拒绝的订单,即便后续释放了额度也仍维持拒绝状态;已预留额度对后续订单不可用,后续订单将以MAX_POSITION_EXCEEDED为由被拒绝。

  • •

    客户订单ID:挂起期间,系统将为该请求保留对应的客户订单ID。在窗口期内重复使用该ID提交新订单,将立即被拒绝并返回clientOrderIdAlreadyExist。请等待窗口期结束后再复用ID,或通过订单ID处理进行中的撤销操作。

批量订单不作为整体挂起,延迟窗口从批次中首条吃单指令开始计算。

  • •

    首条主动吃单指令之前的指令立即发送。

  • •

    首条主动吃单指令及其之后的所有指令,共同等待延迟窗口结束。

  • •

    撤销指令始终立即发送。在同一批次中,位于目标订单之后的撤销指令可接管该订单的挂起名额;位于其之前的撤销指令则无法做到。

如需确保被动指令无延迟进入订单簿,请将其排在批次中所有主动吃单指令之前。

REST。连接将在延迟期间保持,响应中包含最终处理结果。请将客户端超时时间设置为明显高于延迟窗口的值。由于窗口不超过100毫秒,单一超时预算可覆盖所有市场。若在主动吃单订单中设置了processBefore,须将挂起时间纳入考量,否则该订单每次都会以wouldProcessAfterSpecifiedTime被拒绝。

WebSocket。订单挂起期间不推送任何消息。订单释放后,系统将正常推送open_orders和fills事件,时间约比之前延迟一个窗口期。

FIX。请求挂起时,网关会发送一条告知性ExecutionReport:新订单挂起时为Pending New(39=A),修改订单时为Pending Replace(39=E)。该报告仅供参考,并非终态。挂起的新订单尚无OrderID,因此在窗口期内ClOrdID是追踪订单的唯一标识。正式确认将在释放后返回。

在启用Maker Protection的市场中,订单组任意一腿成交后,请及时核查成交记录,切勿假定另一腿已自动取消。

自2026年8月27日起,Maker Protection已在客户UAT环境的上线市场中启用,延迟窗口同为20毫秒,持有上限同为250个,与生产环境一致。如需获取UAT访问权限,请联系您的客户经理。建议测试以下场景:

  • •

    在持有期间取消订单,以及处理此后仍然成交的情况

  • •

    在持有修改请求期间取消订单

  • •

    即使已设置REJECT_TAKER,您的挂单指令仍可能被已释放的订单取消

  • •

    处理下单时触发的tooManyOrders错误并进行重试

  • •

    在同一窗口内重复使用客户订单ID

  • •

    批量指令的排序,以及客户端超时设置高于该市场makerProtectionMillis值的情况