技術製品「見えない金融を可視化する - iAlgo」

技術製品

「見えない金融を可視化する - iAlgo」

板情報をアルゴリズムで捉え、市場の変化に応じて予め指定された条件下で自動的に発注するリアルタイム分析発注システムです。

開発の背景

取引の頻度(注文処理速度)・量共に共に人が板を見て発注判断するような人間の認識能力に依拠するような方法だけでは追いつかない状況に。

東証が新システム(Arrowhead)を稼働。丸めないフル板(注文集計表)情報を含む市場情報配信サービス(FLEX Full)を提供。

注文状態の定量化(板バランス計算)が可能に

ミリ秒単位で変化する板を追う必要は無い!

注文量の定量化とは

市場において、買注文が売注文よりも多ければ需要過多の状態であり市場価格は上昇すると考えられています。でも、実際の株式市場はそんなに単純ではありません。それは「いくらだったら買いたいか、売りたいか」が注文者毎に異なるため、市場の総意としての需給が、価格が変わったからといって単調な変化を示す訳ではないからです。さらに、市場では注文状態が逐次変化するため、情報のループと変化を確実に捕らえる事がとても重要になります。
iAlgoでは、人間の目に見えないミリ秒単位で動く数値情報ではなく、影響を及ぼす範囲にある注文データを使って買注文と売注文の傾向をグラフ化し、そのバランスを的確な情報(下図の赤矢印と紺矢印の差を数値として定量化)として提供します。

技術的課題の解決(フル市場情報のリルタイム分析)

FLEX Fullで配信されているデータは約4千銘柄分、通常の1日あたりのデータ量は約12ギガバイト、メッセージ(パケット)数にして約4~5千万メッセージ/日ですが、相場状況により増大することもあります。秒単位で単純平均すると2000~3000メッセージ/秒のメッセージ数ですが、1日のうちでも取引開始時や大引け時などに取引量が特に多くなるような傾向があり、ピーク時には4万~6万メッセージ/秒になります。

iAlgoではこれら全てのデータを受信し、リアルタイムに分析計算を実行、結果をDBに格納します。 元となる市場情報はUDPマルチキャストによる変化分の配信であるため、受信処理の遅延はデータの欠落につながり、結果として以降の分析が不可能になるような重大な障害となります。また、一般のDBへの格納はI/O性能が問題となり、このような大量データのリアルタイム処理には不適です。

また、弊社のオンメモリDBMSであるCoreSaverを採用し、全てをオンメモリベースで処理するとともに、取引所システム開発などで培ってきたマルチスレッド・キューなどの低レイテンシー処理のノウハウを駆使して、上記のような問題をクリアして安定的に稼働するリアルタイム分析システムを構築しました。勿論、サーバ障害時はフェイルオーバー(自動切替)でサービス継続する冗長系も備えています。

注文状態の変化が相対的に大きなタイミングを捕らえた日中変動チャート

平均的な注文状態変化を捕らえた日中変動チャート

それぞれ、赤三角は相対的に買注文が増えた注文状態変化青三角は相対的に売注文が増えた注文状態変化を示している。

各種分析情報の提供

iAlgoは、市場の状況や発注判断のために、主に以下のような各種の分析情報をリアルタイムで提供します。

  • 各銘柄の日通し四本値や5分足、TWAP、VWAPなど、一般的な指標値の推移
  • その時点における板(売り・買い注文表)の状態
  • その時点の注文状況を独自に定量化した板バランス値と、指定範囲内の変化イベントの推移
  • 市場全体の注文金額や出来高の推移、独自算出の平均株価の推移
  • 板バランス変化や取引頻度が通常より多い銘柄リスト

このように、他のシステムでは見られない独自の指標を含む、豊富なリアルタイム分析情報を提供しています。また、分析結果はDBに保存してあり、過去の分析データを参照して、過去の値動きや、指定範囲の板バランス変化状況のシミュレーションにより、発注条件判断の参考情報を提供します。

各種分析情報の提供

i板(ita:注文集計表)の i +アルゴリズム(Algorithm)のAlgo。その名のとおり、iAlgoは注文のアルゴリズム発注機能を提供しています。一般の発注システムでは、利用者は価格(指値)と数量などの注文条件を直接指定し、発注ボタンを押した時点で取引所に発注されます。(実際に発注するまで、端末から離れられません。)

板バランス値変化の範囲

板情報を使うのか

市場価格(現在地)の範囲

価格について条件をつけるのか

有効時間帯(または期限時間帯)

時間について条件をつけるのか

対してiAlgoは、上記3種類の条件の中から、一つまたは複数の条件を予め設定しておくと、それらの条件が成立した時点でシステムが自動的に取引所への発注処理を実行します(予約設定後は操作不要)。

また、発注価格(指値)は、 「成行(積極的)」「発注時点の現値(中立的)」「発注時点の最良気配値に指定ティック数を加算/減算した価格(保守的)」の中から選択可能となっていて、発注時の市場の状態に応じた価格で発注できます。

板バランス値や現在値は刻々と変化するため、発注タイミングを決定するためには、それらの値の変化を常時監視しておく必要があります。iAlgoの発注エンジンは、分析エンジンと連携してリアルタイムに計算される板バランス値などを監視し、発注条件を満たした注文を直ちに発注します。この他にも、特定の親注文が約定成立した場合にのみ子注文を発注する連続注文の機能もあります。

iAlgoの発注の最大の特徴は、板バランスの変化を捉えた自動発注という独自の機能にありますが、現在値や時刻など一般的な条件でも指定可能であり、連続注文などのバリエーションも合わせて、柔軟な発注計画の立案と実行が可能になっています。

過去データを使ったシミュレーション機能

板情報という新しい情報を活用するためには、過去データにおいて注文状態変化がどのようなタイミングで発生したかを知ることが重要です。iAlgoではユーザーが、以下の2つを設定することによって、過去1ヶ月間の注文状態情報を使ったシミュレーション結果を即座に算出します。

買注文の増加(正)と売注文の増加(負)のどちらを調べたいのか

注文状態変化の度合い(多くの銘柄では2~3ほど)

具体的なシミュレーション結果は、ユーザーが設定した注文状態変化について、「①1日当り何回発生するのか」「②日中の平均価格(TWAP)と比べて高いのか、安いのか」「③その状態が発生した時にその日の終値は上がったのか、下がったのか」を出力します。以上の結果が永続的に続くわけではありませんが、対象とする銘柄の注文状態変化を知るヒントになりえるのです。