第 04b 章 止损单、跳动敏感订单与其他订单指令
对应 Harris《Trading and Exchanges》第 4 章后半部分(4.5–4.14 节)。上一章讲了市价单和限价单这两种最基本的订单,以及“限价单是期权”的核心思想。本章继续讲带触发条件的订单(止损单、触价市价单)、跳动敏感订单、经纪人自由裁量单,以及有效期、数量、价差、显示、替代、结算等附加指令。重点是一个判断标准:每种订单是在提供流动性还是在获取流动性,它让价格更稳定还是更不稳定。
学习目标
读完本章,你应当能够:
- 区分止损单、限价单、止损限价单和触价市价单(MIT),说出各自何时激活、以什么价格成交。
- 解释止损单为什么会加速价格变化,以及动量交易者与逆向交易者对价格稳定性的不同影响。
- 掌握上跳、下跳、零上跳、零下跳的分类,理解跳动敏感订单为什么“提供流动性”,以及最小价格变动单位如何影响它的吸引力。
- 熟悉有效期指令(Day、GTC、IOC、FOK、MOO、MOC 等)和数量、显示、价差、替代、特别结算指令的定义与用途。
- 能用订单簿模拟展示止损单的连锁触发,并用跳动规则对成交分类。
读前导读
这一章在解决什么问题。 上一章讲了两种最基本的订单和“限价单 = 期权”的思想。这一章是一张“订单指令词典”:止损单、止损限价单、MIT、跳动敏感订单、不受约束单,以及 Day、GTC、IOC、FOK、MOC、冰山单等附加条件。CFA 一级里你见过其中大部分名字,这里的新东西是一把统一的尺子:每一种指令,是在给市场提供流动性还是从市场拿走流动性?它让价格更稳定还是更不稳定? 用这把尺子,止损单和 MIT 看似都是“触发后变成市价单”,作用却正好相反:止损单顺着价格运动方向交易,助涨助跌;MIT 逆着方向交易,稳定价格。
对量化交易者,这一章有两个直接用途。一是回测里的止损不能按止损价成交:止损单激活后是市价单,往往在流动性最差的时候成交,止损聚集时还会连锁触发。二是**跳动规则(tick test)**是判断成交方向的基础工具,订单流不平衡类因子都要用到它。
需要先想起来的数学。 本章几乎没有公式,只需要两样东西。
- 符号函数与“最近一个不同价格”:跳动分类本质上是看 \(\text{sign}(P_t-P_{t-1})\),即价格差的正负号;差为 0 时,沿时间往回找,直到找到一个非零的差,用它的符号。例如 10.00, 10.01, 10.01, 10.01:第二笔差为 \(+0.01\)(上跳),后两笔差为 0,往回找到 \(+\),所以是零上跳。
- 期货的持有成本关系:\(F=S\,e^{(r-q)T}\),用来理解价差单例子里远月为什么升水。这是 CFA 衍生品的内容;若对指数函数生疏,可看 第 00 册第 04 章 级数与收敛 中 \(e\) 与指数对数部分,以及 第 00 册第 03 章 积分 的连续复利部分。
怎么读这一章。 必读 4.5(止损单,尤其 4.5.3 止损与流动性)、4.6(MIT,对照表 4-2)、4.7(跳动敏感订单)。4.8 不受约束单与第 02 章 Bob 的故事对照读。4.9–4.11 是指令清单,第一次读可以只看加粗的定义和“A 股对照”,以后当工具书查。量化实战的止损连锁模拟值得读懂,练习第 10 题能帮你得出“止损量与订单簿深度之比决定连锁是否发生”这一结论。
4.5 止损单
4.5.1 定义与用途
止损指令(stop instruction)让订单在价格达到交易者指定的止损价(stop price)之前不执行:想在价格涨到止损价之后才买,或跌到止损价之后才卖时使用。附有止损指令的订单称止损单(stop order)。止损指令可以附在任何订单上,最常见的是附在市价单上。一旦激活,止损单就和普通订单一样处理,即使价格又回到止损价另一侧,它仍然有效。
最常见的用途是在价格不利时限制亏损,称止损单(stop loss order)。原书例子:Stan 以每磅 80 美分买入 10 张棉花期货,同时下一张止损价 70 美分的 10 张市价卖单。棉花跌到 70 或以下时,经纪人立即以当时的最优价卖出。
成交价未必是止损价。如果一条“收成超预期”的消息让棉价从 72 迅速跌到 67,Stan 可能只能以 66.90 卖出。想保证以特定价格成交,必须买期权:Stan 想保证以 70 卖出,就得买行权价 70 的看跌期权,把低于 70 卖出的风险转移给期权卖方。这种转移在经济上合理的前提是:期权卖方是比 Stan 更好的交易者,或者因为其他原因愿意做空看跌期权。
金融直觉:止损单和保护性看跌期权(protective put)目标相同,都想把下跌损失截在某个价位,区别在于“跳空风险”由谁承担。看跌期权的行权价是合同保证的,价格从 72 跳到 67,你仍按 70 卖出,跳空的损失由期权卖方承担,这份保障就是权利金的价格。止损单不收费,但只保证“跌到 70 后尽快卖”,跳空的损失自己承担。所以止损单可以看作一种不付权利金、但在最需要时可能失灵的“穷人版看跌期权”。1987 年股灾中的“组合保险”(portfolio insurance)就是用动态卖出期货来复制看跌期权,本质上是大规模的止损单,正是下一节所说的助跌机制。
4.5.2 止损单与限价单
新手常混淆两者,因为它们都带一个价格条件。区别在于价格的用途:
- 止损指令:市场价格达到或穿过止损价时激活订单;
- 限价单:只能以等于或优于限价的价格成交。
比较两张卖单:止损价 5 欧元的市价卖单通常在价格高于 5 欧元时提交,跌到 5 欧元时激活成为普通市价单,以当时的最优价成交;限价 5 欧元的卖单通常在价格低于 5 欧元时提交,只有价格涨到 5 欧元或以上才能成交。
给限价单附上止损指令,需要两个价格:止损价决定何时激活,限价决定成交条件,合称止损限价单(stop limit order)。原书例子:只想在 Ashton Technology Group 涨到 10 美元时买、且只在不高于 10.37 时买——“Buy 100 ASTN, 10 stop, 10.37 limit”。
两者也有共同点:都让交易者事先告诉经纪人未来愿意交易的条件,不必亲自盯盘。
4.5.3 止损单与流动性
止损单加速价格变化。价格变化常常是因为一方需求的流动性超过了可得的流动性;这种变化触发止损单后,止损单又进一步加剧单边需求——上涨时增加买压,下跌时增加卖压,恰恰在流动性最稀缺的时候需求流动性。交易者称之为给市场增加动量(momentum)。
据此可以把交易者分为两类:
- 动量交易者(momentum traders):价格上涨时买、下跌时卖,使价格不稳定。常通过止损单实施,或自己盯盘下普通订单。
- 逆向交易者(contrarian traders):价格下跌时买、上涨时卖,使价格稳定。可以用普通限价单实施。
金融直觉:这组划分和 CFA 组合管理里“再平衡策略”的分类一一对应。固定比例再平衡(如股债 60/40)在股票下跌后买入股票,是逆向交易,相当于卖出期权、提供流动性,在震荡市里获利。CPPI 和组合保险在下跌后卖出风险资产,是动量交易,相当于买入期权、需求流动性,在单边市里受益。如果市场上动量型资金占主导,下跌时没人接盘,价格会跌得更深;逆向型资金越多,市场越稳。这也是为什么监管者对止损单和程序化追涨杀跌格外关注。
止损单和动量策略的不稳定作用令监管者、交易者和交易所担忧,第 11 章(订单预期者)、第 12 章(操纵)、第 28 章(极端波动)会继续讨论。本章量化实战部分用订单簿模拟展示止损单的连锁触发。
4.6 触价市价单(MIT)
触价市价单(market-if-touched order, MIT)在价格触及预设的触发价(touch price)时激活成为市价单。它与止损单方向相反:价格跌到触发价时买,涨到触发价时卖。
MIT 与限价单相似(都是跌时买、涨时卖),区别在于激活后成为市价单,以最优可得价格成交;限价单则必须在限价或更优价格成交,否则不成交。想确保价格到达触发价时一定成交的人用 MIT。MIT 很少见,多数人想等价格朝有利方向移动时用的是限价单。
MIT 的流动性性质有些微妙:狭义上它需求流动性(触发后成为市价单);广义上它提供流动性——它为那些把价格推到触发价的交易者提供了对手,降低了他们的价格冲击。因为逆着价格运动方向交易,MIT 稳定市场。
白话解释:“狭义”和“广义”的区别在于看哪一刻。在触发之后那一瞬间,MIT 是一张市价单,确实在吃别人的挂单,这是狭义。但把时间拉长看:有人在大量卖出、把价格压到触发价,此时 MIT 跳出来买入,等于在卖方最需要对手的时候站到了对面,这是广义。它的作用和一张挂在触发价的限价买单很像,只是不在订单簿上显示,也不保证价格。判断一种订单“稳不稳定价格”,看它在价格往哪边走时出手:逆着走就是稳定,顺着走就是不稳定。
原书表 4-2 以 5 英镑为价格条件比较了四种卖单:
| 订单 | 使用频率 | 提交时市价 | 何时可成交 | 成交价 |
|---|---|---|---|---|
| 限价 5 的挂单限价卖单 | 常见 | 低于 5 | 价格涨到或高于限价后 | 限价或更高 |
| 止损价 5 的市价止损卖单 | 偶尔 | 高于 5 | 价格跌到止损价后 | 激活后市场能给的任何价格 |
| 止损价 5、限价 5 的止损限价卖单 | 少见 | 高于 5 | 跌到止损价后,且价格在限价或以上 | 限价或更高 |
| 触发价 5 的 MIT 卖单 | 很少见 | 低于 5 | 价格涨到或高于触发价后 | 激活后市场能给的任何价格 |
4.7 跳动敏感订单
4.7.1 价格跳动的分类
按与前一笔成交价的关系给成交价分类:
- 高于上一价:上跳(uptick);
- 低于上一价:下跳(downtick);
- 与上一价相同:零跳(zero tick)。零跳再按最近一个不同价格细分:最近不同价格更低,为零上跳(zero uptick);更高,为零下跳(zero downtick)。
原书例子:可口可乐最新成交 56.05,前一笔 56.08,是下跳;随后三笔都是 56.05,处于零下跳;此时你若以 56.07 卖出成交,就是在上跳卖出。
4.7.2 跳动敏感订单及其性质
下跳买单(buy downtick order)只能在下跳或零下跳价格成交,即成交价必须低于最近一个不同价格;上跳卖单(sell uptick order)只能在上跳或零上跳价格成交,即成交价必须高于最近一个不同价格。经纪人收到后先看能否在不违反条件的前提下成交,否则持有等待。
它们有三个重要性质:
- 没有市场冲击。持有下跳买单的经纪人不能抬价吸引卖方,只能等有人愿意以低于最近不同价格的价格成交。所以它们不能用来需求流动性,它们让别人想交易时能交易——提供流动性。
- 本质上是限价自动调整的限价单。下跳买单等价于:在最近不同价格略下方挂限价买单;价格上涨,就把限价上调到新价格略下方;价格下跌,限价不动。它吸引那些希望价格远离时仍把限价单保持在市场附近的交易者。在快速市场中,这种动态调整几乎无法手工完成,所以要用跳动敏感订单实现。
- 价值取决于最小价格变动单位。两个价格可以相差的最小量称最小价格变动单位(minimum price increment,也叫 tick 或 minimum price variation),通常由交易所规定。用跳动敏感订单就是放弃获取流动性、换取通常只好一个 tick 的价格,所以 tick 越大,它越有吸引力。美国股市小数化使多数股票的最小变动单位从 1/16 美元(6.25 美分)降到 1 美分,大大降低了跳动敏感订单的吸引力。
白话解释:用相对成本算一下就清楚了。一只 20 美元的股票,一个 tick 为 6.25 美分时,相当于 \(6.25/2000\approx31\) bp;改成 1 美分后只有 5 bp。用跳动敏感订单的代价是“可能等不到成交”,收益是“比追价的人好一个 tick”。tick 是 31 bp 时,为了这份收益多等一会儿很值得;tick 只有 5 bp 时,等待的风险往往大于这点收益。同样的逻辑也解释了 tick 大小对做市的影响:tick 大,挂单排队的价值高,价差下限被抬高,做市商赚得多;tick 小,价格竞争更激烈,价差收窄,但每一档的挂单量也变薄。
原书例子:你想以低于卖价的价格买 American Skiing,但不能随时撤单重下,于是提交下跳买单。经纪人收到时价格处于零上跳 1.02,必须等跌到 1.01 或以下才能买;结果价格涨到 1.03,此时最多可付 1.02;当一笔市价卖单到来时,经纪人以 1.02 买入。
为什么没有“上跳买单”和“下跳卖单”?(原书第 9 题)那将是“只在价格上涨时买”,本质上是追涨的需求流动性订单,却又加上了不能主动推动价格的限制,自相矛盾。
现状补充:(1)美国股市的十进制化从 2000 年 8 月开始试点,2001 年完成(NYSE 于 2001 年 1 月、Nasdaq 于 2001 年 4 月)。(2)跳动规则对美国卖空影响很大:原来的卖空“上跳规则”(Rule 10a-1)要求卖空只能在上跳或零上跳成交,2007 年被废除;2010 年 SEC 采用“替代上跳规则”(Rule 201),只在个股单日下跌 10% 后触发,此后卖空价格须高于全国最优买价。(3)跳动分类今天的主要用途是成交方向判断:Lee–Ready 算法和“tick test”用它推断一笔成交是买方发起还是卖方发起,是订单流不平衡(order flow imbalance)类因子的基础。
A 股对照:A 股没有跳动敏感订单。与之相近的规则是融券卖出的价格限制:融券卖出的申报价格不得低于该证券的最新成交价,作用类似美国早年的卖空上跳规则。
4.8 市价不受约束单
市价不受约束单(market-not-held order)是经纪人不必立即成交的订单,授权经纪人根据市况自行决定是提供还是获取流动性。交易者想让经纪人替自己做下单决策时使用——经纪人更了解当前市况,往往是更好的交易者。
“not held”的意思是不追究经纪人未能成交的责任。经纪人等待更好价格时,价格可能远离;即使最好的经纪人也躲不开这种情况,所以交易者不能要求经纪人对事后看来诱人却没成交的价格负责。相比之下,普通市价单的提交者如果在有合适机会时没有被执行,可以追究经纪人责任,甚至通过法律途径要求补偿。不受约束单没有这些权利,唯一的手段是不再把订单交给服务不好的经纪人。
这种订单最常用于大单:大单一次全部暴露会造成巨大冲击,经纪人会谨慎控制暴露,只向可能且有能力做对手的人露出一部分。第 02 章 Bob 交给 Merrill 场内经纪人的 8 万股订单就是这种订单。原书还提到,有人把它交给“用复杂计量模型制定最优下单策略的电子订单台”——这就是今天算法交易台的前身,现代的 VWAP、实施缺口等算法单在法律性质上也是一种“不受约束”的委托。
金融直觉:不受约束单和资产管理里“全权委托账户”(discretionary account)是一个逻辑:委托人用“放弃问责”换“代理人的专业判断”。好处是代理人能根据现场信息灵活处理,坏处是委托-代理问题,委托人很难事后判断代理人是尽力了还是偷懒了。约束手段因此只剩事后评估和“用脚投票”,这正是交易成本分析(TCA)存在的原因:买方用实施缺口、VWAP 偏离等指标给经纪商和算法打分,决定下次把订单交给谁。
4.9 有效期与到期指令
有效期指令对所有订单都可以指定,对挂单限价单和止损单尤其重要(它们通常不会立即成交,有的永远不会成交)。
先区分两个词:未结订单(open order)是尚未执行或撤销的订单;有效订单(good order)是可以被执行的订单。有效订单都是未结订单,但反过来不一定,例如“某日之后买入”的订单在该日之前是未结但非有效。
常见的有效期指令:
- 当日单(day order):提交当日有效,未成交则收盘失效。最常见,未指定时多数经纪人默认为当日单。
- 撤销前有效(good-till-cancel, GTC):直到明确撤销都有效。许多经纪人每月末寄送未成交 GTC 清单,有的一两个月后自动撤销。交易者要小心别忘了 GTC 单——只要没撤,就可能成交。
- 指定日前有效(good-until),本周有效(GTW)、本月有效(GTM)是其特例。
- 立即成交否则撤销(immediate-or-cancel, IOC):只在提交到市场的那一刻有效,不能立即成交的部分撤销。不想向市场提供交易期权时使用。原书说有些市场称之为全部成交否则撤销(fill-or-kill, FOK)或“见单即有效”(good-on-sight)。注意:现代用法中 IOC 允许部分成交,FOK 要求全部成交,否则整单撤销;原书在这里把两者视为同义,应以各交易所的定义为准。
白话解释:用第 04a 章的期权视角看有效期指令会很清楚:有效期就是你免费送出的期权的期限。GTC 是一份期限不定的长期期权,最危险,忘了撤单就可能在多日后的一次跳空中被行权;当日单的期限是一天;IOC/FOK 的期限是零,等于根本不送期权,只拿走别人送出的期权。所以高频交易者在“吃单”时几乎都用 IOC:要么立刻成交,要么什么都不留在簿上,避免自己的意图被别人看到并利用。
- 指定日后有效(good-after):很少见。
- 开盘市价单(market-on-open, MOO):只能在开盘时成交,主要用于以单一价格拍卖开盘的市场,通常能得到开盘价。
- 收盘市价单(market-on-close, MOC):只能在收盘时成交,常用来争取以收盘价成交。收盘价对共同基金特别重要,因为基金以收盘价计算的净值处理申购赎回。经纪人不保证以收盘价成交,想要保证可以付更高佣金向交易商购买。
原书表 4-3 汇总了各指令的使用频率和有效区间:IOC/FOK 偶尔使用,提交后立即失效;当日单常见;GTW、GTM、good-until、good-after 少见;GTC 常见、永不自动失效;MOO、MOC 偶尔使用,只在开盘或收盘时有效。
A 股对照:A 股交易所层面的委托只在当日有效,没有交易所层面的 GTC 单;券商提供的“条件单”“预埋单”是在券商系统中保存、满足条件后再报送交易所的。开盘价和收盘价都由集合竞价产生(沪深两市都已实行收盘集合竞价),指数基金调仓和以收盘价为基准的执行通常在收盘集合竞价阶段完成。国内期货交易所支持 FAK(即时成交剩余撤销)、FOK(全部成交否则撤销)等指令属性;止损单和各种条件单多由期货公司或交易软件实现。
4.10 数量指令
数量指令说明经纪人能否用多笔交易完成一个订单,通常是为了降低清算结算成本:
- 全部或不成交(all-or-none, AON):必须一次全部成交;
- 最低数量或不成交(minimum-or-none):可以分多笔,但每笔必须大于交易者指定的最低规模,有些市场称为最低可接受数量(minimum acceptable quantity, MAQ)。
在今天的暗池中,最低成交数量指令被广泛用来避免被小单“试探”。
4.11 其他订单指令
4.11.1 价差单
价差单(spread order)同时买一种工具、卖另一种工具,两者通常密切相关,例如同一商品不同交割月的期货。可以是市价单或限价单。限价价差单指定两价之差的限额,总是以“溢价在买方”或“溢价在卖方”表示:如果要卖的工具价格高于要买的,溢价在卖方,只有卖价减买价 ≥ 限额才成交;如果要买的工具价格更高,溢价在买方,只有买价减卖价 ≤ 限额才成交。
原书例子“用价差单展期”:六月初,Fulvio 想把 S&P 500 指数期货多头从即将到期的六月合约展期到九月合约,下价差单卖六月、买九月。六月、九月合约的最新价分别为 1276 和 1289,价差 13,远月对近月升水。他设定“买方溢价 10”,价差始终没降到 10,订单没成交;后来改为市价价差单,以价差 12 成交。
推导拆解:为什么远月升水?由持有成本关系 \(F_T=S\,e^{(r-q)T}\)(\(r\) 为无风险利率,\(q\) 为指数股息率),两个到期月的期货之差近似为 \(F_{\text{九月}}-F_{\text{六月}}\approx F_{\text{六月}}\times(r-q)\times\Delta T\),其中 \(\Delta T=0.25\) 年。 这里用了 \(e^{x}\approx1+x\)(\(x\) 很小时的一阶近似)。代入 \(F_{\text{六月}}=1276\),价差 13 对应 \((r-q)\approx13/(1276\times0.25)\approx4\%\)。也就是说,13 个点的升水主要反映三个月的“融资成本减股息”,而不是市场看涨。Fulvio 要求 10,相当于要求市场按 \(r-q\approx3\%\) 定价,偏离了持有成本,所以等不到;最后的 12 离理论值很近。
“溢价在买方”的意思是:他要买的九月合约更贵,所以限额是“最多付多少溢价”,价差 \(\le10\) 才成交。
价差单的好处是两条腿同时成交,避免腿部风险(legging risk)——先成交一条腿后另一条腿的价格变了。国内期货交易所也提供跨期、跨品种的组合(套利)指令。
4.11.2 显示指令
显示指令说明经纪人如何显示挂单的未成交部分,通常是规定最多显示多少,在担心全部暴露会让市场远离自己时使用。只显示一部分的订单称未披露订单(undisclosed orders),也叫隐藏订单(hidden orders)、保留订单(reserve orders)或冰山订单(iceberg orders)——别人只能看到冰山的一角。显示部分成交后再显示下一部分,直到全部成交。
想探知冰山订单全部规模的人,只能提交附 FOK 指令的大额可立即成交订单:数量在就成交,不在就撤销。
原书例子:Michael 想在 Euronext 巴黎卖 90,000 股 Alcatel Cable,每次只显示 10,000 股,挂 408 法郎的未披露限价卖单。Liza 看到 408 法郎卖 10,000 股的报价,她想买 60,000 股,猜到背后可能藏着更多,于是提交 60,000 股、408 法郎的 FOK 限价买单。系统立即全部成交;Michael 剩下的 30,000 股继续挂着,显示 10,000 股、隐藏 20,000 股。
金融直觉:冰山单是一种“信息管理”工具,和第 02 章 Bob 不同时向多个经纪人暴露需求是同一个道理。全部显示 90,000 股,等于向市场宣布“有一个大卖家”,其他人会预期价格将被压低,于是撤掉买单或挂到更低的价位,这就是订单暴露成本。只显示一角能降低这种成本,代价是隐藏部分通常在时间优先上排在显示订单之后(第 06 章会讲到显示优先规则),而且一旦被 Liza 这样的人识破,对方可以精确地以你的价格一次吃够。对量化研究者,“同一价位成交量明显超过显示量”是识别冰山单的常用信号。
4.11.3 替代单
替代单(substitution order)用于想在若干只证券中任选几只投资或撤出一定金额,由经纪人根据价格选择。原书例子:Steve 想增加汽车业敞口,不在乎买 Ford、GM 还是 Chrysler,指示经纪人买 3,500 万美元;经纪人发现有大买家在吸筹 GM、推高了价格,于是买 Ford 和 Chrysler。这与今天组合交易中“在一篮子相似股票中择优执行”的思路一致。
4.11.4 特别结算指令
需要非标准结算时附加。最常见的是现金结算(当日结算),通常用于临时决定要在投票或分配前成为登记在册股东,也用于股息捕获策略(第 08 章)。这类订单更难成交,必须协商,有的经纪人收取更高费用。
原书例子:今天周四,明天(周五)登记在册的 ABC 股东每股将获得一股分拆出来的 XYZ。若今天按常规 T+3 买入,周二才结算,拿不到 XYZ;用现金结算买入,明天就是登记股东。常规结算下能获得分配的最后买入日是两天前(周二),周三起 ABC 除权、价格下跌。所以你周四用现金结算买入的价格会显著高于常规结算价格——你买到的是两家公司。
现状补充:美国结算周期改为 T+1 后,除权日与登记日已基本重合,这个例子中的时间差大大缩短。
4.12 第 4 章小结
交易者用订单向经纪商和交易所传达意图。最重要的是市价单(以市场能给的最优价立即交易)和限价单(限制成交价格)。市价单不确定成交价格,限价单不确定是否成交。按流动性划分:限价单授予市场交易期权,供给流动性;行使这些期权的人获取流动性,一般用市价单。要理解市场流动性的来源,就必须理解交易者如何做下单决策。
原书表 4-4(旋转表格,精读笔记可辨认部分)汇总了各类订单的属性:
| 订单 | 流动性 | 主要风险或特点 |
|---|---|---|
| 市价单 | 需求即时性 | 执行价格不确定,价格冲击可能很大 |
| 限价单 | 提供流动性 | 可能不成交;限制价格冲击 |
| 止损单 | 激活后需求即时性 | 价格冲击不确定,助涨助跌 |
| MIT | 广义上提供流动性 | 可能永不执行 |
| 跳动敏感订单 | 提供流动性 | 价格冲击有限 |
| 市价不受约束单 | 由经纪人决定 | 成交价取决于经纪人,交易者失去问责权 |
原书 4.13 节要点:交易者用程式化指令减少沟通错误;市价单需求即时性;买卖价差是小额市价单的即时性成本;大额市价单的冲击可能大且不可预测;限价单通过授予交易期权提供流动性;必须成交的限价单交易者在市场远离时可能损失很大;有人用限价单在不在场时参与市场;止损单不是限价单;止损单倾向于使价格不稳定。
量化实战:跳动分类与止损连锁
实战一:用跳动规则给成交分类
高频数据研究中经常需要判断每笔成交的方向(买方发起还是卖方发起),而很多数据源不提供这个字段。最简单的方法就是本章的跳动规则(tick test):上跳和零上跳视为买方发起,下跳和零下跳视为卖方发起。Lee–Ready 算法先用成交价与中间价比较,只有成交价恰好等于中间价时才退回到跳动规则。下面实现跳动分类,并用可口可乐的例子检验。
实战二:止损单如何放大价格变化
用第 04a 章的订单簿 LimitOrderBook:买方在 99.99 到 99.70 每个价位各挂 300 股。先让一张 2,400 股的市价卖单冲击订单簿,对比两种情形:订单簿下方没有止损单;以及在 99.92、99.87、99.82、99.70 各有 1,500 股止损卖单(激活后成为市价卖单)。止损单在最新成交价跌到止损价时激活,激活后的卖单又可能推动价格触发下一层止损。
运行前先把第 04a 章「实战一」的第一段代码保存为 lob.py,并与下面的脚本放在同一目录。
import numpy as np
import pandas as pd
from lob import LimitOrderBook # 第 04a 章的订单簿
# ---------- 1. 跳动分类(tick test):上跳、下跳、零上跳、零下跳 ----------
def tick_classify(prices):
out, last_diff_sign = [], 0
for i, p in enumerate(prices):
if i == 0:
out.append("—"); continue
diff = p - prices[i - 1]
if diff > 0: last_diff_sign = 1; out.append("上跳")
elif diff < 0: last_diff_sign = -1; out.append("下跳")
else: out.append({1: "零上跳", -1: "零下跳", 0: "未知"}[last_diff_sign])
return out
ko = [56.08, 56.05, 56.05, 56.05, 56.07] # 书中可口可乐例子,最后一笔为你在 56.07 卖出
print(list(zip(ko, tick_classify(ko))))
# ---------- 2. 止损单如何放大价格变化 ----------
def build_book():
ob = LimitOrderBook(tick=0.01)
for i in range(1, 31): # 买方每档 300 股:99.99 ... 99.70
ob.limit("B", 100.00 - 0.01 * i, 300)
ob.limit("S", 100.01, 1_000)
return ob
def run(shock_qty, stops):
"""stops: [(止损价, 股数)] 的止损卖单(激活后变为市价卖单)"""
ob = build_book()
ob.market("S", shock_qty)
pending, triggered = sorted(stops, reverse=True), 0
while pending and ob.trades and ob.trades[-1][0] <= pending[0][0] + 1e-9:
sp, q = pending.pop(0) # 最新成交价跌到止损价 → 激活
ob.market("S", q); triggered += q
last = ob.trades[-1][0]
return last, ob.best_bid(), triggered
stops = [(99.92, 1_500), (99.87, 1_500), (99.82, 1_500), (99.70, 1_500)]
for label, s in [("无止损单", []), ("有止损单", stops)]:
last, bb, trig = run(2_400, s)
print(f"{label}: 冲击卖单 2,400 股后最新成交 {last:.2f},最优买价 {bb:.2f},被触发止损 {trig:,} 股")
运行输出:
[(56.08, '—'), (56.05, '下跳'), (56.05, '零下跳'), (56.05, '零下跳'), (56.07, '上跳')]
无止损单: 冲击卖单 2,400 股后最新成交 99.92,最优买价 99.91,被触发止损 0 股
有止损单: 冲击卖单 2,400 股后最新成交 99.77,最优买价 99.76,被触发止损 4,500 股
解读:
- 跳动分类与原书描述一致:56.05 的三笔中,第一笔是下跳,后两笔是零下跳;56.07 是上跳。
- 没有止损单时,2,400 股卖单把价格从 99.99 打到 99.92,下跌 7 个 tick。有止损单时,99.92 的成交触发第一层止损,1,500 股卖单把价格打到 99.87,又触发第二层,再到 99.82 触发第三层,最终价格跌到 99.77,下跌 22 个 tick——同一个冲击,价格变化放大了约 3 倍。第四层止损(99.70)没有被触及,连锁在这里停住。
白话解释:连锁能否继续,取决于一个简单的比较:一层止损的卖量,能吃掉多少档订单簿? 本例每层止损 1,500 股,每档挂单 300 股,所以一层止损能打穿 5 档、即 5 个 tick;而相邻两层止损相距也正好 5 个 tick(99.92 → 99.87 → 99.82),于是每一层都恰好把价格推到下一层的触发价。第四层在 99.70,距第三层 12 个 tick,第三层只能推 5 个 tick,到 99.77 就停了。把它写成一句话:止损量 ÷ 每档深度 ≥ 止损间距(以 tick 计)时,连锁就会自我延续。这个比值在真实市场里会在开盘、收盘、消息发布时陡然变大,因为那时订单簿最薄。
- 这就是 4.5.3 节所说的“止损单在流动性最稀缺时需求流动性”。在量化交易中它有两层含义:一是自己的止损单可能在连锁中以很差的价格成交(Stan 的棉花例子),回测时止损成交价不能直接用止损价;二是止损单聚集的价位(常在整数关口、前高前低附近)是突破和“扫止损”行为的微观基础,第 11、12 章会从订单预期者和操纵者的角度讨论。
本章小结
止损单在价格达到止损价时激活,成交价不保证;想保证价格只能买期权。止损单在流动性最稀缺时需求流动性,助涨助跌;动量交易者使价格不稳定,逆向交易者使价格稳定。MIT 跌时买、涨时卖,广义上提供流动性、稳定价格。跳动敏感订单本质上是限价自动跟随的限价单,没有冲击、提供流动性,tick 越大越有吸引力,十进制化后吸引力大减。市价不受约束单把下单决策交给经纪人,交易者放弃问责,常用于大单,是算法交易委托的前身。有效期(Day、GTC、IOC、FOK、MOO、MOC)、数量(AON、MAQ)、价差、显示(冰山)、替代、特别结算等指令各有用途。
| 概念 | 要点 |
|---|---|
| 止损单 | 达到止损价才激活,激活后按市价成交;助涨助跌 |
| 止损限价单 | 止损价决定何时激活,限价决定成交条件 |
| MIT | 跌到触发价买、涨到触发价卖,激活后成市价单;稳定价格 |
| 跳动分类 | 上跳、下跳、零上跳、零下跳(按最近不同价格) |
| 跳动敏感订单 | 下跳买单 / 上跳卖单;无冲击、提供流动性;价值随 tick 增大 |
| 市价不受约束单 | 经纪人自由裁量,不追究未成交责任 |
| IOC / FOK | IOC 允许部分成交、剩余撤销;FOK 全部成交否则撤销(现代用法) |
| MOO / MOC | 只在开盘 / 收盘成交,常对应集合竞价 |
| AON / MAQ | 全部或不成交 / 每笔不低于最低数量 |
| 价差单 | 两腿同时成交,以“溢价在买方 / 卖方”定限额 |
| 冰山单 | 只显示一部分;用 FOK 大单探测全部规模 |
练习
基础
- 当前价格 52 元。你持有多头,想在跌破 50 元时离场,但不愿以低于 49.5 元的价格卖出。应该下什么订单?写出两个价格。这个订单有什么风险? 答案:止损价 50、限价 49.5 的止损限价卖单;风险是快速下跌时可能完全不成交。
- 判断以下价格序列中最后一笔的跳动类型:10.00, 10.01, 10.01, 10.01。 答案:零上跳。
- 比较 IOC 与 FOK:一张 1,000 股 IOC 买单遇到对手方只有 600 股时会怎样?FOK 呢?(按现代用法)
- 为什么 MIT 卖单在广义上提供流动性?
进阶
- (原书第 2 题)在什么情况下应该用止损买单? 提示:空头止损;突破追涨。
- (原书第 3 题)在什么情况下不应该向市场暴露交易期权?可以用哪些订单指令避免暴露? 提示:信息事件前、高波动、对手更快时;用 IOC/FOK、可立即成交限价单。
- (原书第 4 题)电子通讯技术会如何改变订单指令?结合今天的算法单、条件单、冰山单讨论。
- (原书第 8 题)逆向交易者用市价单交易时,是在提供还是获取流动性? 提示:狭义上获取即时性,广义上为推动价格的一方提供对手,类似 MIT。
- (原书第 9 题)为什么没有上跳买单和下跳卖单?
- 修改本章的止损连锁代码:把每层止损量从 1,500 股改为 600 股,或把每档买单从 300 股改为 1,000 股,连锁是否还会发生?据此说明“止损聚集是否引发连锁”取决于哪两个量的比较。 提示:止损量与止损价之间订单簿深度的比较。
原书推荐习题:第 4 章思考题共 9 题(PDF p.101)。本章涉及第 2、3、4、8、9 题,推荐重点做第 3、9 题;第 5、6、7 题见第 04a 章。
原书对照
- 原书第 4 章 Orders and Order Properties,本章覆盖 PDF 第 91–101 页(原书页码约为 PDF 页码减 13)。
- 4.5 止损单(侧栏棉花、ASTN 例子):p.91–93;4.6 MIT(表 4-2):p.93;4.7 跳动敏感订单(侧栏可口可乐、American Skiing):p.94;4.8 市价不受约束单:p.95;4.9 有效期指令(表 4-3):p.95–97;4.10 数量指令:p.96–97;4.11 价差单、显示指令、替代单、特别结算(侧栏 Fulvio、Alcatel、Steve、现金结算例子):p.97–99;4.12 小结:p.99;4.13 要点与表 4-4:p.99–101;4.14 思考题:p.101。