以下に本発明の実施の形態を図面に基づいて説明する。
図1は、本発明の実施の形態の約定シミュレーションシステム1のハードウェア構成のブロック図である。
約定シミュレーションシステム1は、CPU10、メモリ11、記憶装置(HDD)12、インタフェース13及び通信制御装置14を備える。
CPU10は、メモリ11に記憶されるプログラムを実行することによって、各種処理を行う。メモリ11は、CPU10によって実行されるプログラム及びCPU10によって必要とされる情報などを一時的に記憶する。例えば、メモリ11には、HDD12から読み出されたプログラム及び情報が記憶される。
HDD12は、各種プログラム及び各種情報などを記憶する。例えば、HDD12は、後述するTICK原データ21、分解後注文ファイル23、シミュレーションパラメータ28及び結果ファイル29を記憶する。
インタフェース13は、入力装置15及びディスプレイ16などに接続される。入力装置15は、ユーザによって入力された情報を、インタフェース13を介してCPU10に送信する。ディスプレイ16は、CPU10によって指示された情報を表示する。
通信制御装置14は、LAN又はインターネットなどのネットワーク17を介して、アルゴリズム取引システムに接続される。アルゴリズム取引システムは、CPU、メモリ及びインタフェースを備え、アルゴリズム取引プログラムを実行する計算機である。
図2は、本発明の実施の形態の約定シミュレーションシステム1の機能構成のブロック図である。図3は、本発明の実施の形態の約定シミュレーションシステム1の処理の概要のフローチャートである。
約定シミュレーションシステム1は、TICK原データ21を予め記憶している。TICK原データ21は、現実の市場におけるTICKデータの履歴である。TICKデータは、ある時刻における証券の値動きに関する情報である。なお、TICK原データ21及びTICKデータについては、図4で詳細を説明する。
まず、アルゴリズム取引システムは、約定シミュレーションシステム1に予めログオンしておく。その後、約定シミュレーションシステム1は、起動パラメータ24を含む起動コマンドを受けると、当該シミュレーションを開始する。なお、起動パラメータ24は、銘柄コード、対象年月日、開始時刻及び終了時刻を含む。
具体的には、約定シミュレーションシステム1は、起動パラメータ24に含まれる対象年月日における、起動パラメータ24に含まれる開始時刻から起動パラメータ24に含まれる終了時刻まで、起動パラメータ24に含まれる銘柄コードによって識別される銘柄の株をアルゴリズム取引システムに取り引きさせた場合のシミュレーションを行う。
まず、約定シミュレーションシステム1は、TICK原データ21及び起動パラメータ24に基づいて、注文分解処理22を実行する。なお、約定シミュレーションシステム1によって実行される注文分解処理22については、図9で詳細を説明する。
約定シミュレーションシステム1は、注文分解処理を実行することによって、分解後注文ファイル23を作成する。分解後注文ファイル23は、起動パラメータ24に含まれる銘柄コードによって識別される銘柄の株に対する注文の履歴を示す。
但し、分解後注文ファイル23は、現実の市場における注文の履歴を示すのではなく、約定シミュレーションシステム1が注文分解処理22を実行することによって推定した仮想的な注文の履歴を示す。例えば、一つの仮想的な注文は、現実の市場において同時期に発生した複数の注文がまとめられたものである。また、仮想的な注文が、成行注文であっても、現実の市場においては指値注文の場合もある。なお、分解後注文ファイル23については、図5で詳細を説明する。
次に、約定シミュレーションシステム1は、ワーク板登録・約定シミュレート処理25を実行する。ワーク板登録・約定シミュレート処理25は、TICK注文登録処理251、アルゴ注文登録処理255及び約定シミュレート処理259などを含む。なお、約定シミュレーションシステム1によって実行されるワーク板登録・約定シミュレート処理25については、図11で詳細を説明する。
TICK注文登録処理251では、約定シミュレーションシステム1は、作成した分解後注文ファイル23に基づいて、当該シミュレーションにおける株の値動きを示すワーク板26(シミュレーション用ワーク板26)を作成又は更新する。
ワーク板26は、起動パラメータ24に含まれる銘柄コードによって識別される銘柄の株に関する注文状況を示す論理的な板であり、メモリ11に記憶される。そのため、ワーク板26は、値段ごとに、売り注文の株数及び買い注文の株数を示す。なお、ワーク板26については、図8で詳細を説明する。
具体的には、約定シミュレーションシステム1は、分解後注文ファイル23に含まれる仮想的な注文(TICK注文)を、時系列に従って、シミュレーション用ワーク板26に登録する。このとき、約定シミュレーションシステム1は、アルゴリズム取引システムからの注文(アルゴ注文)による影響の大きさを示すマーケットインパクトを考慮して、TICK注文を、シミュレーション用ワーク板26に登録する。
例えば、約定シミュレーションシステム1は、シミュレーションパラメータ28に基づいて、マーケットインパクトを算出する。なお、シミュレーションパラメータ28については、図12で詳細を説明する。
また、約定シミュレーションシステム1は、TICK復元処理252を行う。TICK復元処理では、約定シミュレーションシステム1は、シミュレーション用ワーク板26の変化を監視する。シミュレーション用ワーク板26に変化がある度に、約定シミュレーションシステム1は、シミュレーション用ワーク板26から変化情報を抽出する。そして、約定シミュレーションシステム1は、抽出した変化情報に基づいて、シミュレーションにおけるTICKデータを作成する。
なお、シミュレーションにおけるTICKデータは、アルゴ注文を受ける前では、TICK原データ21に含まれるものと同一となる。一方、アルゴ注文を受けた後では、シミュレーションにおけるTICKデータは、TICK注文及びアルゴ注文の双方に応じた値動き情報となる。
次に、約定シミュレーションシステム1は、作成したシミュレーションにおけるTICKデータを、汎用プロトコルからFIXプロトコルに変換する。そして、約定シミュレーションシステムは、プロトコル変換されたTICKデータを相場情報として、アルゴリズム取引システムに送信する(253)。
なお、汎用プロトコルは、約定シミュレーションシステム1が対応可能なプロトコルである。また、FIXプロトコルは、リアルタイムで迅速に金融データを送受信するための金融業界標準のプロトコルである。そのため、FIXプロトコルは、注文、約定、注文取消などが行われるトレーディングで最も利用されている。
アルゴリズム取引システムは、TICKデータを約定シミュレーションシステム1から受信する。すると、アルゴリズム取引システムは、受信したTICKデータを分析する。次に、アルゴリズム取引システムは、分析結果に基づいて、当該銘柄の注文内容を決定する。そして、アルゴリズム取引システムは、決定した内容の注文を、約定シミュレーションシステム1にFIXプロトコルで送信する。
約定シミュレーションシステム1は、注文をアルゴリズム取引システムから受信する(254)。すると、約定シミュレーションシステム1は、受信したアルゴ注文を、FIXプロトコルから汎用プロトコルに変換する。更に、約定シミュレーションシステム1は、アルゴリズム取引システムから送信されたアルゴ注文を正常に受信できたか否かを判定する。
アルゴ注文を正常に受信できなかった場合、約定シミュレーションシステム1は、注文受付エラー通知を作成する。次に、約定シミュレーションシステム1は、作成した注文受付エラー通知を、汎用プロトコルからFIXプロトコルに変換する。そして、約定シミュレーションシステム1は、プロトコル変換された注文受付エラー通知を、アルゴリズム取引システムに送信する(257)。
一方、アルゴ注文を正常に受信できた場合、約定シミュレーションシステム1は、当該アルゴ注文の一意な識別子を含む注文受付通知を作成する。次に、約定シミュレーションシステム1は、作成した注文受付通知を、汎用プロトコルからFIXプロトコルに変換する。そして、約定シミュレーションシステム1は、プロトコル変換された注文受付通知を、アルゴリズム取引システムに送信する(256)。
次に、約定シミュレーションシステム1は、アルゴ注文登録処理255を実行する。
アルゴ注文登録処理255では、約定シミュレーションシステム1は、アルゴリズム取引システムから正常に受信できたアルゴ注文に基づいて、シミュレーション用ワーク板26を更新する。
まず、約定シミュレーションシステム1は、受信したアルゴ注文が論理的に正しいか否かを判定する。例えば、アルゴ注文が訂正注文又は取消注文の場合には、約定シミュレーションシステム1は、当該アルゴ注文によって訂正又は取消を要求された注文(買注文又は売注文)がシミュレーション用ワーク板26に残っているか否かを判定することによって、アルゴ注文が論理的に正しいか否かを判定する。
アルゴ注文が論理的に誤っている場合、約定シミュレーションシステム1は、当該アルゴ注文の識別子を含む執行エラー通知を作成する。次に、約定シミュレーションシステム1は、作成した執行エラー通知を、汎用プロトコルからFIXプロトコルに変換する。そして、約定シミュレーションシステム1は、プロトコル変換した執行エラー通知を、アルゴリズム取引システムに送信する(258)。
一方、アルゴ注文が論理的に正しい場合、約定シミュレーションシステム1は、受信したアルゴ注文を、時系列に従って、シミュレーション用ワーク板26に登録する。
また、約定シミュレート処理259では、約定シミュレーションシステム1は、シミュレーション用ワーク板26に登録された注文を約定させるためのシミュレーションを行う。
次に、約定シミュレーションシステム1は、シミュレーションの結果に基づいて、シミュレーションにおけるTICKデータを作成する。そして、約定シミュレーションシステム1は、作成したTICKデータを、結果ファイル29に格納する。そのため、結果ファイル29は、シミュレーションにおいて作成されたTICKデータの履歴となる。なお、結果ファイル29及びシミュレーションにおけるTICKデータについては、図6で詳細を説明する。
また、約定シミュレート処理259においてアルゴ注文が約定した場合、約定シミュレーションシステム1は、約定価格及び約定高を含む約定通知を作成する。なお、約定通知については、図7で詳細を説明する。
次に、約定シミュレーションシステム1は、作成した約定通知を、汎用プロトコルからFIXプロトコルに変換する。そして、約定シミュレーションシステム1は、プロトコル変換された約定通知を、アルゴリズム取引システムに送信する(27)。
更に、約定シミュレーションシステム1は、作成した約定通知に含まれる情報を、アルゴ注文の約定に関する情報として、結果ファイル29に格納する。
その後、約定シミュレーションシステム1によるシミュレーションが終了すると、アルゴリズム取引システムは、約定シミュレーションシステム1からログアウトする。
図4は、本発明の実施の形態の約定シミュレーションシステム1に記憶されるTICK原データ21の構成図である。
約定シミュレーションシステム1は、現実の市場での取引日ごとにTICK原データ21を記憶する。そのため、TICK原データ21では、特定の取引日におけるTICKデータ210が時系列に従って並んでいる。また、TICK原データ21は、現実の市場におけるTICKデータ210の履歴を銘柄ごとに含む。
現実の市場におけるTICKデータ210は、取引日2100、時刻2101、銘柄コード2102、レコード通番2103、現値2104、約定高2105、売気配値2106、買気配値2107、売気配数量2108及び買気配数量2109を含む。
取引日2100は、当該TICKデータ210が作成された日付けを示す。時刻2101は、当該TICKデータ210が作成された時刻を示す。つまり、取引日2100及び時刻2101は、当該TICKデータ210が現実の市場のいつの時点における値動き情報であるかを示す。
銘柄コード2102は、当該TICKデータ210に対応する銘柄の一意な識別子である。レコード通番2103は、当該TICKデータ210を識別するための通し番号である。
現値2104は、当該TICKデータ210が作成された時刻における株価である。具体的には、現値2104は、当該取引日2100及び当該時刻2101における、当該銘柄コード2102によって識別される銘柄の株価を示す。
約定高2105は、前回のTICKデータ210の作成時から今回のTICKデータ210の作成時までの間に、当該銘柄コード2102によって識別される銘柄の株が約定した株数を示す。
売気配値2106は、売注文で指定された価格(気配値)である。なお、TICKデータ210に含まれる売気配値2106は、前回のTICKデータ210の作成時から今回のTICKデータ210の作成時までの間に売気配数量が変化した(新たな売注文が入った)気配値である。
売気配数量2108は、売気配値2106での売注文の総株数を示す。
なお、売気配値2106及び売気配数量2108は、TICKデータ210に複数含まれていてもよい。この場合、一つの売気配値2106と一つの売気配数量2108とが対応する。そして、売気配数量2108は、当該売気配数量2108に対応する売気配値2106での売注文の総株数を示す。
買気配値2107は、買注文で指定された気配値である。なお、TICKデータ210に含まれる買気配値2107は、前回のTICKデータ210の作成時から今回のTICKデータ210の作成時までの間に買気配数量が変化した(新たな買注文が入った)気配値である。
買気配数量2109は、買気配値2107での買注文の総株数を示す。
なお、買気配値2107及び買気配数量2109は、TICKデータ210に複数含まれていてもよい。この場合、一つの買気配値2107と一つの買気配数量2109とが対応する。そして、買気配数量2109は、当該買気配数量2109に対応する買気配値2107での買注文の総株数を示す。
図5は、本発明の実施の形態の約定シミュレーションシステム1に記憶される分解後注文ファイル23の構成図である。
分解後注文ファイル23は、時刻231、種別232、値段233及び数量234を含む。また、分解後注文ファイル23に含まれる一つのレコードは、約定シミュレーションシステム1によって推定された一つの仮想的な注文に関する情報を示す。
時刻231は、当該レコードに対応する仮想的な注文がされた時を示す。種別232は、当該レコードに対応する仮想的な注文の種類を示す。具体的には、種別232は、当該レコードに対応する仮想的な注文が、売注文、買注文、売訂正注文、買訂正注文、売取消注文又は買取消注文のいずれであるかを示す。
値段233は、当該レコードに対応する仮想的な注文で指定された価格を示す。なお、当該仮想的な注文が指値注文ではなく成行注文の場合には、値段233は、成行注文であることを示す。
数量234は、当該レコードに対応する仮想的な注文で指定された株数を示す。
図6は、本発明の実施の形態の約定シミュレーションシステム1に記憶される結果ファイル29に含まれるTICKデータ291の構成図である。
結果ファイル29は、シミュレーションにおいて作成されたTICKデータ291の履歴を示す。そのため、結果ファイル29では、シミュレーションにおいて作成されたTICKデータ291が時系列に従って並んでいる。
シミュレーションによって作成されたTICKデータ291は、取引日2910、時刻2911、銘柄コード2912、レコード通番2913、現値2914、約定高2915、売気配値2916、買気配値2917、売気配数量2918及び買気配数量2919を含む。
取引日2910は、シミュレーション対象となる取引が行われた日付けを示す。時刻2911は、当該TICKデータ291が作成された時刻を示す。なお、時刻2911は、現実の時刻ではなく、過去に実際に行われた取引において株取引をシミュレーションした場合における時刻(シミュレーション上の時刻)を示す。つまり、取引日2910及び時刻2911は、当該TICKデータ291が、シミュレーション上のいつの時点における値動き情報であるかを示す。
銘柄コード2912は、当該TICKデータ291に対応する銘柄の一意な識別子である。レコード通番2913は、当該TICKデータ291を識別するための通し番号である。
現値2914は、当該TICKデータ291が作成された時刻における株価である。具体的には、現値2914は、当該取引日2910及び当該時刻2911における、当該銘柄コード2912によって識別される銘柄の株価を示す。
約定高2915は、前回のTICKデータ291の作成時から今回のTICKデータ291の作成時までの間に、当該銘柄コード2912によって識別される銘柄の株が約定した株数を示す。
売気配値2916は、売注文で指定された気配値である。なお、TICKデータ291に含まれる売気配値2916は、前回のTICKデータ291の作成時から今回のTICKデータ291の作成時までの間に売気配数量が変化した(新たな売注文が入った)気配値である。
売気配数量2918は、売気配値2916での売注文の総株数を示す。
なお、売気配値2916及び売気配数量2918は、TICKデータ291に複数含まれていてもよい。この場合、一つの売気配値2916と一つの売気配数量2918とが対応する。そして、売気配数量2918は、当該売気配数量2918に対応する売気配値2916での売注文の総株数を示す。
買気配値2917は、買注文で指定された気配値である。なお、TICKデータ291に含まれる買気配値2917は、前回のTICKデータ291の作成時から今回のTICKデータ291の作成時までの間に買気配数量が変化した(新たな買注文が入った)気配値である。
買気配数量2919は、買気配値2917での買注文の総株数を示す。
なお、買気配値2917及び買気配数量2919は、TICKデータ291に複数含まれていてもよい。この場合、一つの買気配値2917と一つの買気配数量2919とが対応する。そして、買気配数量2919は、当該買気配数量2919に対応する買気配値2917での買注文の総株数を示す。
図7は、本発明の実施の形態の約定シミュレーションシステム1からアルゴリズム取引システムに送信される約定通知292の構成図である。
約定通知292は、アルゴ注文の約定をアルゴリズム取引システムに通知するためのものである。約定通知292は、銘柄コード2921、値段2922、数量2923、売買区分2924、注文ID2925及び時刻2926を含む。
銘柄コード2921は、約定したアルゴ注文で指定された銘柄の一意な識別子である。値段2922は、アルゴ注文が約定した価格である。数量2923は、アルゴ注文が約定した株数である。
つまり、約定通知292は、銘柄コード2921によって識別される銘柄の株が、値段2922で数量2923だけ約定したことを通知する。
売買区分2924は、約定したアルゴ注文の種類を示す。つまり、売買区分2924は、約定したアルゴ注文が買注文又は売注文のいずれであるかを示す。注文ID2925は、約定したアルゴ注文の一意な識別子である。時刻2926は、当該アルゴ注文が約定した時刻を示す。
なお、約定通知292は、約定シミュレーションシステム1からアルゴリズム取引システムに送信されるだけでなく、アルゴ注文の約定に関する情報として、結果ファイル29に格納される。
図8は、本発明の実施の形態の約定シミュレーションシステム1に記憶されるワーク板26の構成図である。
ワーク板26は、気配値261、売気配数量262及び買気配数量263を含む。
気配値261は、売注文又は買注文で指定された価格である。売気配数量262は、当該レコードの気配値261での売注文の総株数を示す。買気配数量263は、当該レコードの気配値261での買注文の総株数を示す。
なお、ワーク板26の最上位のレコードは、成行注文に関する情報を示す。この場合、成行注文に関する情報を示すレコードの売気配数量262は、成り行きでの売注文の総株数を示す。また、成行注文に関する情報を示すレコードの買気配数量263は、成り行きでの買注文の総株数を示す。
図9は、本発明の実施の形態の約定シミュレーションシステム1によって実行される注文分解処理22のフローチャートである。
まず、約定シミュレーションシステム1は、起動パラメータ24に含まれる対象年月日における、起動パラメータ24に含まれる開始時刻から起動パラメータ24に含まれる終了時刻までの、起動パラメータ24に含まれる銘柄コードによって識別される銘柄に関するすべてのTICKデータ210を、TICK原データ21から選択する。
具体的には、約定シミュレーションシステム1は、起動パラメータ24に含まれる対象年月日とTICKデータ210の取引日2100とが一致するTICKデータ210を、TICK原データ21から選択する。次に、約定シミュレーションシステム1は、TICKデータ210の時刻2101が、起動パラメータ24に含まれる開始時刻から終了時刻までの間に該当するTICKデータ210を、選択したTICKデータ210の中から選択する。そして、約定シミュレーションシステム1は、起動パラメータ24に含まれる銘柄コードとTICKデータ210の銘柄コード2102とが一致するTICKデータ210を、選択したTICKデータ210の中から選択する。
次に、約定シミュレーションシステム1は、選択したTICKデータ210を、作成された時刻が古いものから順に一つずつ取得する。具体的には、約定シミュレーションシステム1は、TICKデータ210のレコード通番2103が小さいものから順に、選択したTICKデータ210を取得する。又は、約定シミュレーションシステム1は、TICKデータ210の時刻2101が古い物から順に、選択したTICKデータ210を取得する(301)。
次に、約定シミュレーションシステム1は、取得したTICKデータ210及び前回のステップ302で作成されたワーク板26(前回ワーク板26)に基づいて、新たなワーク板26(今回ワーク板26)を作成する(302)。
具体的には、約定シミュレーションシステム1は、取得したTICKデータ210の売気配値2106と前回ワーク板26の気配値261とが一致するレコードを、前回ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの売気配数量262に、取得したTICKデータ210の売気配数量2108を格納する。
次に、約定シミュレーションシステム1は、取得したTICKデータ210の買気配値2107と前回ワーク板26の気配値261とが一致するレコードを、前回ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの買気配数量263に、取得したTICKデータ210の買気配数量2109を格納する。
これによって、約定シミュレーションシステム1は、今回ワーク板26を作成する。
次に、約定シミュレーションシステム1は、前回ワーク板26に対応する時刻から今回ワーク板26に対応する時刻までの間に、注文が約定したか否かを判定する(303)。
具体的には、約定シミュレーションシステム1は、取得したTICKデータ210の約定高2105に「0」が格納されているか否かを判定する。
約定高2105に「0」が格納されている場合、約定シミュレーションシステム1は、前回ワーク板26に対応する時刻から今回ワーク板26に対応する時刻までの間に、注文が約定していないと判定する。この場合、約定シミュレーションシステム1は、そのままステップ305に進む。
一方、約定高2105に「0」以外の値が格納されている場合、約定シミュレーションシステム1は、前回ワーク板26に対応する時刻から今回ワーク板26に対応する時刻までの間に、注文が約定したと判定する。この場合、約定シミュレーションシステム1は、取得したTICKデータ210及び今回ワーク板26に基づいて、注文が約定する直前のワーク板26(約定直前ワーク板26)を作成する。
具体的には、約定シミュレーションシステム1は、取得したTICKデータ210の現値2104と今回ワーク板26の気配値261とが一致するレコードを、今回ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの売気配数量262又は買気配数量263のいずれか一方に、取得したTICKデータ210の約定高2105を加算する。なお、約定シミュレーションシステム1は、前回ワーク板26及び今回ワーク板26とを比較することによって、取得したTICKデータ210の約定高2105を、売気配数量262又は買気配数量263のいずれに加算するかを決定する。
次に、約定シミュレーションシステム1は、成行注文に関する情報を示すレコードを、今回ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの売気配数量262及び買気配数量263のうちのもう一方に、取得したTICKデータ210の約定高2105を加算する。
これによって、約定シミュレーションシステム1は、約定直前ワーク板26を作成する(304)。
なお、約定シミュレーションシステム1は、約定直前に入った注文を成行注文と仮定して、約定直前ワーク板26を作成する。よって、約定直前に入った注文が、実際には指値注文の場合もある。
次に、約定シミュレーションシステム1は、前回ワーク板26と今回ワーク板26又は約定直前ワーク板26とを比較する(305)。これによって、約定シミュレーションシステム1は、仮想的な注文(TICK注文)を推定し、推定したTICK注文を分解後注文ファイル23に格納する(306)。
前回ワーク板26に対応する時刻から今回ワーク板26に対応する時刻までの間に約定していない場合、約定シミュレーションシステム1は、前回ワーク板26と今回ワーク板26とを比較する。そのため、約定シミュレーションシステム1は、前回ワーク板26及び今回ワーク板26の双方を記憶している。
一方、前回ワーク板26に対応する時刻から今回ワーク板26に対応する時刻までの間に約定した場合、約定シミュレーションシステム1は、前回ワーク板26と約定直前ワーク板26とを比較する。そのため、約定シミュレーションシステム1は、前回ワーク板26及び約定直前ワーク板26の双方を記憶している。
ここでは、前回ワーク板26と今回ワーク板26とを比較する処理について説明するが、前回ワーク板26と約定直前ワーク板26とを比較する処理も同一である。
約定シミュレーションシステム1は、前回ワーク板26の気配値261と今回ワーク板26の気配値261とが一致するレコードを、前回ワーク板26及び今回ワーク板26の双方から順番に選択する。そして、約定シミュレーションシステム1は、選択したレコードごとに、以下の処理を行う。
約定シミュレーションシステム1は、前回ワーク板26から選択したレコードの売気配数量262と今回ワーク板26から選択したレコードの売気配数量262とが一致するか否かを判定する。
二つの売気配数量262が一致する場合、前回ワーク板26又は今回ワーク板26から選択したレコードの気配値261での売注文は新たに発生してない。よって、約定シミュレーションシステム1は、分解後注文ファイル23を更新しない。
一方、二つの売気配数量262が一致しない場合、前回ワーク板26又は今回ワーク板26から選択したレコードの気配値261での売注文が新たに発生している。そのため、約定シミュレーションシステム1は、売注文(TICK注文)を生成する。
具体的には、約定シミュレーションシステム1は、今回ワーク板26から選択したレコードの売気配数量262から、前回ワーク板26から選択したレコードの売気配数量262を減算することによって、売注文の株数を算出する。そして、約定シミュレーションシステム1は、選択したレコードの気配値261で、算出した株数の売注文を生成する。
そして、約定シミュレーションシステム1は、生成した売注文に関する情報を、分解後注文ファイル23に格納する。
具体的には、約定シミュレーションシステム1は、分解後注文ファイル23に新たなレコードを追加する。
次に、約定シミュレーションシステム1は、新たなレコードの時刻231に、ステップ301で取得したTICKデータ210の時刻2101を格納する。
次に、約定シミュレーションシステム1は、算出した売注文の株数が正の値であるか否かを判定する。売注文の株数が正の値である場合、約定シミュレーションシステム1は、新たなレコードの種別232に、売注文であることを示す情報を格納する。一方、算出した売注文の株数が負の値である場合、約定シミュレーションシステム1は、新たなレコードの種別232に、売訂正注文であることを示す情報又は売取消注文であることを示す情報を格納する。
次に、約定シミュレーションシステム1は、前回ワーク板26又は今回ワーク板26から選択したレコードの気配値261を、新たなレコードの値段233に格納する。次に、約定シミュレーションシステム1は、算出した売注文の株数を、新たなレコードの数量234に格納する。
これによって、約定シミュレーションシステム1は、生成した売注文に関する情報を、分解後注文ファイル23に格納する。
次に、約定シミュレーションシステム1は、前回ワーク板26から選択したレコードの買気配数量263と今回ワーク板26から選択したレコードの買気配数量263とが一致するか否かを判定する。
二つの買気配数量263が一致する場合、前回ワーク板26又は今回ワーク板26から選択したレコードの気配値261での買注文は新たに発生してない。よって、約定シミュレーションシステム1は、分解後注文ファイル23を更新しない。
一方、二つの買気配数量263が一致しない場合、前回ワーク板26又は今回ワーク板26から選択したレコードの気配値261での買注文が新たに発生している。そのため、約定シミュレーションシステム1は、買注文(TICK注文)を生成する。
具体的には、約定シミュレーションシステム1は、今回ワーク板26から選択したレコードの買気配数量263から、前回ワーク板26から選択したレコードの買気配数量263を減算することによって、買注文の株数を算出する。そして、約定シミュレーションシステム1は、選択したレコードの気配値261で、算出した株数の買注文を生成する。
そして、約定シミュレーションシステム1は、生成した買注文に関する情報を、分解後注文ファイル23に格納する。
具体的には、約定シミュレーションシステム1は、分解後注文ファイル23に新たなレコードを追加する。
次に、約定シミュレーションシステム1は、新たなレコードの時刻231に、ステップ301で取得したTICKデータ210の時刻2101を格納する。
次に、約定シミュレーションシステム1は、算出した買注文の株数が正の値であるか否かを判定する。買注文の株数が正の値である場合、約定シミュレーションシステム1は、新たなレコードの種別232に、買注文であることを示す情報を格納する。一方、算出した買注文の株数が負の値である場合、約定シミュレーションシステム1は、新たなレコードの種別232に、買訂正注文であることを示す情報又は買取消注文であることを示す情報を格納する。
次に、約定シミュレーションシステム1は、前回ワーク板26又は今回ワーク板26から選択したレコードの気配値261を、新たなレコードの値段233に格納する。次に、約定シミュレーションシステム1は、算出した買注文の株数を、新たなレコードの数量234に格納する。
これによって、約定シミュレーションシステム1は、生成した買注文に関する情報を、分解後注文ファイル23に格納する。
次に、約定シミュレーションシステム1は、選択したTICKデータ210のすべてを、ステップ301において取得したか否かを判定する。
選択したTICKデータ210の一つでも取得してない場合、約定シミュレーションシステム1は、ステップ301に戻り、処理を繰り返す。
一方、選択したTICKデータ210のすべてを取得した場合、約定シミュレーションシステム1は、当該注文分解処理22を終了する。
次に、約定シミュレーションシステム1によって実行される注文分解処理22の具体例を説明する。
図10は、本発明の実施の形態の約定シミュレーションシステム1によって実行される注文分解処理22の説明図である。
本説明図では、約定シミュレーションシステム1が、時刻2101が「10時00分00秒」のTICKデータ210及び時刻2101が「10時00分02秒」のTICKデータ210を取得した場合を説明する。
時刻2101が「10時00分00秒」のTICKデータ210は、504円での売注文の総株数が6株に、500円での売注文の総株数が3株に、499円での買注文の総株数が16株に、498円での買注文の総株数が7株に変更されたことを示す。
また、時刻2101が「10時00分02秒」のTICKデータ210は、500円で3株約定したことを示す。更に、時刻2101が「10時00分02秒」のTICKデータ210は、500円での売注文の総株数が0株に変更されたことを示す。
まず、約定シミュレーションシステム1は、時刻2101が「10時00分00秒」のTICKデータ210を取得したとする。
すると、約定シミュレーションシステム1は、当該TICKデータ210を取得する直前のワーク板26(前回ワーク板26)及び取得したTICKデータ210に基づいて、今回ワーク板26を作成する。作成された今回ワーク板26は、504円での売注文の総株数が6株であり、500円での売注文の総株数が3株であり、499円での買注文の総株数が16株であり、且つ、498円での買注文の総株数が7株であることを示す。
また、前回ワーク板26は、504円での売注文の総株数が4株であり、500円での売注文の総株数が0株であり、499円での買注文の総株数が10株であり、且つ、498円での買注文の総株数が12株であることを示す。
次に、約定シミュレーションシステム1は、前回ワーク板26と今回ワーク板26とを比較することによって、新たに発生した注文を推定する。
具体的には、約定シミュレーションシステム1は、今回ワーク板26が示す6株から、前回ワーク板26が示す4株を減算することによって、504円で2株の売注文が新たに発生したと推定する。
また、約定シミュレーションシステム1は、今回ワーク板26が示す3株から、前回ワーク板26が示す0株を減算することによって、500円で3株の売注文が新たに発生したと推定する。
また、約定シミュレーションシステム1は、今回ワーク板26が示す16株から、前回ワーク板26が示す10株を減算することによって、499円で6株の買注文が新たに発生したと推定する。
また、約定シミュレーションシステム1は、今回ワーク板26が示す7株から、前回ワーク板26が示す12株を減算することによって、498円で−5株の買訂正注文が新たに発生したと推定する。
そして、約定シミュレーションシステム1は、推定した新たな注文を、分解後注文ファイル23に格納する。
次に、約定シミュレーションシステム1は、時刻2101が「10時00分02秒」のTICKデータ210を取得したとする。
すると、約定シミュレーションシステム1は、時刻2101が「10時00分00秒」のTICKデータ210を取得した際に作成したワーク板26(前回ワーク板26)及び取得したTICKデータ210に基づいて、今回ワーク板26を作成する。作成された今回ワーク板26は、500円での売注文の総株数が0株であることを示す。
次に、約定シミュレーションシステム1は、作成した今回ワーク板26及び取得したTICKデータ210に基づいて、約定直前ワーク板26を作成する。このとき、約定シミュレーションシステム1は、500円での売注文の総株数が0株に変更されたのは、売訂正注文又は売取消注文によるものではなく、注文の約定によるものと推定する。そのため、作成された約定直前ワーク板26は、500円での売注文の総株数が3株であること、且つ、成行での買注文が3株であることを示す。
また、前回ワーク板26は、500円での売注文の総株数が3株であること、且つ、成行での買注文が0株であることを示す。
次に、約定シミュレーションシステム1は、前回ワーク板26と約定直前ワーク板26とを比較することによって、新たに発生した注文を推定する。
具体的には、約定シミュレーションシステム1は、今回ワーク板26が示す3株から、前回ワーク板26が示す0株を減算することによって、成行で3株の買注文が新たに発生したと推定する。
そして、約定シミュレーションシステム1は、推定した新たな注文を、分解後注文ファイル23に格納する。
約定シミュレーションシステム1は、注文分解処理22において、このような処理を繰り返す。
図11は、本発明の実施の形態の約定シミュレーションシステム1によって実行されるワーク板登録・約定シミュレート処理25のフローチャートである。
約定シミュレーションシステム1は、時系列に従って、アルゴ注文又はTICK注文を、当該シミュレーションにおける値動きを示すワーク板26(シミュレーション用ワーク板26)に登録する。約定シミュレーションシステム1は、アルゴ注文又はTICK注文をシミュレーション用ワーク板26に登録しようとする度に、当該ワーク板登録・約定シミュレート処理25を実行する。
まず、約定シミュレーションシステム1は、シミュレーション用ワーク板26に登録しようとする注文が、アルゴ注文又はTICK注文のいずれであるかを判定する(311)。
シミュレーション用ワーク板26にTICK注文を登録しようとする場合、約定シミュレーションシステム1は、シミュレーションパラメータ28に基づいて、TICK注文発生時におけるマーケットインパクトを算出する。
図12は、本発明の実施の形態の約定シミュレーションシステム1によって算出されるマーケットインパクトΔPの説明図である。
マーケットインパクトΔPは、アルゴ注文の約定による影響の大きさを示す値である。そのため、マーケットインパクトΔPは、アルゴ注文の約定時刻t0からの時間の経過と共に指数的に減衰するのが好ましい。例えば、マーケットインパクトΔPは、減衰係数Tに従って減衰する。
更に、マーケットインパクトΔPは、初期インパクトP0の一定比率(恒久インパクト比率P)が恒久的に残るのが好ましい。なお、初期インパクトP0は、アルゴ注文の約定時刻t0におけるマーケットインパクトであり、ワーク板登録・約定シミュレート処理25のステップ317で算出される。言い換えると、t0は、初期インパクトP0の発生時刻である。
なお、減衰係数T及び恒久インパクト比率Pは、シミュレーションパラメータ28に含まれる。
例えば、約定シミュレーションシステム1は、数式1を用いて、TICK注文発生時刻tにおけるマーケットインパクトΔP(t)を算出する。
ここで、図11に戻る。
約定シミュレーションシステム1は、マーケットインパクトを算出すると、算出したマーケットインパクトを四捨五入して整数にする。そして、約定シミュレーションシステム1は、整数化したマーケットインパクトを、登録しようとするTICK注文で指定された価格に反映する(312)。
具体的には、約定シミュレーションシステム1は、算出したマーケットインパクトを発生させたアルゴ注文が売注文又は買注文のいずれであるかを判定する。
アルゴ注文が売注文の場合、約定シミュレーションシステム1は、登録しようとするTICK注文で指定された価格から、整数化されたマーケットインパクトを減算することによって、登録価格を算出する。
一方、アルゴ注文が買注文の場合、約定シミュレーションシステム1は、登録しようとするTICK注文で指定された価格に、整数化されたマーケットインパクトを加算することによって、登録価格を算出する。
そして、約定シミュレーションシステム1は、算出した登録価格に基づいて、TICK注文をシミュレーション用ワーク板26に登録する(314)。
具体的には、TICK注文が売注文の場合、約定シミュレーションシステム1は、算出した登録価格とシミュレーション用ワーク板26の気配値261とが一致するレコードを、シミュレーション用ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの売気配数量262に、当該TICK注文で指定された株数を加算する。
一方、TICK注文が売訂正注文又は売取消注文の場合、約定シミュレーションシステム1は、算出した登録価格とシミュレーション用ワーク板26の気配値261とが一致するレコードを、シミュレーション用ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの売気配数量262から、当該TICK注文で指定された株数を減算する。
一方、TICK注文が買注文の場合、約定シミュレーションシステム1は、算出した登録価格とシミュレーション用ワーク板26の気配値261とが一致するレコードを、シミュレーション用ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの買気配数量263に、当該TICK注文で指定された株数を加算する。
一方、TICK注文が買訂正注文又は買取消注文の場合、約定シミュレーションシステム1は、算出した登録価格とシミュレーション用ワーク板26の気配値261とが一致するレコードを、シミュレーション用ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの買気配数量263から、当該TICK注文で指定された株数を減算する。
以上のように、約定シミュレーションシステム1は、算出した登録価格に基づいて、TICK注文をシミュレーション用ワーク板26に登録する。
なお、約定シミュレーションシステム1は、これまでにアルゴ注文をシミュレーション用ワーク板26に登録していない場合、TICK注文で指定された価格を、登録価格とする。つまり、約定シミュレーションシステム1は、マーケットインパクトを考慮せずに(通常通りに)、TICK注文をシミュレーション用ワーク板26に登録する。
一方、シミュレーション用ワーク板26にアルゴ注文を登録しようとする場合、約定シミュレーションシステム1は、登録しようとするアルゴ注文が論理的に正しいか否かを判定する(313)。例えば、アルゴ注文が訂正注文又は取消注文の場合には、約定シミュレーションシステム1は、当該アルゴ注文によって訂正又は取消を要求された注文がシミュレーション用ワーク板26に残っているか否かを判定することによって、アルゴ注文が論理的に正しいか否かを判定する。
アルゴ注文が論理的に誤っている場合、約定シミュレーションシステム1は、当該アルゴ注文の識別子を含む執行エラー通知を作成する。次に、約定シミュレーションシステム1は、作成した執行エラー通知を、アルゴリズム取引システムに送信する。そして、約定シミュレーションシステム1は、当該ワーク板登録・約定シミュレート処理25を終了する。
一方、アルゴ注文が論理的に正しい場合、約定シミュレーションシステム1は、アルゴ注文を、シミュレーション用ワーク板26に登録する(314)。
具体的には、アルゴ注文が売注文の場合、約定シミュレーションシステム1は、当該アルゴ注文で指定された価格とシミュレーション用ワーク板26の気配値261とが一致するレコードを、シミュレーション用ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの売気配数量262に、当該アルゴ注文で指定された株数を加算する。
一方、アルゴ注文が売訂正注文又は売取消注文の場合、約定シミュレーションシステム1は、当該アルゴ注文で指定された価格とシミュレーション用ワーク板26の気配値261とが一致するレコードを、シミュレーション用ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの売気配数量262から、当該アルゴ注文で指定された株数を減算する。
一方、アルゴ注文が買注文の場合、約定シミュレーションシステム1は、当該アルゴ注文で指定された価格とシミュレーション用ワーク板26の気配値261とが一致するレコードを、シミュレーション用ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの買気配数量263に、当該アルゴ注文で指定された株数を加算する。
一方、アルゴ注文が買訂正注文又は買取消注文の場合、約定シミュレーションシステム1は、当該アルゴ注文で指定された価格とシミュレーション用ワーク板26の気配値261とが一致するレコードを、シミュレーション用ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの買気配数量263から、当該アルゴ注文で指定された株数を減算する。
以上のように、約定シミュレーションシステム1は、アルゴ注文をシミュレーション用ワーク板26に登録する。
次に、約定シミュレーションシステム1は、シミュレーション用ワーク板26に基づいて、注文が約定するか否かを判定する(315)。
具体的には、約定シミュレーションシステム1は、シミュレーション用ワーク板26のいずれかのレコードの売気配数量262及び買気配数量263の双方に「1」以上の値が格納されている場合、注文が約定すると判定する。更に、約定シミュレーションシステム1は、成行注文に関する情報を示すレコードの売気配数量262又は買気配数量263のいずれかに「1」以上の値が格納されている場合にも、注文が約定すると判定する。
注文が約定しない場合、約定シミュレーションシステム1は、そのままステップ318に進む。
一方、注文が約定する場合、約定シミュレーションシステム1は、シミュレーション用ワーク板26に基づいて、注文を約定させる(316)。そして、約定シミュレーションシステム1は、シミュレーション用ワーク板26の売気配数量262及び買気配数量263から、約定した株数を減算する。これによって、約定シミュレーションシステム1は、シミュレーション用ワーク板26を、約定前の状態から約定後の状態に更新する。
次に、約定シミュレーションシステム1は、約定した注文がアルゴ注文であるか否かを判定する。
約定した注文がアルゴ注文でない場合、約定シミュレーションシステム1は、そのままステップ318に進む。
一方、約定した注文がアルゴ注文である場合、約定シミュレーションシステム1は、約定価格及び約定高を含む約定通知を作成する。そして、約定シミュレーションシステム1は、作成した約定通知を、アルゴリズム取引システムに送信する。
更に、約定シミュレーションシステム1は、アルゴ注文の約定結果に基づいて、初期インパクトP0を算出する(317)。
例えば、約定シミュレーションシステム1は、シミュレーション用ワーク板26に登録されている売注文の最安値と買注文の最高値との中間値(ミッドプライス)を、当該約定直前のシミュレーション用ワーク板26及び当該約定直後のシミュレーション用ワーク板26のそれぞれで算出する。そして、約定シミュレーションシステム1は、算出した二つのミッドプライスの差(ミッドプライスの変化量)を、初期インパクトP0とする。
次に、約定シミュレーションシステム1は、更新された最新のシミュレーション用ワーク板26と当該ワーク板登録・約定シミュレート処理25が行われる直前のシミュレーション用ワーク板26とを比較することによって、シミュレーションにおけるTICKデータ291を作成する。そのため、約定シミュレーションシステム1は、更新された最新のシミュレーション用ワーク板26及び当該ワーク板登録・約定シミュレート処理25が行われる直前のシミュレーション用ワーク板26の双方を記憶している。
具体的には、約定シミュレーションシステム1は、シミュレーション上における現在の日付けを、TICKデータ291の取引日2910に格納する。次に、約定シミュレーションシステム1は、シミュレーション上における現在の時刻を、TICKデータ291の時刻2911に格納する。
次に、約定シミュレーションシステム1は、シミュレーション対象の銘柄の識別子を、TICKデータ291の銘柄コード2912に格納する。次に、約定シミュレーションシステム1は、直前に作成したTICKデータ291のレコード通番2913に「1」を加算することによって算出した値を、TICKデータ291のレコード通番2913に格納する。
次に、約定シミュレーションシステム1は、注文を約定させた価格を、TICKデータ291の現値2914に格納する。次に、約定シミュレーションシステム1は、約定した株数を、TICKデータの約定高2915に格納する。
次に、約定シミュレーションシステム1は、当該当該ワーク板登録・約定シミュレート処理25によって、シミュレーション用ワーク板26の売気配数量262が変化したレコードを、シミュレーション用ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの気配値261を、TICKデータ291の売気配値2916に格納する。次に、約定シミュレーションシステム1は、選択したレコードの売気配数量262を、TICKデータ291の売気配数量2918に格納する。
次に、約定シミュレーションシステム1は、当該当該ワーク板登録・約定シミュレート処理25によって、シミュレーション用ワーク板26の買気配数量263が変化したレコードを、シミュレーション用ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの気配値261を、TICKデータ291の買気配値2917に格納する。次に、約定シミュレーションシステム1は、選択したレコードの買気配数量263を、TICKデータ291の買気配数量2919に格納する。
以上のように、約定シミュレーションシステム1は、シミュレーションにおけるTICKデータ291を作成する(318)。次に、約定シミュレーションシステム1は、作成したTICKデータ291を、相場情報として、アルゴリズム取引システムに送信する。
更に、約定シミュレーションシステム1は、作成したTICKデータ291を、結果ファイル29に格納する。
そして、約定シミュレーションシステム1は、当該ワーク板登録・約定シミュレート処理25を終了する。
次に、約定シミュレーションシステム1によって実行されるワーク板登録・約定シミュレート処理25の具体例を説明する。
図13は、本発明の実施の形態の約定シミュレーションシステム1によって実行されるワーク板登録・約定シミュレート処理25の説明図である。
まず、アルゴ注文が入る前における約定シミュレーションシステム1の処理について説明する。
約定シミュレーションシステム1は、TICK注文を受けると、通常通り、TICK注文をシミュレーション用ワーク板26に登録する。
例えば、TICK注文が501円で3株の買注文だとする。この場合、約定シミュレーションシステム1は、シミュレーション用ワーク板26の気配値261が501円を示すレコードを、シミュレーション用ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの買気配数量263に、TICK注文で指定された株数の「3」を加算する。
更に、約定シミュレーションシステム1は、シミュレーション用ワーク板26に基づいて、注文を約定させる。
以上のように、約定シミュレーションシステム1は、TICK注文をシミュレーション用ワーク板26に登録する。
次に、アルゴ注文が入った場合の約定シミュレーションシステム1の処理について説明する。
約定シミュレーションシステム1は、アルゴ注文を受けると、アルゴ注文をシミュレーション用ワーク板26に登録する。
例えば、アルゴ注文が10株の成行の買注文だとする。すると、約定シミュレーションシステム1は、成行注文に対応するレコードを、シミュレーション用ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの買気配数量263に、アルゴ注文で指定された株数の「10」を加算する。
更に、約定シミュレーションシステム1は、シミュレーション用ワーク板26に基づいて、注文を約定させる。ここでは、約定シミュレーションシステム1は、アルゴ注文を約定させる。
すると、約定後におけるシミュレーション用ワーク板26では、売注文の最安値が503円となる。つまり、アルゴ注文の約定により、売注文の最安値が501円から503円に上昇する。
そこで、約定シミュレーションシステム1は、約定後のシミュレーション用ワーク板26における売注文の最安値の503円と買注文の最高値の499円とのミッドプライスの501円を算出する。次に、約定シミュレーションシステムは、約定直前のシミュレーション用ワーク板26における売注文の最安値の501円と買注文の最高値の499円とのミッドプライスの500円を算出する。
次に、約定シミュレーションシステム1は、算出した二つのミッドプライスの差(ミッドプライスの変化量)の「1」を、初期インパクトとする。
次に、当該アルゴ注文の約定直後に、約定シミュレーションシステム1が、TICK注文を受けたとする。当該TICK注文が、501円で3株の買注文だとする。
すると、約定シミュレーションシステム1は、TICK注文発生時におけるマーケットインパクトを算出する。ここでは、TICK注文がアルゴ注文の約定直後に発生したので、約定シミュレーションシステム1は、初期インパクトの「1」を、マーケットインパクトとする。
次に、約定シミュレーションシステム1は、当該TICK注文で指定された価格の501円に、算出したマーケットインパクトの「1」を加算することによって、登録価格の502円を算出する。
次に、約定シミュレーションシステム1は、算出した登録価格の502円とシミュレーション用ワーク板26の気配値261とが一致するレコードを、シミュレーション用ワーク板26から選択する。次に、約定シミュレーションシステム1は、選択したレコードの買気配数量263に、当該TICK注文で指定された株数の「3」を加算する。
以上のように、約定シミュレーションシステム1は、アルゴ注文による影響を考慮して、TICK注文をシミュレーション用ワーク板26に登録する。
本発明の実施の形態の約定シミュレーションシステム1は、過去の特定の日時における約定価格を算出しながら、アルゴリズム取引システムによる取引のシミュレーションを行う。更に、約定シミュレーションシステム1は、アルゴリズム取引システムからの注文による株価への影響をも考慮しながら、アルゴリズム取引システムによる取引のシミュレーションを行う。このため、約定シミュレーションシステムは、アルゴリズム取引システムのパフォーマンスを高精度に検証することができる。