Roll bid–ask spread estimator:式、計算例、限界
Roll estimatorが負のリターン共分散から実効bid–ask spreadを推定する仕組みを学び、仮定の計算例とモデルが成り立たない場面を確認します。
このガイドの内容Roll estimatorが測るよう設計されたもの
短い要約
Roll estimatorは、約定価格リターンの連続する値の負の共分散から、モデル上の実効bid–ask spreadを推定します。記録された気配値ではなく約定価格を使えますが、効率価格、売買方向、サンプリング、サンプル期間中のspreadの安定性に関する仮定に結果が左右されます。
Roll estimatorが測るよう設計されたもの
Quoted spreadは、ある時点のaskとbidの差です。一方、effective spreadは実際の約定価格を同時点のmidpointと比べ、取引が負担したコストを要約します。Roll estimatorはeffective spreadの低頻度proxyであり、約定価格変化の系列共分散から、短期的な価格反転を生んだ可能性のある価格差を推定します。
必要なデータが比較的少ないことが利点です。信頼できる約定価格があり、過去のbid・ask気配や売買方向のフラグがなくても計算できます。そのため、歴史比較や気配値の保存が不完全な市場で役立つ場合があります。ただし、気配板を再現したり、各約定の売買方向を特定したり、現在取引できるspreadを示したりはしません。Rollの原論文は効率市場を前提にこの尺度を導き、推定対象はeffective spreadであって、必ずしも表示されたquoted spreadではないと説明しています(Roll, 1984)。
この推定値は取引コスト全体を表すものでもありません。commission、個別注文のmarket impact、待つコスト、未約定数量、観測後の価格変動は含まれません。過去の約定価格の動きをモデルで要約した値として扱い、実行可能な気配値や完全なbacktestコストモデルとは区別してください。
Bid–ask bounceが負の共分散を生む
\(x_t\)をlog約定価格、\(m_t\)をbidとaskが置かれる中心の観測できないlog価値、\(s\)をlog価格単位のfull effective spreadとします。単純な対称モデルでは、
\[ x_t=m_t+\frac{s}{2}q_t, \]
askで買い手主導の取引があれば\(q_t=+1\)、bidで売り手主導の取引があれば\(q_t=-1\)です。したがって観測リターンは、
\[ r_t=\Delta x_t=\Delta m_t+\frac{s}{2}(q_t-q_{t-1}) \]
となります。
取引方向が独立で、\(+1\)と\(-1\)が同じ確率で起き、効率価値のinnovationに系列共分散がなく、spreadがサンプル中一定だと仮定します。取引が一方の側からもう一方へ移ると、基礎価値がほとんど動かなくても約定価格はspreadを横切ります。askでの買いの後にbidで売ると負のリターンに続いて正の反転が生じます。逆の順序でも同様です。同じ側で取引が続けば、その2つの観測間でspreadの成分がゼロの場合もあります。
この仮定の下では、spreadの成分により連続するリターンは平均的に逆方向へ動きます。
\[ \operatorname{Cov}(r_t,r_{t-1})=-\frac{s^2}{4}. \]
この式を\(s\)について解くとRollの式になります。この共分散パターンはモデルから導かれるものであり、観測されたすべての価格反転がbid–ask spreadによって起きた証明ではありません。
<!-- Illustration placement: after section 3; text-free conceptual comparison of a smooth underlying value path with transaction prices alternating above and below it. No labels, axes, or values. -->
自己相関ではなく1次の共分散を使う
1次の共分散を\(C_1=\operatorname{Cov}(r_t,r_{t-1})\)と書きます。\(T\)個のリターンに対する一般的な標本計算の一つは、
\[ \widehat C_1=\frac{1}{T-1}\sum_{t=2}^{T}(r_t-\bar r)(r_{t-1}-\bar r), \]
です。ここで\(\bar r\)は標本平均です。\(\widehat C_1<0\)なら、plug-in推定値は
\[ \widehat s_{\text{Roll}}=2\sqrt{-\widehat C_1} \]
です。
推定値の単位は共分散に使ったリターンと同じです。\(r_t\)がlog returnなら、\(\widehat s\)は比例spreadまたはlog価格spreadです。入力がドル建ての価格変化なら、推定値も価格単位になります。資産や期間をまたいで比べる前に、変換方法、sampling interval、共分散の計算規約を示してください。
Rollが重視するのはcorrelationではなくcovarianceです。Correlationは無条件リターン分散で割り、その分散には効率価値に関する新情報による変動も含まれます。spreadの仕組みが変わらなくても、このnews-drivenな分散は変わり得ます。正規化していない共分散には、モデル上、spreadの二乗との直接の関係があります。autocorrelationに置き換えると推定量も解釈も変わります。log price、scaled return、別の分母を使う場合は、その規約を明記してください。

仮の−1.44 bp²から2.40 bpの推定値を計算する
約定価格のlog returnをbasis pointで表した仮の標本を考えます。平均を引いた1次の標本共分散が\(-1.44\,\text{bp}^2\)なら、
\[ \widehat s_{\text{Roll}}=2\sqrt{-(-1.44)}=2\sqrt{1.44}=2(1.20)=2.40\,\text{bp}. \]
モデルの下でfull proportional-spread推定値は\(2.40\) basis point、つまり\(0.024\%\)です。仮のmidpointが\($100\)なら、full spreadをドルに換算した1株当たりの値はおよそ
\[ \$100\times 0.00024=\$0.024 \]
です。midpointから片側まではその半分で、約\($0.012\)/株です。気配値が変わらず、1,000株をaskで買ってbidで売るなら、commission、その他の手数料、価格変動、market impactを除いたfull-spreadの価格差は約\($24\)です。これは例示の換算であり、観測された気配値や約定コストの保証ではありません。
この計算から、\($100\)が実際に執行可能なmidpointだったか、どれだけの数量が利用できたか、注文がどの価格で約定したかは分かりません。Roll推定値は過去のサンプルを一つの統計量にまとめますが、時間帯、注文サイズ、市場状態による違いを隠すことがあります。資産、interval、spreadの定義が一致しない限り、現在表示されているspreadと比べないでください。
Spreadとサンプリング窓を変えると推定対象も変わる
一定の\(s\)は単純化の仮定です。Rollは時間変化するspreadも検討し、モデルの下で平均二乗spreadとの関係を導きます。その場合、平方根を取った値は一般に算術平均spreadではなくroot-mean-square spreadです。spreadは二乗で入るため、少数の非常に広いspreadの観測が推定値に不釣り合いに大きな影響を与えることがあります。
原モデルから得られるもう一つの結果は、より一般的に聞こえるかもしれません。仮定が成り立てば、重ならない観測intervalの長さにかかわらず、spreadによる共分散の期待値は不変です。だからといって、実際の日次、週次、intradayの推定値が一致するわけではありません。実際の取引方向は複数観測にわたって続くことがあり、取引のないintervalもあり、spreadの状態も変わります。intervalを変えると、sampled priceとなる取引や、各リターンに入るinformation noiseの量も変化します。
結果を見る前にsampling ruleを決めます。たとえば、official closing trade、midpoint mark、stale last priceを混ぜず、一貫した規則で抽出した約定価格を比べます。リターンがcalendar timeとtrading sessionのどちらにまたがるか、休日や非取引期間をどう扱うか、corporate actionやcontract rollを調整したかを記録してください。同じ式でも、sampling intervalが異なれば別の実証設計です。
共分散が正なら基本推定値は定義できない
平方根が実数になるのは標本共分散が負の場合だけです。\(\widehat C_1=0\)ならplug-in計算はゼロですが、\(\widehat C_1>0\)なら基本式は定義されません。標本共分散がゼロまたは正でも、真のspreadがゼロとは限りません。標本誤差、取引方向の持続性、価格の離散性、効率価値リターンの系列依存、短い標本でspreadとnoiseを区別できないことなどが原因になり得ます。
実証分析では、平方根を取る前に正の共分散をゼロに置き換えるものもあります。絶対値を使う方法や、負の共分散が出たwindowだけを報告する方法もあります。数値は得られますが、いずれも追加の規則でありRollの式から導かれるものではありません。定義できなかった推定値の数、ゼロに置いた頻度、除外でサンプルが変わったかを報告してください。絶対値を黙って取れば、モデルと矛盾する共分散から正のspread推定値を作ってしまいます。
小標本では、共分散自体の推定誤差に加え、その後に平方根変換を行う問題があります。HarrisはRoll modelの下で有限標本の性質を導き、noiseによって標本共分散が正になり得ること、非線形変換が大きなbiasを生み得ることを示しました(Harris, 1990)。推定値とともに標本長や妥当なwindowに対する感度を示し、価格データが支えない精度を装わないでください。
取引方向や効率価格の変化が持続するとモデルは崩れる
単純な導出に必要なのは、負の共分散だけではありません。独立かつ同確率の買い手主導・売り手主導取引、効率価値を中心とした対称spread、効率価値innovationに系列共分散がないこと、サンプリングが約定価格の仕組みを表すことも仮定しています。market-order splittingや在庫管理は取引方向の持続性を生みます。買いが続くと、約定リターンのspreadに関係する成分も同じ向きに続き、モデル予測より負の共分散が弱くなることがあります。
midpointの推移にも系列依存があり得ます。momentum、reversal、stale price、非同期観測、予定された価格調整は、effective spreadが変わらなくても負または正のリターン共分散を生む可能性があります。価格の離散性やtick sizeの影響も独自の反転を作ります。こうした影響が標本の大半を占めなくても重要になり得ます。推定器は一つのmomentからspreadを推定するため、そのmomentに影響する別の過程が結果をconfoundするからです。
時間変化するspreadは、標本平均と安定した市場特性を区別させます。news、寄り付きや引け、取引の薄さ、市場stressでspreadは広がることがあります。全期間の推定値はそうした局面を隠し、短いwindowでは共分散推定がnoiseに埋もれることがあります。時系列を確認し、windowの定義を報告してください。モデルの下では負の系列共分散はbid–ask bounceと整合しますが、短期価格変動すべての因果分解ではありません。
Quote dataと他の低頻度推定器は異なる問いに答える
信頼できるquoteとtrade dataがあれば、各取引価格を同時点のmidpointと比べ、取引方向を考慮してeffective spreadを直接計算できます。そのためには、同期・清掃済みの観測値に加え、locked、crossed、stale、順序が不正なquoteの扱いを明確にする必要があります。直接法が測るのはそのデータセットで実際に起きた取引であり、Rollは約定価格の系列共分散からspreadを推定します。取引方向自体にも推定規則が必要な理由はtrade-direction classification guideで説明しています。
他の低頻度手法は別の情報と仮定を使います。HasbrouckはbasicなRoll plug-in変換だけに頼らず、日次終値からGibbs samplerによる推定値を作ります(Hasbrouck, 2009)。CorwinとSchultzは日次の高値・安値を使い、同じ取引方向の動きに依存しないspread推定器を構築します(Corwin and Schultz, 2012)。別の方法を使っても、どの価格系列からでもquoted spreadが観測可能になるわけではありません。それぞれに独自の仮定と検証範囲があります。
実務で何を知りたいかによってmeasureを選びます。quote dataが限られている場合、過去の市場間比較に低頻度proxyが役立つことはありますが、失敗率と仮定を報告してください。注文判断には現在のbid、ask、depth、注文サイズを確認します。先物spreadとslippageのガイドはquoted spreadと実現execution差を区別し、ETF流動性ガイドはvolumeだけでは執行可能な流動性を表せない理由を説明します。
仮定を報告し、推定値をシグナル欄に入れない
再現可能な報告では、観測値が約定、official close、その他の約定価格proxyのどれか、入力が価格変化かlog returnか、sampling interval、観測数、共分散の分母、ゼロまたは正の共分散の処理方法を明記します。対象asset、期間、corporate actionやrollの調整、データfilter、spreadを価格・割合・basis pointのどれで示すかも指定してください。spread一定の仮定が不自然なら、最も負の共分散になるwindowを選ぶのではなく、事前に決めたsubperiodごとに推定値を示します。
Roll推定値はモデルに基づく過去の取引コストproxyです。今日のquoteを示さず、約定価格を保証せず、戦略全体のコストを測らず、次のリターンを予測しません。backtestにはvenue、注文サイズ、時刻、commission、fill behaviorに合った注文サイズ別のspread、commission、market impact、partial fill、タイミングのモデルが必要です。推定spreadが低いこと自体は取引可能な優位性の証拠ではありません。異なるsampling frequencyで観測されるvolatilityの全体像はrealized volatility guideを参照してください。
よくある質問
Q1Roll estimatorに過去のbid・ask quoteは必要ですか?
いいえ。基本形は約定価格と連続リターンの共分散を使います。そのためquote履歴がなくても使えますが、推定値はモデルに基づき、各時点の実際のquoteを復元するものではありません。
Q2正のautocovarianceはspreadがゼロという意味ですか?
いいえ。標本共分散が正なら基本式は定義できません。推定値をゼロに切り下げる規則は、真のspreadがゼロという証明ではありません。処理規則と該当標本の割合を報告してください。
Q3Roll推定値をlive backtestのspreadとして使えますか?
それだけでは不十分です。これは特定の仮定に基づく過去のproxyです。backtestにはvenue、注文サイズ、タイミング、commission、約定挙動に合ったコストとexecutionの仮定が別途必要です。
出典
問題を報告
この記事のリンクを含むメールを準備します。送信すると Mark に報告が届きます
クイックチェック
記事を読み終えたら、3問で確認しましょう
問題 01
基本的なRoll estimatorはspreadを推定するために何を使いますか?
答えを選ぶと解説を確認できます