公式
对连续两根 K 线 t 和 t+1,算 β = [ln(H_t / L_t)]² + [ln(H_t+1 / L_t+1)]²,也就是每根 K 线对数区间的平方之和;再算 γ = [ln(max(H_t, H_t+1) / min(L_t, L_t+1))]²,也就是两根 K 线合起来的对数区间的平方。取 k = 3 − 2√2,则 α = (√(2β) − √β) / k − √(γ / k),而比例价差是 S = 2(e^α − 1) / (1 + e^α)。这个估计值要在很多个 K 线对上取平均。论文是 Corwin 与 Schultz 的《A simple way to estimate bid-ask spreads from daily high and low prices》,刊于 Journal of Finance,2012 年。
需要记住的假设
- 每根 K 线的最高价是一笔成交在卖价上,而最低价是一笔成交在买价上。
- 波动率随时间缩放,所以两根 K 线的区间应当按一个已知的比例宽于单根 K 线的区间。
- 由于抽样噪声,成对估计出负值的情况很常见;作者在取平均之前把它们置为零,这拿掉了一个向下的偏差,却引入了一个向上的偏差。
- 两根 K 线之间若有一个没有成交的价格跳空,会把两根 K 线的区间抬大;作者按这个跳空的大小调整第二根 K 线的最高价和最低价。
一个日内 K 线上的算例
连续两根 K 线分别在 4 998.00 到 5 002.00 和 4 999.00 到 5 003.00 之间成交。于是 β 约为 1.28 × 10⁻⁶,而 γ 由 4 998.00 到 5 003.00 这个合并区间算出,约为 1.00 × 10⁻⁶。公式给出 α 约为 0.000317,价差约为 3.2 个基点,在 5 000 上大约是 1.6 个指数点,也就是六跳左右,而这个市场被报出来的价差通常只有一跳。这两根 K 线重叠得很厉害,所以两根 K 线的区间增长得远低于波动率缩放所预测的幅度,而估计量把这个差额归给了价差。在日内期货 K 线上,区间会因为和价差无关的原因而重叠,所以这个估计值需要那份谨慎。
在 Senzoukria 里
「Corwin-Schultz Spread」是「Quantitative」组里的一个副图指标。「Window (bar pairs)」默认是 20,范围从 1 到 500。「Negative pair estimates」可以在零处截断(作者的规则,也是默认)、从平均里排除,或者原样保留。「Adjust for no-trade gaps」默认开启,而这一点在 CME 期货的每一个时段边界上都很要紧。「Unit」默认是基点,也可以选比例、跳或价格。两根 K 线区间为零的那种对会被跳过,而不是被当作价差为零计入;而算不出来的那些对不会进入平均。应用之所以把它和「Roll Implied Spread」放在一起出厂,恰恰是因为这两个估计量依赖的是不同的数据和不同的假设。
相关内容
同一栏目
其他语言版本
常见问题
- 这个估计量为什么需要跳空调整?
- 如果市场在前一根 K 线的最高价之上开出一个新的交易时段,那么两根 K 线的区间就包含了这一跳,尽管这中间没有发生任何成交。估计量会把那一跳读成区间的一部分,从而高估价差。作者的调整是在计算区间之前,先按这个跳空的大小平移第二根 K 线的最高价和最低价。
- Corwin-Schultz 比 Roll 更好吗?
- 两者从不同的数据回答同一个问题。Roll 用的是连续价格变化的反转;Corwin-Schultz 用的是最高价和最低价。它们在不同的条件下失效,这正是为什么同时比较两者、并在能拿到报出来的价差时和它一起比较,比单独信任其中任何一个都更有信息量。