智用_AI
首页 / 指南 / GTC、IOC、FOK 订单时效

IOC、FOK、GTC 有什么区别,下单时该选哪个?

作者 秦深更新 2026-10-06约 9 分钟阅读
智用 AI 站点封面图,本文讲 GTC、IOC、FOK 三种订单时效在没有全部成交时各自怎么处理剩余部分

三种时效管的是同一件事:一张单发出去,没能立刻全部成交,剩下的那部分怎么办。GTC(Good 'Til Canceled)把剩下的留在盘口上继续等;IOC(Immediate or Cancel)当下能成多少就成多少,剩下的马上撤;FOK(Fill or Kill)要求当下一次全部成交,做不到就整张撤掉,一点都不成。

选哪个,看你能不能接受只买到一部分,以及有一张单留在盘口上没人管。两样都能接受,用 GTC。能接受只买到一部分、但不想留挂单,用 IOC。少一点都不要,用 FOK。你的限价够得着的量够一次吃完的时候,三种时效的结果一模一样,差别只在够不着或量不够时才出现。

订单没有立刻全部成交时,GTC、IOC、FOK 各自做什么

下单面板上的"时效"(英文 Time in Force,缩写 TIF)回答的是订单能活多久。美国金融业监管局 FINRA 的投资者教育文章 Trading Terms: Time Parameters and Qualifiers on Stock Orders 把这几种时效逐条写了定义。

GTC,一直有效直到取消。FINRA 的写法是:经纪商会在一段设定的时间里持续尝试执行这张单,除非你在那之前让它取消。放到撮合盘口上看,就是限价单里价格够得着的部分先成交,够不着的部分变成一张挂单留在那里,等后来的对手单。

IOC,立即成交否则取消。FINRA 给它起了个别名叫 take what you can get:马上能成交多少就成交多少,当下在合适价格上没有足够数量时,剩余部分被取消。IOC 允许只成交一部分,它不允许的是留下挂单。

FOK,全部成交否则取消。整张单要么立刻全部执行,要么完全不执行。别的订单可能只买到或卖出当下有的那一部分,这叫部分成交(partial fill),FOK 把这种可能排除了。

同一篇文章里还有一个 AON(All or None),容易和 FOK 弄混。AON 同样不接受部分成交,但它不要求"立刻":它会一直等,等到能一次全部成交,或者你取消、订单到期。如果你用的面板上两个都有,区别就在"等不等"。

同一张限价买单换三种时效,成交结果差多少

用一组数字算一遍。想买 10 个币,限价 100 USDT,这时卖盘从低到高是这样三档:

  • 99.8 USDT,挂着 3 个
  • 100.0 USDT,挂着 4 个
  • 100.2 USDT,挂着 5 个

限价 100 的意思是高于 100 的不买,所以第三档碰不到。够得着的只有前两档,3 + 4 = 7 个,比想买的 10 个少 3 个。三种时效从这里开始分岔:

时效立刻成交花费没成交的 3 个盘口上留下什么
GTC7 个3 × 99.8 + 4 × 100 = 699.4 USDT变成 100 USDT 的买单继续挂着一张 3 个的挂单,直到成交、你撤单或到期
IOC7 个699.4 USDT被取消什么都不留
FOK0 个0整张 10 个一起取消什么都不留

GTC 和 IOC 在下单那一刻买到的一样多,均价也一样(699.4 ÷ 7,约 99.91 USDT)。它们的差别在之后:GTC 还欠着 3 个的买入意图留在市场上,价格以后回到 100 就会接着成交;IOC 到此为止,想补那 3 个得重新下单。

FOK 一个都没买到,哪怕盘口上明明有 7 个符合你的价格。

再把限价改成 100.2 算一次。这回三档都够得着,一共 12 个,超过 10 个。成交是 3 个 99.8、4 个 100、3 个 100.2,合计 299.4 + 400 + 300.6 = 1000 USDT,均价正好 100。这种情况下 GTC、IOC、FOK 的结果完全相同,都是立刻买满 10 个,没有剩余部分需要处理。

所以在面板上纠结选哪个之前,先看一眼你的数量相对盘口深度有多大。下的量比你的限价够得着的那几档加起来小得多,时效选哪种对这一笔影响不大;量接近或超过够得着的深度,或者限价根本够不着盘口,时效才决定结果。

GTC、IOC、FOK 在加密平台和股票市场有哪些地方可能不一样

上面的定义来自证券市场。FINRA 那篇文章讲的是美国股票订单,页面上标的日期是 2024 年 6 月 4 日发布、7 月 17 日更新,这里引的是 2026 年 10 月的页面。加密平台沿用了同样的缩写,但缩写相同不保证细节相同,至少有三处要回到你用的那家去看。

一是 GTC 能挂多久。名字叫"直到取消",FINRA 却写明它不会无限期有效:经纪商一般会给这类订单设一个最长有效天数,往往是下单之后的许多个月。这是证券经纪商的做法。加密平台的 GTC 有没有上限、上限多长,只能看它自己的下单说明。

二是哪几种时效可选。FINRA 讲的是这些时效的含义,没有说每家都得提供。同一家平台里,不同订单类型的下拉框给出的选项可能不一样,网页、App 和接口之间也可能不一致。

三是不填的时候默认是哪个。这一点从金融行业通用的 FIX 协议里能看出为什么要留心。按 OnixS 网站上的 FIX 4.4 字段词典,TimeInForce 是 59 号字段,说明是"订单保持有效多长时间",取值用单个字符表示:0 是当日有效(Day),1 是 GTC,3 是 IOC,4 是 FOK,6 是指定日期前有效(Good Till Date)。同一页还写着:这个字段缺省时按 Day 处理。也就是说在这份规范里,不填时效就按当日(或当个交易时段)有效处理,没有人替你默认成 GTC。

你用的平台接口未必走 FIX,参数可能是字符串,默认值由它自己定。FIX 这一条值得记住的地方在于:默认值是写在文档里的一条规定,换一份文档就可能换一个答案,下单前查一次。

用机器人或接口下单,时效填错了会怎样

手动下单时,没成交的部分你自己看得见,撤不撤当场决定。程序没有这个机会。它发出一张单之后,接下来的每一步都建立在"这张单现在是什么状态"上,时效填错,它对状态的判断就跟着错。

填错的后果按时效分开看。

该用 GTC 的地方用了 IOC 或 FOK。网格这类策略靠的是把买单卖单提前挂在各个价位上等行情过来。挂单要能留在盘口才有意义,换成 IOC,价格没到的单发出去就被取消,一张也挂不住。

IOC 的取消被当成下单失败。回到前面的算例,IOC 买到 7 个之后,这张单的结局是"剩余 3 个已取消"。如果程序只看最终状态里的"取消"两个字,就可能判定这次没买成,再发一张 10 个的单。重发的这张只要成交,买到的就超过 10 个;全成的话,账户里是 17 个。

程序收到"已取消"时,先读这张单的已成交数量。IOC 和 FOK 的取消是时效按设计工作的正常结果,不等于请求出错。IOC 被取消的单可能已经成交了一部分,该补多少要用"想买的数量减去已成交数量"来算,不能按原数量重发。状态字段有哪几种取值、部分成交后被取消用哪个值表示,以你那份接口文档的订单状态表为准。

FOK 反复被整张取消后不停重试。FOK 在深度不够时一个都不成,程序如果把它当作偶发失败立刻重发,盘口没变,结果也不会变,只会把接口的调用配额越用越少。比较稳的写法是:FOK 没成交就把它当成一条信息(此刻这个价位凑不齐这么多),交给策略决定是减少数量、放宽价格还是放弃,不要原样重发。

以为用了 IOC,实际是 GTC。参数没填,接口按自己的默认值处理,而默认值可能就是 GTC;或者界面改版后选项顺序变了。程序以为没成交的部分已经撤掉,实际上有一张挂单留在盘口。

GTC 挂单忘了撤会怎样

GTC 的风险全在"忘了"上。挂单留在盘口期间,它代表的是你下单那一刻的判断,行情和你的想法都可能已经变了。价格某天回到挂单价,它照样成交,那时你未必还想要这笔仓位。

有几种情形值得专门想到:

  • 部分成交后剩下的尾巴。像算例里那 3 个,下单当时你看到"成交 7 个"就去忙别的了,剩下的 3 个还在 100 USDT 等着。
  • 停掉机器人但没撤它的单。停止策略和撤销它挂出去的委托是不是同一个动作,各家做法可能不同。停完之后去当前委托列表里看一眼还剩什么。
  • 挂单依据的信号后来没了。如果挂单价是照某个指标信号定的,而这个指标在历史图和实时行情里算出的信号不一样,图上的信号挪了位置或者消失了,挂单却还在。这类情况见 指标重绘为什么会让信号在实盘里消失。

挂单会不会一直占着你的可用余额,看资产页里"可用"和"冻结"两栏的变化就知道。如果占着,忘掉的 GTC 单还有一层代价:这部分钱别的策略用不了。

建议给自己定一个固定动作:每次停策略、每次改变主意之后,打开当前委托列表从头翻到尾。用程序下单的,让程序在启动时先把账户里现有的挂单全部拉回来核一遍,对不上的先停下来。

怎么查你用的平台实际支持哪几种时效

缩写的含义可以从证券市场的定义里学,具体到某一家支持什么,只有它自己的页面和文档说了算。

四步核实

第一步,打开限价单的下单面板,找时效选项,它可能写成"时效""有效期"或 TIF,面板上没看到就展开高级选项再找。把下拉框里出现的选项逐个记下来,再换到市价单和条件单各看一次,选项可能变少。第二步,到帮助中心搜 Time in Force 或直接搜 GTC,找到讲订单时效的那一页,看三件事:GTC 有没有最长有效期、IOC 和 FOK 适用于哪些订单类型、部分成交后被取消的单在订单历史里显示成什么状态。第三步,用接口的话,在下单接口的参数表里找到时效参数,记下允许的取值、不填时的默认值,再翻到订单状态的取值表。第四步,用平台允许的最小数量各下一张限价买单验证:限价设得明显低于当前卖一价,让它当下成交不了,按定义 GTC 应该留在当前委托里,IOC 和 FOK 不该留下挂单,去历史委托里看它们各自显示成什么状态、已成交数量是多少。验证完把那张 GTC 撤掉。

帮助页和接口文档说法对不上时,以你下单走的那个入口对应的文档为准:手动下单看帮助页,程序下单看接口文档。两边都没写清楚的,第四步的小额验证结果就是答案,把看到的状态和数量记在策略的备注里,平台改版后再验一次。

接着读:程序挂出去的单在断线之后会怎样、重连后为什么要先对账,写在 交易机器人不下单、报错怎么办:九类故障先查什么 里;算例里的盘口数字换成真实行情时,你看到的价格和程序拿到的价格可能有出入,原因见 行情价为什么各家不一样。