TT Lab
はじめる
学ぶ 学習パス コース

資本市場と決済

注文は出ていく前に止めるしかない

TT Labで続きを見る

一言でいうと

人が桁を1つ多く打つことは、必ず起きます。それを防ぐのは人の注意ではなく、注文経路に埋め込まれたチェックで、チェックはオンにしておくだけでは足りません。何を累積に入れるか、どんな順序でかけるかが、結果を変えます。

なぜ必要なのか

約定したあとで見つけることと、出ていく前に止めることは、まったく別の仕事です。出ていった注文はすでに市場にあり、元に戻すには、反対売買をするか、取引所に取消を頼み込むしかありません。その間の価格変動は、そのまま損失です。そのため、リスクチェックは注文経路の上、つまり注文が市場に出ていく前の区間に置かれます。

これが慣行ではなく規則である国もあります。米国証券取引委員会の規則15c3-5は、市場アクセスを提供するブローカーに、注文が出ていく前に財務・規制リスクの統制を適用するよう求めています。規則の本文はeCFRの240.15c3-5で読め、なぜこのような規則が必要だったのかは、連邦官報の採択告示に残っています。規則が求めているのは「チェックをかけること」であって、「限度額をいくらにせよ」ではありません。数字は、各自が決めます。この文とラボに出てくる限度の数値は、すべて合成値です。

どう動くのか

チェックは、たいてい6つに分かれます。

単一注文の上限。1件の数量と金額に上限を置きます。桁を1つ多く打った注文は、ここで大部分が引っかかります。金額は数量掛ける価格なので、数量の上限だけを置くと、高い銘柄で漏れます。

価格バンド。基準価格から数パーセント以上離れた指値を止めます。ここで必ず出会う質問が1つあります。基準価格のない銘柄はどうするのか。新規上場かもしれず、相場フィードが途切れたのかもしれず、銘柄コードが間違っているのかもしれません。このとき「比べるものがないから通過」としておくと、チェックがある理由がなくなります。通過でも拒否でもない保留に分けて、人に見せるのが定石です。保留は、拒否とは別に数える必要があります。あとで、この違いが大きく開きます。

制限銘柄リストと重複注文。前者は単純な名簿との突合で、後者は、同じ条件の注文が短時間に繰り返されることを捕まえます。画面が止まったと思ってボタンを2回押すこと、リトライのロジックがレスポンスを受け取れずに再び送ることが、ここで引っかかります。

累積限度。口座・トレーダー・デスク単位で、未約定のエクスポージャーの合計に上限を置きます。ここに、この文で最も重要な規則があります。拒否された注文は、累積を消費しません。当たり前に見えますが、間違えやすいところです。注文ログをそのまま走査して合計を出すと、拒否された注文まで入ってしまい、そうすると限度が実際より早く埋まって、問題のない注文が次々に止められます。止められた人は理由がわかりません。画面には「限度超過」としか出ず、その人の実際のエクスポージャーは限度の半分だからです。

キルスイッチ。個別の拒否と全体の遮断は、別の動作です。短時間に拒否が集中するなら、それは注文1つが間違っているのではなく、送る側が故障している可能性が高いのです。そのときは、その経路をまるごと閉じます。そして、この状態はファイルやストレージに残す必要があります。メモリにだけ置くと、プロセスが再起動した瞬間に遮断が解け、故障した側は、依然として故障したままです。

チェックの順序。順序が変わると、同じ注文に付く理由が変わります。理由だけが変わるならレポートの問題ですが、保留と拒否を分けるチェックが前後に動くと、話が変わります。保留は拒否として数えないので、価格バンドのチェックを前に繰り上げるだけで、キルスイッチがオンになる時点が遅れます。その間に入ってきた注文は、止められずに出ていきます。

金額の比較はdecimalで行います。浮動小数点数で限度と比べると、ちょうど限度と等しい金額が、ある日は通過し、ある日は止められます。注文メッセージのフィールド名と意味は、FIX標準が定めたものに従います。

現場での姿

あるとき、特定のデスクの注文が午後ごとに止められるという報告が上がってきました。エクスポージャーを数えてみると、限度の半分でした。原因は、累積を注文ログで数えていたことでした。午前に拒否された大きな注文が数件、限度を食っていて、拒否は、画面のどこにもエクスポージャーとして表示されていませんでした。

また別のときは、キルスイッチがオンになったのに、10分後に自然に解けました。デプロイが回ってプロセスが再起動し、遮断状態はメモリにだけありました。同じ障害が、その日、さらに2回起きました。

次のラボですること

注文47件と限度の定義を作り、単一注文の上限から始めて、価格バンド・制限銘柄・重複・累積エクスポージャー・キルスイッチを、1層ずつ重ねます。拒否された注文まで累積に入れる誤った実装と比べて、どの注文が不当に止められるかを一覧で出し、チェックの順序を1か所変えて、キルスイッチがオンになる注文が変わることを確認します。最後に、限度額を厳しくした2つ目の設定で同じ1日をもう一度回して、今の設定が見逃していた注文を取り出します。