JP2022108070A - 約定プログラム、約定方法および情報処理装置 - Google Patents

約定プログラム、約定方法および情報処理装置 Download PDF

Info

Publication number
JP2022108070A
JP2022108070A JP2021002887A JP2021002887A JP2022108070A JP 2022108070 A JP2022108070 A JP 2022108070A JP 2021002887 A JP2021002887 A JP 2021002887A JP 2021002887 A JP2021002887 A JP 2021002887A JP 2022108070 A JP2022108070 A JP 2022108070A
Authority
JP
Japan
Prior art keywords
order
array
information
orders
information processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2021002887A
Other languages
English (en)
Inventor
俊宏 清水
Toshihiro Shimizu
章仁 中村
Akihito Nakamura
章紘 桑原
Akihiro Kuwahara
資広 小崎
Sukehiro Ozaki
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2021002887A priority Critical patent/JP2022108070A/ja
Priority to US17/522,044 priority patent/US20220222745A1/en
Publication of JP2022108070A publication Critical patent/JP2022108070A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q40/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes
    • G06Q40/04Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange

Landscapes

  • Business, Economics & Management (AREA)
  • Accounting & Taxation (AREA)
  • Finance (AREA)
  • Engineering & Computer Science (AREA)
  • Development Economics (AREA)
  • Economics (AREA)
  • Marketing (AREA)
  • Strategic Management (AREA)
  • Technology Law (AREA)
  • Physics & Mathematics (AREA)
  • General Business, Economics & Management (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Advance Control (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)

Abstract

【課題】約定処理における計算コストの増加を抑える。【解決手段】実施形態の約定プログラムは、設定する処理と、畳み込む処理とをコンピュータに実行させる。設定する処理は、注文に関する注文順および注文数に基づく情報を配列に設定する。畳み込む処理は、設定した配列に対して、注文数ごとの価格を多段階とする注文条件に対応する配列をTACU(Try-And-Clean-Up)アルゴリズムを用いて畳み込む。【選択図】図38

Description

本発明は、約定プログラム等に関する。
証券市場において、株式取引などの売買が成立することを「約定」と呼ぶ。たとえば、売り注文を行ったユーザと、買い注文を行ったユーザとの条件が合致して、取引が成立した状態を約定という。ユーザは、注文(売りまたは買いの注文)を行う場合に、全量約定、または、一定数の注文数を条件にして、注文を行う場合がある。
以下の説明では、注文に設定される条件であって、最低限の約定数を「最低約定数」と表記する。たとえば、最低約定数「M」の条件がついた注文数「N」の売り注文があった場合、注文数「N」以上の注文数となる買い注文があった場合に、売買が成立する。
図42は、最低約定数が設定された売り注文と買い注文とのマッチング例を示す図である。図42に示す例では、売り注文として、注文Or1、Or2が存在する。注文Or1は、注文数「10」、最低約定数「5」となる注文である。注文Or2は、注文数「18」、最低約定数「13」となる注文である。
買い注文として、注文Or3、Or4、Or5が存在する。注文Or3は、注文数「14」、最低約定数「5」となる注文である。注文Or4は、注文数「21」、最低約定数「21」となる注文である。注文Or5は、注文数「10」、最低約定数「0」となる注文である。
図42に示した売り注文、買い注文の条件によって、約定数を最大化する場合、マッチング結果は、次のようになる。たとえば、注文Or1と注文Or3とで、注文数「5」を約定し、注文Or1と注文Or4とで、注文数「5」を約定する。また、注文Or2と注文Or3とで、注文数「2」を約定し、注文Or2と注文Or4とで、注文数「16」を約定する。
米国特許出願公開第2013/0018773号明細書 特開2008-234050号公報
しかしながら、上記の従来技術では、売り注文、買い注文を設定した配列に約定数ごとの価格を多段階とする注文条件を注文数(n)に対して反映させようとする場合、O(n)の計算量がかかり、計算コストが大きいという問題がある。
1つの側面では、約定処理における計算コストの増加を抑えることを可能とする約定プログラム、約定方法および情報処理装置を提供することを目的とする。
1つの案では、約定プログラムは、設定する処理と、畳み込む処理とをコンピュータに実行させる。設定する処理は、注文に関する注文順および注文数に基づく情報を配列に設定する。畳み込む処理は、設定した配列に対して、注文数ごとの価格を多段階とする注文条件に対応する配列をTACU(Try-And-Clean-Up)アルゴリズムを用いて畳み込む。
約定処理における計算コストの増加を抑えることができる。
図1は、売り注文を受け付けた場合の第1配列aに対する処理を説明するための図(1)である。 図2は、買い注文を受けたい場合の第2配列aの一例を示す図である。 図3は、本実施例1にかかる約定数を算出する処理の一例を示す図である。 図4は、売り注文を受け付けた場合の第1配列aに対する処理を説明するための図(2)である。 図5は、本実施例1にかかる約定対象となる注文を特定する処理を説明するための図(1)である。 図6は、本実施例1にかかる約定対象となる注文を特定する処理を説明するための図(2)である。 図7は、本実施例1にかかる情報処理装置の構成を示す図である。 図8は、本実施例1にかかる売り注文テーブルのデータ構造の一例を示す図である。 図9は、本実施例1にかかる買い注文テーブルのデータ構造の一例を示す図である。 図10は、本実施例1にかかる第1配列情報のデータ構造の一例を示す図である。 図11は、本実施例1にかかる第2配列情報のデータ構造の一例を示す図である。 図12は、本実施例1にかかる約定結果情報のデータ構造の一例を示す図である。 図13は、本実施例1にかかる情報処理装置の処理手順を示すフローチャートである。 図14は、本実施例1にかかる注文特定処理の処理手順を示すフローチャートである。 図15は、最低約定数保証を行う場合の設定処理の処理手順を示すフローチャートである。 図16は、最低約定数保証を行う場合の設定処理を説明する図(1)である。 図17は、最低約定数保証を行う場合の設定処理を説明する図(2)である。 図18は、最低約定数保証を行う場合の設定処理を説明する図(3)である。 図19は、最低約定数保証を行う場合の設定処理を説明する図(4)である。 図20は、金額を指定した全量約定注文に関する売り注文と買い注文とのマッチング例を示す図である。 図21は、売り注文を受け付けた場合の配列aに対する処理を説明するための図(1)である。 図22は、売り注文を受け付けた場合の配列aに対する処理を説明するための図(2)である。 図23は、買い注文を受け付けた場合の配列bに対する処理を説明するための図である。 図24は、本実施例2にかかる約定数を算出する処理の一例を説明するための図である。 図25は、売り注文を受け付けた場合の配列aに対する処理を説明するための図(3)である。 図26は、本実施例2にかかる約定対象となる注文を特定する処理を説明するための図である。 図27は、本実施例2にかかる情報処理装置の構成を示す図である。 図28は、本実施例2にかかる売り注文テーブルのデータ構造の一例を示す図である。 図29は、本実施例2にかかる買い注文テーブルのデータ構造の一例を示す図である。 図30は、本実施例2にかかる第1配列情報のデータ構造の一例を示す図である。 図31は、本実施例2にかかる第2配列情報のデータ構造の一例を示す図である。 図32は、本実施例2にかかる約定結果情報のデータ構造の一例を示す図である。 図33は、本実施例2にかかる情報処理装置の処理手順を示すフローチャートである。 図34は、本実施例2にかかる売り注文の配列更新処理の処理手順を示すフローチャートである。 図35は、本実施例2にかかる買い注文の配列更新処理の処理手順を示すフローチャートである。 図36は、本実施例3にかかる処理を説明するための図である。 図37は、本実施例3にかかる配列情報のデータ構造の一例を示す図である。 図38は、本実施例3にかかる情報処理装置の処理手順を示すフローチャートである。 図39は、本実施例3にかかる売り注文の配列更新処理の処理手順を示すフローチャートである。 図40は、本実施例3にかかる買い注文の配列更新処理の処理手順を示すフローチャートである。 図41は、実施例の情報処理装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。 図42は、最低約定数が設定された売り注文と買い注文とのマッチング例を示す図である。
以下、図面を参照して、実施形態にかかる約定プログラム、約定方法および情報処理装置を説明する。実施形態において同一の機能を有する構成には同一の符号を付し、重複する説明は省略する。なお、以下の実施形態で説明する約定プログラム、約定方法および情報処理装置は、一例を示すに過ぎず、実施形態を限定するものではない。また、以下の各実施形態は、矛盾しない範囲内で適宜組みあわせてもよい。
本実施例1にかかる情報処理装置は、売り注文または買い注文をそれぞれ管理するために、Bool(T、F)配列aを用意し、約定数が最大となるような約定対象となる注文を特定する。
Bool(T、F)配列aを「配列a」と表記する。配列aには、0以上のインデックスiが設定され、配列aのインデックスiに対応する要素には「T」または「F」が設定される。配列aのインデックスiに対応する要素が「T」である場合には、注文数iの注文が存在することを意味する。配列aのインデックスiに対応する要素が「F」である場合には、注文数iの注文が存在しないことを意味する。「T」は、登録記号の一例である。
配列aのインデックスiの要素が「T」であることを、a[i]=Tによって示す。配列aのインデックスiの要素が「F」であることを、a[i]=Fによって示す。
本実施例1では、売り注文に関する情報を格納する配列aを「第1配列a」と表記し、買い注文に関する情報を格納する配列aを「第2配列a」と表記する。
まず、本実施例1にかかる情報処理装置が、マッチング可能な最大の約定数を算出する処理について説明する。図1は、売り注文を受け付けた場合の第1配列aに対する処理を説明するための図である。情報処理装置は、a[i]=Tで、注文数xの売り注文を受け付けた場合、a[i+x]=Tとする。
第1配列aの初期状態を、ステップS10に示すものとする。第1配列aの初期状態では、a[0]=Tとなり、他の要素は全て「F」となる。
注文数3の売り注文を受け付けた場合、第1配列aの状態は、ステップS11に示すものとなる。情報処理装置は、第1配列aが、a[0]=Tとなっているため、a[0+3]=Tに設定する。
注文数5の注文を受け付けた場合、第1配列aの状態は、ステップS12に示すものとなる。情報処理装置は、第1配列aが、a[0]=Tとなっているため、a[0+5]=Tに設定する。情報処理装置は、第1配列aが、a[3]=Tとなっているため、a[3+5]=Tに設定する。
第1配列aの要素がTとなっているインデックスは、マッチング可能な約定数量を示す。たとえば、図1のステップS12の第1配列aの状態では、インデックスi=8の要素が「T」となっており、かかる「8」は、注文数「3」と、注文数「5」とが全量約定する数量である。
図2は、買い注文を受けた場合の第2配列aの一例を示す図である。情報処理装置は、図1で説明した売り注文を受けた場合の第1配列aに対する処理と同様にして、a[i]=Tで、注文数xの買い注文を受け付けた場合、a[i+x]=Tとする。また、第2配列aの初期状態では、a[0]=Tとなり、他の要素は全て「F」となる。
たとえば、注文数2の買い注文、注文数3の買い注文、注文数6の買い注文を順に受け付けた場合には、第2配列aの状態は、図2に示すものとなる。すなわち、a[0]=T、a[2]=T、a[3]=T、a[5]=T、a[6]=T、a[8]=T、a[9]=T、a[11]=Tとなり、その他の要素は「F」となる。
情報処理装置は、図1で説明した売り注文の第1配列aと、図2で説明した第2配列aとを比較して、マッチング可能な最大の約定数量を特定する。
図3は、本実施例1にかかる約定数を算出する処理の一例を示す図である。情報処理装置は、第1配列aと、第2配列aとを比較して、第1配列aの要素と、第2配列aの要素とが両方とも「T」となるインデックスのうち、最も大きいインデックスを、最大の約定数として特定する。図3に示す例では、第1配列aの要素と、第2配列aの要素とが両方とも「T」となるインデックスのうち、最も大きいインデックスは「8」となるため、情報処理装置は、マッチング可能な最大の約定数量を「8」として算出する。
続いて、本実施例1にかかる情報処理装置が、約定対象となる注文を特定する処理について説明する。情報処理装置は、注文を受け付けて配列aの要素に「T」を初めて設定する場合に、注文受付順(注文順)および数量(注文数)を示す補助情報を、インデックスごとに登録することで、約定対象となる注文を特定することが可能となる。
図4は、売り注文を受け付けた場合の第1配列aに対する処理を説明するための図(2)である。図4では第1配列aの初期状態の図示を省略するが、第1配列aの初期状態は、図1で説明したステップS10の第1配列aの状態に対応する。情報処理装置は、初期状態で「T」となっている要素に対しては、補助情報を付与しない。なお、売り注文の注文受付順が、「第1注文順」に対応し、売り注文の注文数が、「第1注文数」に対応する。
初め(注文受付順=1)に、注文数2の売り注文を受け付けた場合、第1配列aの状態は、ステップS21に示すものとなる。情報処理装置は、初期状態の第1配列aが、a[0]=Tとなっているため、a[0+2]=Tに設定する。また、インデックスi=2に、補助情報sub1-2を登録する。補助情報sub1-2には、順番「1」、数量「2」が設定される。
続いて(注文受付順=2)、注文数3の売り注文を受け付けた場合、第1配列aの状態は、ステップS22に示すものとなる。情報処理装置は、第1配列aが、a[0]=Tとなっているため、a[0+3]=Tに設定し、インデックスi=3に補助情報sub1-3を登録する。補助情報sub1-3には、順番「2」、数量「3」が設定される。
情報処理装置は、第1配列aが、a[2]=Tとなっているため、a[2+3]=Tに設定し、インデックスi=5に補助情報sub1-5を登録する。補助情報sub1-5には、順番「2」、数量「3」が設定される。
図示を省略するが、情報処理装置は、買い注文を受け付けた場合も、第2配列aの要素に「T」を設定すると共に、図4と同様にして、インデックスに補助情報を登録する。なお、買い注文の注文受付順が、「第2注文順」に対応し、買い注文の注文数が、「第2注文数」に対応する。
図5は、本実施例1にかかる約定対象となる注文を特定する処理を説明するための図(1)である。図5では、情報処理装置は、売り注文として、注文Or1-1、Or1-2を順に受け付ける。注文Or1-1は、注文数「3」の注文である。注文Or1-2は、注文数「5」の注文である。情報処理装置は、買い注文として、注文Or2-1、Or2-2、Or2-3を順に受け付ける。注文Or2-1は、注文数「2」の注文である。注文Or2-2は、注文数「3」の注文である。注文Or2-3は、注文数「6」の注文である。
情報処理装置は、注文Or1-1、Or1-2を順に受け付けると、売り注文を受け付けた場合の第1配列aに対する処理を実行することで、第1配列aを、図5に示すような状態に設定する。第1配列aのインデックスi=0,3,5,8の要素が「T」となり、他の要素は「F」となる。インデックスi=0の「T」は、初期状態で設定される。
情報処理装置は、第1配列aのインデックスi=3に補助情報sub1-3を設定する。補助情報sub1-3には、順番「1」、数量「3」が設定される。情報処理装置は、第1配列aのインデックスi=5に補助情報sub1-5を設定する。補助情報sub1-5には、順番「2」、数量「5」が設定される。情報処理装置は、第1配列aのインデックスi=8に補助情報sub1-8を設定する。補助情報sub1-8には、順番「2」、数量「5」が設定される。
情報処理装置は、注文Or2-1、Or2-2、Or2-3を順に受け付けると、買い注文を受け付けた場合の第2配列aに対する処理を実行することで、第2配列aを、図5に示すような状態に設定する。第2配列aのインデックスi=0,2,3,5,6,8,9,11の要素が「T」となり、他の要素は「F」となる。インデックスi=0の「T」は、初期状態で設定される。
情報処理装置は、第2配列aのインデックスi=2に補助情報sub2-2を設定する。補助情報sub2-2には、順番「1」、数量「2」が設定される。情報処理装置は、第2配列aのインデックスi=3に補助情報sub2-3を設定する。補助情報sub2-3には、順番「2」、数量「3」が設定される。情報処理装置は、第2配列aのインデックスi=5に補助情報sub2-5を設定する。補助情報sub2-5には、順番「2」、数量「3」が設定される。
情報処理装置は、第2配列aのインデックスi=6に補助情報sub2-6を設定する。補助情報sub2-6には、順番「3」、数量「6」が設定される。情報処理装置は、第2配列aのインデックスi=8に補助情報sub2-8を設定する。補助情報sub2-8には、順番「3」、数量「6」が設定される。情報処理装置は、第2配列aのインデックスi=9に補助情報sub2-9を設定する。補助情報sub2-9には、順番「3」、数量「6」が設定される。情報処理装置は、第2配列aのインデックスi=11に補助情報sub2-11を設定する。補助情報sub2-11には、順番「3」、数量「6」が設定される。
情報処理装置は、第1配列aと、第2配列aとを比較して、第1配列aの要素と、第2配列aの要素とが両方とも「T」となるインデックスのうち、最も大きいインデックスを、約定数として算出する。図5に示す例では、第1配列aの要素と、第2配列aの要素とが両方とも「T」となるインデックスのうち、最も大きいインデックスは、インデックスi=8である。このため、情報処理装置は、約定数を「8」とする。
情報処理装置は、約定数を算出した後に、配列aに設定された補助情報を基にして、約定対象となる注文を特定する。情報処理装置は、約定数iで約定する場合、インデックスの初期値i=iとして、以下の処理をi=0となるまで繰り返し実行する。
情報処理装置が繰り返す処理は次に示す処理となる。情報処理装置は、a[i]=Tとなる注文を約定対象とする。次に、情報処理装置は、a[i]に設定された補助情報に含まれる数量αを特定し、i=i-αによって、インデックスiを更新する。
図5の「第1配列a」を基にして、情報処理装置が、約定する売り注文を特定する処理について説明する。
情報処理装置は、約定数「8」に対応するインデックスi=8に設定された補助情報sub1-8に対応する注文を約定対象とする。補助情報1-8は、順番「2」、数量「5」の注文Or1-2に対応する。情報処理装置は、補助情報sub1-8に含まれる数量α=5を取得し、インデックスi=8-5=3に更新する。
情報処理装置は、インデックスi=3に設定された補助情報sub1-3に対応する注文を約定対象とする。補助情報1-3は、順番「1」、数量「3」の注文Or1-1に対応する。情報処理装置は、補助情報sub1-3に含まれる数量α=3を取得し、インデックスi=3-3=0に更新する。情報処理装置は、インデックスi=0となるため、処理を終了する。
図5の「第2配列a」を基にして、情報処理装置が、約定する買い注文を特定する処理について説明する。
情報処理装置は、約定数「8」に対応するインデックスi=8に設定された補助情報sub2-8に対応する注文を約定対象とする。補助情報2-8は、順番「3」、数量「6」の注文Or2-3に対応する。情報処理装置は、補助情報sub2-8に含まれる数量α=6を取得し、インデックスi=8-6=2に更新する。
情報処理装置は、インデックスi=2に設定された補助情報sub2-2に対応する注文を約定対象とする。補助情報2-2は、順番「1」、数量「2」の注文Or2-1に対応する。情報処理装置は、補助情報sub2-2に含まれる数量α=2を取得し、インデックスi=2-2=0に更新する。情報処理装置は、インデックスi=0となるため、処理を終了する。
上記処理によって、約定対象となる売りの注文Or1-1、Or1-2と、買いの注文Or2-1、Or2-3が特定される。
図6は、本実施例1にかかる約定対象となる注文を特定する処理を説明するための図(2)である。図6では、情報処理装置は、売り注文として、注文Or1-1、Or1-2、Or1-3、Or1-4を順に受け付ける。注文Or1-1は、注文数「2」の注文である。注文Or1-2は、注文数「3」の注文である。注文Or1-3は、注文数「2」の注文である。注文Or1-4は、注文数「6」の注文である。
情報処理装置は、買い注文として、注文Or2-1、Or2-2、Or2-3、Or2-4を順に受け付ける。注文Or2-1は、注文数「5」の注文である。注文Or2-2は、注文数「1」の注文である。注文Or2-3は、注文数「4」の注文である。注文Or2-4は、注文数「2」の注文である。
情報処理装置は、注文Or1-1、Or1-2、Or1-3、Or1-4を順に受け付けると、買い注文を受け付けた場合の第1配列aに対する処理を実行することで、第1配列aを、図6に示すような状態に設定する。第1配列aのインデックスi=0,2~11,13の要素が「T」となり、他の要素は「F」となる。インデックスi=0の「T」は、初期状態で設定される。
情報処理装置は、第1配列aのインデックスi=2に補助情報sub1-2を設定する。補助情報sub1-2には、順番「1」、数量「2」が設定される。情報処理装置は、第1配列aのインデックスi=3に補助情報sub1-3を設定する。補助情報sub1-3には、順番「2」、数量「3」が設定される。情報処理装置は、第1配列aのインデックスi=4に補助情報sub1-4を設定する。補助情報sub1-4には、順番「3」、数量「2」が設定される。
情報処理装置は、第1配列aのインデックスi=5に補助情報sub1-5を設定する。補助情報sub1-5には、順番「2」、数量「3」が設定される。情報処理装置は、第1配列aのインデックスi=6に補助情報sub1-6を設定する。補助情報sub1-6には、順番「4」、数量「6」が設定される。情報処理装置は、第1配列aのインデックスi=7に補助情報sub1-7を設定する。補助情報sub1-7には、順番「3」、数量「2」が設定される。
情報処理装置は、第1配列aのインデックスi=8に補助情報sub1-8を設定する。補助情報sub1-8には、順番「4」、数量「6」が設定される。情報処理装置は、第1配列aのインデックスi=9に補助情報sub1-9を設定する。補助情報sub1-9には、順番「4」、数量「6」が設定される。情報処理装置は、第1配列aのインデックスi=10に補助情報sub1-10を設定する。補助情報sub1-10には、順番「4」、数量「6」が設定される。
情報処理装置は、第1配列aのインデックスi=11に補助情報sub1-11を設定する。補助情報sub1-11には、順番「4」、数量「6」が設定される。情報処理装置は、第1配列aのインデックスi=13に補助情報sub1-13を設定する。補助情報sub1-13には、順番「4」、数量「6」が設定される。
情報処理装置は、注文Or2-1、Or2-2、Or2-3、Or2-4を順に受け付けると、買い注文を受け付けた場合の第2配列aに対する処理を実行することで、第2配列aを、図6に示すような状態に設定する。第2配列aのインデックスi=0~12の要素が「T」となり、他の要素は「F」となる。インデックスi=0の「T」は、初期状態で設定される。
情報処理装置は、第2配列aのインデックスi=1に補助情報sub2-1を設定する。補助情報sub2-1には、順番「2」、数量「1」が設定される。情報処理装置は、第2配列aのインデックスi=2に補助情報sub2-2を設定する。補助情報sub2-2には、順番「4」、数量「2」が設定される。情報処理装置は、第2配列aのインデックスi=3に補助情報sub2-3を設定する。補助情報sub2-3には、順番「4」、数量「2」が設定される。
情報処理装置は、第2配列aのインデックスi=4に補助情報sub2-4を設定する。補助情報sub2-4には、順番「3」、数量「4」が設定される。情報処理装置は、第2配列aのインデックスi=5に補助情報sub2-5を設定する。補助情報sub2-5には、順番「1」、数量「5」が設定される。情報処理装置は、第2配列aのインデックスi=6に補助情報sub2-6を設定する。補助情報sub2-6には、順番「2」、数量「1」が設定される。
情報処理装置は、第2配列aのインデックスi=7に補助情報sub2-7を設定する。補助情報sub2-7には、順番「4」、数量「2」が設定される。情報処理装置は、第2配列aのインデックスi=8に補助情報sub2-8を設定する。補助情報sub2-8には、順番「4」、数量「2」が設定される。情報処理装置は、第2配列aのインデックスi=9に補助情報sub2-9を設定する。補助情報sub2-9には、順番「3」、数量「4」が設定される。
情報処理装置は、第2配列aのインデックスi=10に補助情報sub2-10を設定する。補助情報sub2-10には、順番「3」、数量「4」が設定される。情報処理装置は、第2配列aのインデックスi=11に補助情報sub2-11を設定する。補助情報sub2-11には、順番「4」、数量「2」が設定される。情報処理装置は、第2配列aのインデックスi=12に補助情報sub2-12を設定する。補助情報sub2-12には、順番「4」、数量「2」が設定される。
情報処理装置は、第1配列aと、第2配列aとを比較して、第1配列aの要素と、第2配列aの要素とが両方とも「T」となるインデックスのうち、最も大きいインデックスを、約定数として算出する。図6に示す例では、第1配列aの要素と、第2配列aの要素とが両方とも「T」となるインデックスのうち、最も大きいインデックスは、インデックスi=11である。このため、情報処理装置は、約定数を「11」とする。
図6の「第1配列a」を基にして、情報処理装置が、約定する売り注文を特定する処理について説明する。
情報処理装置は、約定数「11」に対応するインデックスi=11に設定された補助情報sub1-11に対応する注文を約定対象とする。補助情報1-11は、順番「4」、数量「6」の注文Or1-4に対応する。情報処理装置は、補助情報sub1-11に含まれる数量α=6を取得し、インデックスi=11-6=5に更新する。
情報処理装置は、インデックスi=5に設定された補助情報sub1-5に対応する注文を約定対象とする。補助情報1-5は、順番「2」、数量「3」の注文Or1-2に対応する。情報処理装置は、補助情報sub1-5に含まれる数量α=3を取得し、インデックスi=5-3=2に更新する。
情報処理装置は、インデックスi=2に設定された補助情報sub1-2に対応する注文を約定対象とする。補助情報1-2は、順番「1」、数量「2」の注文Or1-1に対応する。情報処理装置は、補助情報sub1-2に含まれる数量α=2を取得し、インデックスi=2-2=0に更新する。情報処理装置は、インデックスi=0となるため、処理を終了する。
図6の「第2配列a」を基にして、情報処理装置が、約定する買い注文を特定する処理について説明する。
情報処理装置は、約定数「11」に対応するインデックスi=11に設定された補助情報sub2-11に対応する注文を約定対象とする。補助情報2-11は、順番「4」、数量「2」の注文Or2-4に対応する。情報処理装置は、補助情報sub2-11に含まれる数量α=2を取得し、インデックスi=11-2=9に更新する。
情報処理装置は、インデックスi=9に設定された補助情報sub2-9に対応する注文を約定対象とする。補助情報2-9は、順番「3」、数量「4」の注文Or2-3に対応する。情報処理装置は、補助情報sub2-9に含まれる数量α=4を取得し、インデックスi=9-4=5に更新する。
情報処理装置は、インデックスi=5に設定された補助情報sub2-5に対応する注文を約定対象とする。補助情報2-5は、順番「1」、数量「5」の注文Or2-1に対応する。情報処理装置は、補助情報sub2-1に含まれる数量α=5を取得し、インデックスi=5-5=0に更新する。情報処理装置は、インデックスi=0となるため、処理を終了する。
上記処理によって、約定対象となる売りの注文Or1-1、Or1-2、Or1-4と、買いの注文Or2-1、Or2-3、Or2-4が特定される。
上記のように、本実施例1にかかる情報処理装置は、売り注文を受け付けた場合に、売り注文の注文順および注文数に基づく情報を第1配列aに設定し、買い注文を受け付けた場合に、買い注文の注文順および注文数に基づく情報を第2配列aに設定する。情報処理装置は、第1配列aに設定された情報と、第2配列aに設定された情報とを基にして、最大約定数を算出する。そして、情報処理装置は、算出した最大約定数と、第1配列aに設定された情報、第2配列aに設定された情報とを基にして、約定の対象となる注文を特定する。すなわち、本実施例1にかかる情報処理装置によれば、約定数が最大となるような約定対象となる注文を特定することができる。
次に、図1~図6で説明した処理を実行する情報処理装置の構成の一例について説明する。図7は、本実施例1にかかる情報処理装置の構成を示す図である。図7に示すように、この情報処理装置100は、通信部110と、入力部120と、表示部130と、記憶部140と、制御部150とを有する。
通信部110は、有線又は無線で外部装置等に接続され、外部装置等との間で情報の送受信を行う。たとえば、通信部110は、NIC(Network Interface Card)等によって実現される。通信部110は、図示しないネットワークに接続されていてもよい。たとえば、通信部110は、外部装置から、売り注文の情報を含む売り注文テーブル141の情報、買い注文の情報を含む買い注文テーブル142の情報等を受信する。たとえば、外部装置は、株の売り買いを管理し、約定の対象となった注文に関して各種の処理を実行するサーバに対応する。
入力部120は、各種の情報を、情報処理装置100に入力する入力装置である。入力部120は、キーボードやマウス、タッチパネル等に対応する。
表示部130は、制御部150から出力される情報を表示する表示装置である。表示部130は、液晶ディスプレイ、有機EL(Electro Luminescence)ディスプレイ、タッチパネル等に対応する。
記憶部140は、売り注文テーブル141、買い注文テーブル142、第1配列情報143、第2配列情報144、約定結果情報145を有する。記憶部140は、たとえば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。
売り注文テーブル141は、売り注文の注文順、注文数を保持するテーブルである。図8は、本実施例1にかかる売り注文テーブルのデータ構造の一例を示す図である。図8に示すように、この売り注文テーブル141は、識別情報と、注文順と、注文数とを対応付ける。識別情報は、注文を一意に識別する情報である。注文順は、受け付けた注文の順番である。注文数は、注文の数である。
買い注文テーブル142は、買い注文の注文順、注文数を保持するテーブルである。図9は、本実施例1にかかる買い注文テーブル142のデータ構造の一例を示す図である。図9に示すように、この買い注文テーブル142は、識別情報と、注文順と、注文数とを対応付ける。識別情報は、注文を一意に識別する情報である。注文順は、受け付けた注文の順番である。注文数は、注文の数である。
第1配列情報143は、売り注文に関する注文順および注文数に基づく情報を保持する配列情報である。第1配列情報143は、上述した第1配列aに対応する。図10は、本実施例1にかかる第1配列情報のデータ構造の一例を示す図である。図10に示すように、この第1配列情報143は、インデックスと、要素と、補助情報とを有する。インデックスは、配列aのインデックスiに対応する。要素は、配列aの要素であり、「T」または「F」が設定される。補助情報は、注文受付順(注文順)および数量(注文数)を示す情報である。
第2配列情報144は、買い注文に関する注文順および注文数に基づく情報を保持する配列情報である。第2配列情報144は、上述した第2配列aに対応する。図11は、本実施例1にかかる第2配列情報のデータ構造の一例を示す図である。図11に示すように、この第2配列情報144は、インデックスと、要素と、補助情報とを有する。インデックスは、配列aのインデックスiに対応する。要素は、配列aの要素であり、「T」または「F」が設定される。補助情報は、注文受付順(注文順)および数量(注文数)を示す情報である。
約定結果情報145は、最大の約定数と、約定対象となる注文の情報を保持する。図12は、本実施例1にかかる約定結果情報のデータ構造の一例を示す図である。図12に示すように、この約定結果情報145は、約定売り識別情報と、約定買い識別情報と、最大約定数とを有する。約定売り識別情報は、約定対象となる売り注文を識別する情報である。約定買い識別情報は、約定対象となる買い注文を識別する情報である。最大約定数は、最大の約定数を示す。
図7の説明に戻る。制御部150は、取得部151と、設定部152と、約定数算出部153と、注文特定部154と、出力制御部155とを有する。制御部150は、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)により実現される。また、制御部150は、例えばASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積回路により実行されてもよい。
取得部151は、外部装置等から、売り注文テーブル141のデータを取得した場合に、売り注文テーブル141のデータを、記憶部140に格納する。取得部151は、売り注文を個別に順に取得し、取得した売り注文の情報を、売り注文テーブル141に登録してもよい。
取得部151は、外部装置等から、買い注文テーブル142のデータを取得した場合に、買い注文テーブル142のデータを、記憶部140に格納する。取得部151は、買い注文を個別に順に取得し、取得した買い注文の情報を、買い注文テーブル142に登録してもよい。
設定部152は、売り注文テーブル141を基にして、売り注文に関する注文順および注文数に基づく情報を、第1配列情報143(第1配列a)に設定する。また、設定部152は、買い注文テーブル142を基にして、買い注文に関する注文順および注文数に基づく情報を、第2配列情報144(第2配列a)に設定する。
設定部152が、売り注文テーブル141を基にして、売り注文に関する注文順および注文数に基づく情報を、第1配列情報143に設定する処理は、図4で説明した第1配列aの処理に対応する。設定部152は、第1配列a[i]=Tで、注文数xの売り注文を受け付けた場合、a[i+x]=Tとする。
たとえば、設定部152は、第1配列情報143について、インデックスi=i+xの要素を「T」に設定し、注文受付順および数量を設定した補助情報を、インデックスi=i+xの補助情報として設定する。設定部152は、売り注文テーブル141の各売り注文に関して、上記処理を繰り返し実行する。
設定部152が、買い注文テーブル142を基にして、買い注文に関する注文順および注文数に基づく情報を、第2配列情報144に設定する処理は、図4で説明した処理を第2配列aに置き換えた処理に対応する。設定部152は、第2配列a[i]=Tで、注文数xの売り注文を受け付けた場合、a[i+x]=Tとする。
たとえば、設定部152は、第2配列情報144について、インデックスi=i+xの要素を「T」に設定し、注文受付順および数量を設定した補助情報を、インデックスi=i+xの補助情報として設定する。設定部152は、買い注文テーブル142の各買い注文に関して、上記処理を繰り返し実行する。
約定数算出部153は、第1配列情報143と、第2配列情報144とを基にして、売り注文と買い注文との最大約定数を算出する処理部である。約定数算出部153の処理は、図3で説明した処理に対応する。約定数算出部153は、第1配列情報143と、第2配列情報144とを比較して、第1配列情報143の要素と、第2配列情報144の要素とが両方とも「T」となるインデックスのうち、最も大きいインデックスを、最大の約定数として算出する。約定数算出部153は、算出した最大約定数を、約定結果情報145に登録する。
約定数算出部153は、約定数の決定指示を入力部120または外部装置等から受け付けたタイミングで上記処理を実行してもよい。約定数算出部153は、設定部152が、第1配列情報143および第2配列情報144を設定してから所定時間経過したタイミングで上記処理を実行してもよい。
注文特定部154は、最大約定数と、第1配列情報143と、第2配列情報144とを基にして、約定の対象となる注文を特定する処理部である。注文特定部154の処理は、図5、図6で説明した処理に対応する。注文特定部154は、約定数(最大約定数)iで約定する場合、インデックスの初期値i=iとして、以下の処理をi=0となるまで繰り返し実行する。
注文特定部154が繰り返す処理は次に示す処理となる。注文特定部154は、a[i]=Tとなる注文を約定対象とする。次に、注文特定部154は、a[i]に設定された補助情報に含まれる数量αを特定し、i=i-αによって、インデックスiを更新する。
たとえば、図5で説明したように、注文特定部154が、第1配列a(第1配列情報143)に対して上記処理を実行することで、約定対象となる注文の識別情報Or1-1、Or1-2を特定する。注文特定部154が、第2配列a(第2配列情報144)に対して上記処理を実行することで、約定対象となる注文の識別情報Or2-1、Or2-3を特定する。
図6で説明したように、注文特定部154が、第1配列a(第1配列情報143)に対して上記処理を実行することで、約定対象となる注文の識別情報Or1-1、Or1-2、Or1-4を特定する。注文特定部154が、第2配列a(第2配列情報144)に対して上記処理を実行することで、約定対象となる注文の識別情報Or2-1、Or2-3、Or2-4を特定する。
注文特定部154は、上記処理を実行することで特定した約定の対象となる注文の識別情報を、約定結果情報145に登録する。
出力制御部155は、約定結果情報145を、表示部130に出力して表示させる処理部である。出力制御部155は、約定結果情報145を外部装置に送信して、各種の約定処理を依頼してもよい。
次に、本実施例1にかかる情報処理装置100の処理手順の一例について説明する。図13は、本実施例1にかかる情報処理装置の処理手順を示すフローチャートである。図13に示すように、情報処理装置100の設定部152は、売り注文に関する第1配列aと、買い注文に関する第2配列aとを設定する(ステップS101)。第1配列aの情報は、第1配列情報143に対応する。第2配列aの情報は、第2配列情報144に対応する。
設定部152は、売り注文を受け付けた場合に第1配列aを更新し、買い注文を受け付けた場合に第2配列aを更新する(ステップS102)。情報処理装置100は、注文を約定させない場合には(ステップS103,No)、ステップS102に移行する。情報処理装置100は、注文を約定させる場合には(ステップS103,Yes)、ステップS104に移行する。
情報処理装置100の約定数算出部153は、最大約定数を算出する(ステップS104)。情報処理装置100の注文特定部154は、注文特定処理を実行する(ステップS105)。
情報処理装置100の出力制御部155は、外部装置等に約定結果情報を通知し、約定処理を依頼する(ステップS106)。情報処理装置100は、処理を継続する場合には(ステップS107,Yes)、ステップS108に移行する。設定部152は、第1配列aおよび第2配列aを破棄し(ステップS108)、ステップS101に移行する。
一方、情報処理装置100は、処理を継続しない場合には(ステップS107,No)、処理を終了する。
次に、図13のステップS105で説明した注文特定処理の処理手順について説明する。図14は、本実施例1にかかる注文特定処理の処理手順を示すフローチャートである。情報処理装置100の注文特定部154は、最大約定数をインデックスiの初期値に設定する(ステップS201)。
注文特定部154は、インデックスi=0である場合には(ステップS202,Yes)、注文特定処理を終了する。注文特定部154は、インデックスi=0でない場合には(ステップS202,No)、ステップS203に移行する。
注文特定部154は、配列aのインデックスiに対応する補助情報を参照し、約定の対象となる注文を特定する(ステップS203)。注文特定部154は、配列aのインデックスiに対応する補助情報の数量αを取得する(ステップS204)。
注文特定部154は、インデックスiからαを減算した値によって、インデックスiを更新し(ステップS205)、ステップS202に移行する。
注文特定部154は、図14に示した処理を、第1配列aに対して実行することで、約定の対象となる売りの注文を特定する。注文特定部154は、図14に示した処理を、第2配列aに対して実行することで、約定の対象となる買いの注文を特定する。
次に、本実施例1にかかる情報処理装置100の効果について説明する。情報処理装置100は、売り注文を受け付けた場合に、売り注文の注文順および注文数に基づく情報を第1配列aに設定し、買い注文を受け付けた場合に、買い注文の注文順および注文数に基づく情報を第2配列aに設定する。情報処理装置100は、第1配列aに設定された情報と、第2配列aに設定された情報とを基にして、最大約定数を算出する。そして、情報処理装置100は、算出した最大約定数と、第1配列aに設定された情報、第2配列aに設定された情報とを基にして、約定の対象となる注文を特定する。すなわち、本実施例1にかかる情報処理装置100によれば、約定数が最大となるような約定対象となる注文を特定することができる。
情報処理装置100は、売りの注文順および注文数の情報を受け付けた場合、注文数に基づいて特定される第1配列aのインデックスの要素に登録記号「T」を設定し、該インデックスに対応付けて注文順および1注文数の補助情報を設定する。情報処理装置100は、買いの注文順および注文数の情報を受け付けた場合、注文数に基づいて特定される第2配列aのインデックスの要素に登録記号「T」を設定し、該インデックスに対応付けて注文順および注文数の補助情報を設定する。これによって、第1配列aと第2配列aとの比較により、最大約定数を容易に特定することができる。また、補助情報を用いて、第1配列a、第2配列aのインデックスを辿り、約定の対象となる注文を特定することができる。
ところで、上述した情報処理装置100の処理では、全量約定保証する場合について説明したが、最低約定数保証の場合も、同様に最大の約定数を特定することが可能となる。以下の説明では、情報処理装置100が、最低約定数が指定された注文を受け付けた場合に、最大の約定数を特定する処理について説明する。
情報処理装置100は、配列aに「T」を設定するインデックスの区間を格納するキューを記憶部140に用意する。情報処理装置100の設定部152は、最低約定数Sおよび注文数Eが設定された注文を受け付けた場合、図15に示す設定処理を実行する。
図15は、最低約定数保証を行う場合の設定処理の処理手順を示すフローチャートである。図15に示すように、情報処理装置100の設定部152は、最低約定数Sおよび注文数Eが指定された注文を取得する(ステップS301)。
設定部152は、インデックスiを初期値0に設定する(ステップS302)。設定部152は、a[i]に「T」が設定されている場合には(ステップS303,Yes)、区間[i+S、i+E]をキューに挿入し(ステップS304)、ステップS306に移行する。
ここで、設定部152は、ステップS304において、キューの末尾の区間と、挿入する区間とがつながる場合には、区間をマージする。たとえば、キーの末尾の区間を[4、6]とし、挿入する区間を[4、9]とすると、設定部152は、区間をマージして[4、9]とする。
一方、設定部152は、a[i]に「T」が設定されていない場合には(ステップS303,No)、ステップS305に移行する。設定部152は、キューの先頭に格納されている区間に、iが含まれている場合には、a[i]に「T」を設定し(ステップS305)、ステップS306に移行する。
設定部152は、iがキューの先頭に格納されている区間の終端である場合に、かかる区間をキューから削除する(ステップS306)。設定部152は、インデックスiに1を加算した値によって、インデックスiを更新する(ステップS307)。
設定部152は、iが閾値以上でない場合には(ステップS308,No)、ステップS303に移行する。一方、設定部152は、iが閾値以上の場合には(ステップS308,Yes)、ステップS309に移行する。
設定部152は、処理を継続する場合には(ステップS309,Yes)、ステップS301に移行する。一方、設定部152は、処理を継続しない場合には(ステップS309,No)、処理を終了する。
なお、設定部152は、最低約定数Sおよび注文数Eが設定された売り注文を受け付けた場合には、図15で説明した処理を、第1配列a(第1配列情報143)に対して実行する。設定部152は、最低約定数Sおよび注文数Eが設定された買い注文を受け付けた場合には、図15で説明した処理を、第2配列a(第2配列情報144)に対して実行する。
次に、最低約定数保証を行う場合の設定処理の一例について説明する。図16~図19は、最低約定数保証を行う場合の設定処理を説明する図である。図16~図19では、補助情報に関する記載を省略する。ここでは一例として、設定部152が、最低約定数S=6および注文数E=7が設定された売り注文を受け付け、第1配列aを更新する場合について説明する。第1配列aの状態は、図16のステップS30に示すように、a[0]=T、a[3]=T、a[5]=T、a[8]=Tとなり、その他の要素は「F」となる。
ステップS31について説明する。設定部152は、インデックスi=0に設定する。a[i]=Tとなるため、設定部152は、キュー50に区間[6、7](=[0+6、0+7])を挿入する。
ステップ32について説明する。設定部152は、インデックスi=1に設定する。a[i]=Fとなり、iがキュー50の先頭区間[6、7]に含まれないため、特に処理を実行しない。設定部152は、インデックスi=2に設定する。a[i]=Fとなり、iがキュー50の先頭区間[6、7]に含まれないため、特に処理を実行しない。
図17の説明に移行する。ステップS33について説明する。設定部152は、インデックスi=3に設定する。a[i]=Tとなるため、設定部152は、キュー50に区間[9、10](=[3+6、3+7])を挿入する。
ステップS34について説明する。設定部152は、インデックスi=4に設定する。a[i]=Fとなり、iがキュー50の先頭区間[6、7]に含まれないため、特に処理を実行しない。
ステップS35について説明する。設定部152は、インデックスi=5に設定する。a[i]=Tとなるため、設定部152は、キュー50に区間[11、12](=[5+6、5+7])を挿入する。設定部152は、区間[9、10]と、区間[11、12]とをマージした区間[9、12]をキュー50の末尾に設定する。
図18の説明に移行する。ステップS36について説明する。設定部152は、インデックスi=6に設定する。a[i]=Fとなり、iがキュー50の先頭区間[6、7]に含まれるため、a[i]=Tに設定する。
ステップS37について説明する。設定部152は、インデックスi=7に設定する。a[i]=Fとなり、iがキュー50の先頭区間[6、7]に含まれるため、a[i]=Tに設定する。設定部152は、iが先頭区間[6、7]の終端であるため、キュー50から区間[6、7]を削除する。
設定部152は、インデックスi=8~14についても、上記処理を繰り返し実行する。インデックスi=8~14を設定した際の設定部152の処理の説明を省略する。
図19の説明に移行する。ステップS38について説明する。設定部152は、インデックスi=15を設定する。a[i]=Fとなり、iがキュー50の先頭区間[14、15]に含まれるため、a[i]=Tに設定する。設定部152は、iが先頭区間[14、15]の終端であるため、キュー50から区間[14、15]を削除する。
ステップS39について説明する。設定部152は、第1配列aについて、Tが設定されていた最も大きいインデックスi=8を超えて、キュー50が空となったため、処理を終了する。
上述した図16~図19の説明では、設定部152が、最低約定数および注文数が設定された売り注文を受け付け、第1配列aを更新する場合について説明した。設定部152は、最低約定数および注文数が設定された買い注文を受け付け、第2配列aを更新する場合についても、図16~図19の処理と同様にして、更新を行う。
情報処理装置100の約定数算出部153は、設定部152によって更新された第1配列a(第1配列情報143)と、第2配列a(第2配列情報144)とを基にして、最大約定数を算出する。すなわち、約定数算出部153は、第1配列情報143と、第2配列情報144とを比較して、第1配列情報143の要素と、第2配列情報144の要素とが両方とも「T」となるインデックスのうち、最も大きいインデックスを、最大の約定数として算出する。かかる最大の約定数は、最低約定数を保証する約定数となる。
本実施例2にかかる情報処理装置の説明を行う前に、証券市場において、金額を指定した全量約定注文を出す市場について考える。約定する場合の条件を以下の条件(1)、(2)、(3)とする。
どの売り注文も提示金額以上で約定され、部分約定は許されない・・・条件(1)
どの買い注文も提示金額以下で約定され、部分約定は許されない・・・条件(2)
証券取引所が損をしない:(証券取引所視点でみた場合)買い注文によって得られる金額の合計が、売り注文によって渡す金額の合計以下でなくてはならない・・・条件(3)
図20は、金額を指定した全量約定注文に関する売り注文と買い注文とのマッチング例を示す図である。図38に示す例では、売り注文として、注文Or1、Or2、Or3、Or4、Or5が存在する。注文Or1は、注文数「3」、受け渡し金額「6万円」となる注文である。注文Or2は、注文数「2」、受け渡し金額「5万円」となる注文である。注文Or3は、注文数「5」、受け渡し金額「12万円」となる注文である。注文Or4は、注文数「3」、受け渡し金額「7万円」となる注文である。注文Or5は、注文数「4」、受け渡し金額「13万円」となる注文である。
買い注文として、注文Or6、Or7、Or8が存在する。注文Or6は、注文数「4」、受け渡し金額「8万円」となる注文である。注文Or7は、注文数「2」、受け渡し金額「5万円」となる注文である。注文Or8は、注文数「6」、受け渡し金額「17万円」となる注文である。売り注文、買い注文の各受け渡し金額は、注文数分の受け渡し金額を示す。
条件(1)~(3)の下、図20に示した売り注文、買い注文に関して、約定数を最大化する場合、マッチング結果は、次のようになる。たとえば、約定対象は、売り注文Or1、Or2、Or3と、買い注文Or6、Or8となる。売り注文Or1、Or2、Or3の合計の注文数は「10」、合計の受け渡し金額は「23」となり、買い注文Or6、Or8の合計の注文数は「10」、合計の受け渡し金額は「25」となるため、条件(1)~(3)を満たす。
しかしながら、図20で説明したマッチングを行う場合、ナップサック問題となるため、ある程度の条件をつけなければ解くことが難しい。
続いて、本実施例2にかかる情報処理装置について説明する。本実施例2にかかる情報処理装置は、売り注文または買い注文をそれぞれ管理するために、金額配列を用意する。売り注文の金額配列を配列aとし、買い注文の金額配列を配列bとする。配列aは、第1配列に対応し、配列bは、第2配列に対応する。
配列a、bには、0以上のインデックスiが設定される。インデックスiは、約定数(注文数;)に対応する。配列のインデックスiに対応する要素には、約定のうち受け渡し金額の最小値が設定される。情報処理装置は、配列aの初期値として、a[0]=0、インデックスi>0に対してa[i]=∞(十分大きな値)とする。情報処理装置は、配列bの初期値として、b[0]=0、インデックスi>0に対してb[i]=∞(十分大きな値)とする。
まず、本実施例2にかかる情報処理装置が、マッチング可能な最大の約定数を算出する処理について説明する。図21および図22は、売り注文を受け付けた場合の配列aに対する処理を説明するための図である。情報処理装置は、a[i]<∞で、注文数x、金額pの注文が来た場合、a[i+x]>a[i]+pであれば、a[i+x]=a[i]+pとする(要素の値が小さくなるなら更新)。
図21について説明する。配列aの初期状態を、ステップS50に示すものとする。配列aの初期状態では、a[0]0となり、他の要素は全て「∞」となる。
注文数3、金額6(万円、以下省略)の売り注文を受け付けた場合、配列aの状態は、ステップS51に示すものとなる。配列a[0+3]=∞となり、a[0]+p=6となるため、配列a[0+3]>a[0]+pとなる。このため、情報処理装置は、配列a[0+3]=6に設定する。
注文数2、金額5の売り注文を受け付けた場合、配列aの状態は、ステップS52に示すものとなる。配列a[0+2]=∞となり、a[0]+p=5となるため、配列a[0+2]>a[0]+pとなる。このため、情報処理装置は、配列a[0+2]=5に設定する。配列a[3+2]=∞となり、a[3]+p=11となるため、配列a[3+2]>a[3]+pとなる。このため、情報処理装置は、配列a[3+2]=11に設定する。
図22の説明に移行する。注文数5、金額12の売り注文を受け付けた場合、配列aの状態は、ステップS53に示すものとなる。配列a[0+5]=11となり、a[0]+p=12となるため、配列a[0+5]<a[0]+pとなる。このため、情報処理装置は、配列a[0+5]=11のままとする(更新しない)。
配列a[2+5]=∞となり、a[2]+p=17となるため、配列a[2+5]>a[2]+pとなる。このため、情報処理装置は、配列a[2+5]=17に設定する。配列a[3+5]=∞となり、a[3]+p=18となるため、配列a[3+5]>a[3]+pとなる。このため、情報処理装置は、配列a[3+5]=18に設定する。
配列a[5+5]=∞となり、a[5]+p=13となるため、配列a[5+5]>a[5]+pとなる。このため、情報処理装置は、配列a[5+5]=23に設定する。
注文数3、金額7の売り注文を受け付けた場合、配列aの状態は、ステップS54に示すものとなる。配列a[0+3]=6となり、a[0]+p=7となるため、配列a[0+3]<a[0]+pとなる。このため、情報処理装置は、配列a[0+3]=6のままとする(更新しない)。配列a[2+3]=11となり、a[2]+p=12となるため、配列a[2+3]<a[2]+pとなる。このため、情報処理装置は、配列a[2+3]=11のままとする(更新しない)。
配列a[3+3]=∞となり、a[3]+p=13となるため、配列a[3+3]>a[3]+pとなる。このため、情報処理装置は、配列a[3+3]=13に設定する。配列a[3+5]=18となり、a[5]+p=18となるため、配列a[3+5]=a[5]+pとなる。このため、情報処理装置は、配列a[3+5]=18のままとする。
配列a[7+3]=23となり、a[7]+p=24となるため、配列a[7+3]<a[7]+pとなる。このため、情報処理装置は、配列a[7+3]=13のままとする(更新しない)。配列a[8+3]=∞となり、a[8]+p=25となるため、配列a[8+3]>a[8]+pとなる。このため、情報処理装置は、配列a[8+3]=25に設定する。
注文数4、金額13の売り注文を受け付けた場合、配列aの状態は、ステップS55に示すものとなる。配列a[0+4]=∞となり、a[0]+p=13となるため、配列a[0+4]>a[0]+pとなる。このため、情報処理装置は、配列a[0+4]=13に設定する。配列a[2+4]=13となり、a[2]+p=18となるため、配列a[2+4]<a[2]+pとなる。このため、情報処理装置は、配列a[2+4]=13のままとする(更新しない)。
配列a[3+4]=17となり、a[3]+p=19となるため、配列a[3+4]<a[3]+pとなる。このため、情報処理装置は、配列a[3+4]=17のままとする(更新しない)。配列a[5+4]=∞となり、a[5]+p=24となるため、配列a[5+6]>a[5]+pとなる。このため、情報処理装置は、配列a[5+4]=24に設定する。
配列a[6+4]=23となり、a[6]+p=24となるため、配列a[6+4]<a[6]+pとなる。このため、情報処理装置は、配列a[6+4]=23のままとする(更新しない)。配列a[7+4]=25となり、a[7]+p=28となるため、配列a[7+4]<a[7]+pとなる。このため、情報処理装置は、配列a[7+4]=25のままとする(更新しない)。
配列a[8+4]=∞となり、a[8]+p=31となるため、配列a[8+4]>a[8]+pとなる。このため、情報処理装置は、配列a[8+4]=31に設定する。配列a[10+4]=∞となり、a[10]+p=36となるため、配列a[10+4]>a[10]+pとなる。このため、情報処理装置は、配列a[10+4]=36に設定する。配列a[11+4]=∞となり、a[11]+p=38となるため、配列a[11+4]>a[11]+pとなる。このため、情報処理装置は、配列a[11+4]=38に設定する。
図23は、買い注文を受け付けた場合の配列bに対する処理を説明するための図である。情報処理装置は、b[i]>-∞で、注文数x、金額pの注文が来た場合、b[i+x]<b[i]+pであれば、b[i+x]=b[i]+pとする(要素の値が大きくなるなら更新)。
配列bの初期状態を、ステップS60に示すものとする。配列bの初期状態では、b[0]0となり、他の要素は全て「-∞」となる。
注文数4、金額8(万円、以下省略)の買い注文を受け付けた場合、配列bの状態は、ステップS61に示すものとなる。配列b[0+4]=-∞となり、b[0]+p=8となるため、配列b[0+4]<b[0]+pとなる。このため、情報処理装置は、配列b[0+4]=8に設定する。
注文数2、金額5の買い注文を受け付けた場合、配列bの状態は、ステップS62に示すものとなる。配列b[0+2]=-∞となり、b[0]+p=5となるため、配列b[0+2]<b[0]+pとなる。このため、情報処理装置は、配列b[0+2]=5に設定する。配列b[4+2]=-∞となり、b[4]+p=13となるため、配列b[4+2]<b[4]+pとなる。このため、情報処理装置は、配列b[4+2]=13に設定する。
注文数6、金額17の買い注文を受け付けた場合、配列bの状態は、ステップS63に示すものとなる。配列b[0+6]=-∞となり、b[0]+p=17となるため、配列b[0+6]<b[0]+pとなる。このため、情報処理装置は、配列b[0+6]=17に設定する。
配列b[2+6]=-∞となり、b[2]+p=22となるため、配列b[2+6]<b[2]+pとなる。このため、情報処理装置は、配列b[2+6]=22に設定する。配列b[4+6]=-∞となり、b[4]+p=25となるため、配列b[4+6]<b[4]+pとなる。このため、情報処理装置は、配列b[4+6]=25に設定する。
配列b[6+6]=-∞となり、b[6]+p=30となるため、配列b[6+6]<b[6]+pとなる。このため、情報処理装置は、配列b[6+6]=30に設定する。
本実施例2の情報処理装置は、図21,図22で説明した配列aと、図23で説明した配列bとを比較して、マッチング可能な最大の約定数量を特定する。
図24は、本実施例2にかかる約定数を算出する処理の一例を説明するための図である。情報処理装置は、売り注文の配列aと、買い注文の配列bをインデックスごとに走査し、a[i]≦b[i]となる最大のインデックスiを、最大の約定量として算出する。図24に示す例では、a[i]≦b[i]となるインデックスのうち、最大のインデックスは、インデックスi=10となるため、情報処理装置は、最大の約定数を「10」とする。
本実施例2にかかる情報処理装置は、実施例1で説明した情報処理装置100と同様にして、注文受付順(注文順)および数量(注文数)を示す補助情報を、インデックスごとに登録することで、約定対象となる注文を特定することが可能となる。
図25は、売り注文を受け付けた場合の配列aに対する処理を説明するための図(3)である。配列aの初期状態を、ステップS70に示すものとする。配列aの初期状態では、a[0]0となり、他の要素は全て「∞」となる。
初め(注文受付順=1)に、注文数3、金額6の売り注文を受け付けた場合、配列aの状態は、ステップS71に示すものとなる。情報処理装置は、図21のステップS51と同様にして、a[0+3]=6を設定する。また、情報処理装置は、インデックスi=3に、補助情報sub1-3を登録する。補助情報sub1-3には、順番「1」、数量「3(金額6)」が設定される。
続いて(注文受付順=2)、注文数2、金額5の売り注文を受け付けた場合、配列aの状態は、ステップS72に示すものとなる。情報処理装置は、図21のステップS52と同様にして、a[0+2]=5を設定する。情報処理装置は、インデックスi=2に、補助情報sub1-2を登録する。補助情報sub1-2には、順番「2」、数量「2(金額5)」が設定される。
情報処理装置は、図21のステップS52と同様にして、a[3+2]=11を設定する。情報処理装置は、インデックスi=5に、補助情報sub1-5を登録する。補助情報sub1-5には、順番「2」、数量「2(金額5)」が設定される。
情報処理装置は、売り注文を受け付ける度に、上記処理を繰り返し実行する。
図示を省略するが、情報処理装置は、買い注文を受け付けた場合も、配列bの要素に金額を設定すると共に、図25と同様にして、インデックスに補助情報を登録する。情報処理装置が、配列bの要素に金額を設定する処理は、図23と同様である。
図26は、本実施例2にかかる約定対象となる注文を特定する処理を説明するための図である。本実施例2にかかる約定対象となる注文を特定する処理は、基本的には、図5、図6で説明した処理と同様である。
情報処理装置は、約定数を算出した後に、配列aに設定された補助情報を基にして、約定対象となる注文を特定する。情報処理装置は、約定数iで約定する場合、インデックスの初期値i=iとして、以下の処理をi=0となるまで繰り返し実行する。
情報処理装置が繰り返す処理は次に示す処理となる。情報処理装置は、インデックスiに対応するa[i]の注文を約定対象とする。次に、情報処理装置は、a[i]に設定された補助情報に含まれる数量αを特定し、i=i-αによって、インデックスiを更新する。
図26の配列aを基にして、情報処理装置が、約定する売り注文を特定する処理について説明する。また、i0=5とする。情報処理装置は、約定数「5」に対応するインデックスi=5に設定された補助情報sub1-5に対応する注文を約定対象とする。情報処理装置は、補助情報sub1-5に含まれる数量α=2を取得し、インデックスi=5-2=3に更新する。
情報処理装置は、インデックスi=3に設定された補助情報sub1-3に対応する注文を約定対象とする。情報処理装置は、補助情報sub1-3に含まれる数量α=3を取得し、インデックスi=3-3=0に更新する。情報処理装置は、インデックスi=0となるため、処理を終了する。
上記処理によって、情報処理装置は、図25で説明した「注文数3、金額6の売り注文」と、「注文数2、金額5の売り注文」とを約定対象として特定する。図示を省略するが、情報処理装置は、配列bに対しても、図26に対応する処理を実行し、約定対象となる買い注文を特定する。
上記のように、本実施例2にかかる情報処理装置は、売り注文を受け付けた場合に、売り注文の注文順、注文数、金額に基づく情報を配列aに設定し、買い注文を受け付けた場合に、買い注文の注文順、注文数、金額に基づく情報を配列bに設定する。情報処理装置は、配列aに設定された情報と、配列bに設定された情報とを基にして、最大約定数を算出する。そして、情報処理装置は、算出した最大約定数と、配列aに設定された情報、配列bに設定された情報とを基にして、約定の対象となる注文を特定する。すなわち、本実施例2にかかる情報処理装置によれば、条件(1)、(2)、(3)を満たしつつ、約定数が最大となるような約定対象となる注文を特定することができる。
次に、図21~図26で説明した処理を実行する情報処理装置の構成の一例について説明する。図27は、本実施例2にかかる情報処理装置の構成を示す図である。図27に示すように、この情報処理装置200は、通信部210と、入力部220と、表示部230と、記憶部240と、制御部250とを有する。
通信部210は、有線又は無線で外部装置等に接続され、外部装置等との間で情報の送受信を行う。たとえば、通信部210は、NIC等によって実現される。通信部210は、図示しないネットワークに接続されていてもよい。たとえば、通信部210は、外部装置から、売り注文の情報を含む売り注文テーブル241の情報、買い注文の情報を含む買い注文テーブル242の情報等を受信する。たとえば、外部装置は、株の売り買いを管理し、約定の対象となった注文に関して各種の処理を実行するサーバに対応する。
入力部220は、各種の情報を、情報処理装置200に入力する入力装置である。入力部220は、キーボードやマウス、タッチパネル等に対応する。
表示部230は、制御部250から出力される情報を表示する表示装置である。表示部230は、液晶ディスプレイ、有機ELディスプレイ、タッチパネル等に対応する。
記憶部240は、売り注文テーブル241、買い注文テーブル242、第1配列情報243、第2配列情報244、約定結果情報245を有する。記憶部240は、たとえば、RAM、フラッシュメモリ等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。
売り注文テーブル241は、売り注文の注文順、注文数、金額を保持するテーブルである。図28は、本実施例2にかかる売り注文テーブルのデータ構造の一例を示す図である。図28に示すように、この売り注文テーブル241は、識別情報と、注文順と、注文数と、金額とを対応付ける。識別情報は、注文を一意に識別する情報である。注文順は、受け付けた注文の順番である。注文数は、注文の数である。金額は、売り注文の指定金額である。
買い注文テーブル242は、買い注文の注文順、注文数、金額を保持するテーブルである。図29は、本実施例2にかかる買い注文テーブル242のデータ構造の一例を示す図である。図29に示すように、この買い注文テーブル242は、識別情報と、注文順と、注文数と、金額を対応付ける。識別情報は、注文を一意に識別する情報である。注文順は、受け付けた注文の順番である。注文数は、注文の数である。金額は、買い注文の指定金額である。
第1配列情報243は、売り注文に関する注文順、注文数、金額に基づく情報を保持する配列情報である。第1配列情報243は、上述した配列aに対応する。図30は、第1配列情報のデータ構造の一例を示す図である。図30に示すように、この第1配列情報243は、インデックスと、要素と、補助情報とを有する。インデックスは、配列aのインデックスiに対応する。要素は、配列aの要素であり、金額が設定される。補助情報は、注文受付順(注文順)および数量(注文数)を示す情報である。
第2配列情報244は、買い注文に関する注文順、注文数、金額に基づく情報を保持する配列情報である。第2配列情報244は、上述した配列bに対応する。図31は、本実施例2にかかる第2配列情報のデータ構造の一例を示す図である。図31に示すように、この第2配列情報244は、インデックスと、要素と、補助情報とを有する。インデックスは、配列bのインデックスiに対応する。要素は、配列bの要素であり、金額が設定される。補助情報は、注文受付順(注文順)および数量(注文数)を示す情報である。
約定結果情報245は、最大の約定数と、約定対象となる注文の情報を保持する。図32は、本実施例2にかかる約定結果情報のデータ構造の一例を示す図である。図32に示すように、この約定結果情報245は、約定売り識別情報と、約定買い識別情報と、最大約定数とを有する。約定売り識別情報は、約定対象となる売り注文を識別する情報である。約定買い識別情報は、約定対象となる買い注文を識別する情報である。最大約定数は、最大の約定数を示す。
図27の説明に戻る。制御部250は、取得部251と、設定部252と、約定数算出部253と、注文特定部254と、出力制御部255とを有する。制御部250は、例えば、CPUやMPUにより実現される。また、制御部250は、例えばASICやFPGA等の集積回路により実行されてもよい。
取得部251は、外部装置等から、売り注文テーブル241のデータを取得した場合に、売り注文テーブル241のデータを、記憶部240に格納する。取得部251は、売り注文を個別に順に取得し、取得した売り注文の情報を、売り注文テーブル241に登録してもよい。
取得部251は、外部装置等から、買い注文テーブル242のデータを取得した場合に、買い注文テーブル242のデータを、記憶部240に格納する。取得部251は、買い注文を個別に順に取得し、取得した買い注文の情報を、買い注文テーブル242に登録してもよい。
設定部252は、売り注文テーブル241を基にして、売り注文に関する注文順、注文数、金額に基づく情報を、第1配列情報243(配列a)に設定する。また、設定部252は、買い注文テーブル242を基にして、買い注文に関する注文順および注文数に基づく情報を、第2配列情報244(配列b)に設定する。
設定部252が、売り注文テーブル241を基にして、売り注文に関する注文順、注文数、金額に基づく情報を、第1配列情報243に設定する処理は、図21、図22、図26等で説明した配列aの処理に対応する。設定部252は、a[i]<∞で、注文数x、金額pの注文が来た場合、a[i+x]>a[i]+pであれば、a[i+x]=a[i]+pとする(要素の値が小さくなるなら更新)。また、設定部252は、更新する場合に、補助情報をインデックスiに対応付けて登録する。
設定部252が、買い注文テーブル242を基にして、買い注文に関する注文順、注文数、金額に基づく情報を、第2配列情報244に設定する処理は、図23等で説明した配列bの処理に対応する。設定部252は、b[i]>-∞で、注文数x、金額pの注文が来た場合、b[i+x]<b[i]+pであれば、b[i+x]=b[i]+pとする(要素の値が大きくなるなら更新)。また、設定部252は、更新する場合に、補助情報をインデックスiに対応付けて登録する。
約定数算出部253は、第1配列情報243と、第2配列情報244とを基にして、売り注文と買い注文との最大約定数を算出する処理部である。約定数算出部253の処理は、図24で説明した処理に対応する。約定数算出部253は、第1配列情報243(配列a)と、第2配列情報244(配列b)をインデックスごとに走査し、a[i]≦b[i]となる最大のインデックスiを、最大の約定量として算出する。約定数算出部253は、算出した最大約定数を、約定結果情報245に登録する。
約定数算出部253は、約定数の決定指示を入力部220または外部装置等から受け付けたタイミングで上記処理を実行してもよい。約定数算出部253は、設定部252が、第1配列情報243および第2配列情報244を設定してから所定時間経過したタイミングで上記処理を実行してもよい。
注文特定部254は、最大約定数と、第1配列情報243と、第2配列情報244とを基にして、約定の対象となる注文を特定する処理部である。注文特定部254の処理は、図26で説明した処理に対応する。注文特定部254は、約定数(最大約定数)i0で約定する場合、インデックスの初期値i=i0として、以下の処理をi=0となるまで繰り返し実行する。
注文特定部254は、インデックスiに対応するa[i]の注文を約定対象とする。次に、注文特定部254は、a[i]に設定された補助情報に含まれる数量αを特定し、i=i-αによって、インデックスiを更新する。注文特定部254が、i=0となるまで繰り返し実行することで、約定対象の売り注文が特定される。
注文特定部254は、インデックスiに対応するb[i]の注文を約定対象とする。次に、注文特定部254は、b[i]に設定された補助情報に含まれる数量αを特定し、i=i-αによって、インデックスiを更新する。注文特定部254が、i=0となるまで繰り返し実行することで、約定対象の買い注文が特定される。
注文特定部254は、上記処理を実行することで特定した約定の対象となる注文の識別情報を、約定結果情報245に登録する。
出力制御部255は、約定結果情報245を、表示部230に出力して表示させる処理部である。出力制御部255は、約定結果情報245を外部装置に送信して、各種の約定処理を依頼してもよい。
次に、本実施例2にかかる情報処理装置200の処理手順の一例について説明する。図33は、本実施例2にかかる情報処理装置の処理手順を示すフローチャートである。図33に示すように、情報処理装置200の設定部152は、売り注文に関する配列aと、買い注文に関する配列bとを設定する(ステップS401)。配列aの情報は、第1配列情報243に対応する。配列bの情報は、第2配列情報244に対応する。
設定部252は、配列更新処理を実行する(ステップS402)。情報処理装置200は、注文を約定させない場合には(ステップS403,No)、ステップS402に移行する。情報処理装置200は、注文を約定させる場合には(ステップS403,Yes)、ステップS404に移行する。
情報処理装置200の約定数算出部253は、最大約定数を算出する(ステップS404)。情報処理装置200の注文特定部254は、注文特定処理を実行する(ステップS405)。
情報処理装置100の出力制御部255は、外部装置等に約定結果情報を通知し、約定処理を依頼する(ステップS406)。情報処理装置200は、処理を継続する場合には(ステップS407,Yes)、ステップS408に移行する。設定部252は、配列aおよび配列bを破棄し(ステップS408)、ステップS401に移行する。
一方、情報処理装置200は、処理を継続しない場合には(ステップS407,No)、処理を終了する。
次に、図33のステップS402で説明した配列更新処理の処理手順について説明する。図34は、本実施例2にかかる売り注文の配列更新処理の処理手順を示すフローチャートである。情報処理装置200の設定部252は、注文数X、金額Pの売り注文を受け付ける(ステップS501)。
設定部252は、配列aをコピーした配列a’を生成する(ステップS502)。設定部252は、iを初期値の0に設定する(ステップS503)。設定部252は、配列a’[1+X]=min(a[i+X],a[i]+P)により、配列a’を更新する(ステップS504)。
設定部252は、iに1を加算した値によって、iを更新する(ステップS505)。設定部252は、iが閾値以上でない場合には(ステップS506,No)、ステップS504に移行する。一方、設定部252は、iが閾値以上の場合には(ステップS506,Yes)、配列aに配列a’を上書きする(ステップS507)。
図35は、本実施例2にかかる買い注文の配列更新処理の処理手順を示すフローチャートである。情報処理装置200の設定部252は、注文数X、金額Pの買い注文を受け付ける(ステップS601)。
設定部252は、配列bをコピーした配列b’を生成する(ステップS602)。設定部252は、iを初期値の0に設定する(ステップS603)。設定部252は、配列b’[1+X]=max(b[i+X],b[i]+P)により、配列b’を更新する(ステップS604)。
設定部252は、iに1を加算した値によって、iを更新する(ステップS605)。設定部252は、iが閾値以上でない場合には(ステップS606,No)、ステップS504に移行する。設定部252は、iが閾値以上の場合には(ステップS606,Yes)、配列bに配列b’を上書きする(ステップS607)。
なお、図33のステップS406で説明した注文特定処理の処理手順は、実施例1の図14で説明した処理手順に対応する。
次に、本実施例2にかかる情報処理装置200の効果について説明する。情報処理装置200は、売り注文を受け付けた場合に、売り注文の注文順、注文数、金額に基づく情報を配列aに設定し、買い注文を受け付けた場合に、買い注文の注文順、注文数、金額に基づく情報を配列bに設定する。情報処理装置は、配列aに設定された情報と、配列bに設定された情報とを基にして、最大約定数を算出する。そして、情報処理装置は、算出した最大約定数と、配列aに設定された情報、配列bに設定された情報とを基にして、約定の対象となる注文を特定する。すなわち、本実施例2にかかる情報処理装置によれば、条件(1)、(2)、(3)を満たしつつ、約定数が最大となるような約定対象となる注文を特定することができる。
また、情報処理装置200は、第1配列情報243(配列a)と、第2配列情報244(配列b)をインデックスごとに走査し、a[i]≦b[i]となる最大のインデックスiを、最大の約定量として算出する。これによって、配列aと配列bとの比較により、最大約定数を容易に特定することができる。また、補助情報を用いて、配列a、配列bのインデックスを辿り、約定の対象となる注文を特定することができる。
ところで、上述した情報処理装置200では、注文数ごとの価格を多段階とする注文条件を含む注文を受け付ける場合がある。具体的には、情報処理装置200は、1株なら1.9万円以上、2株なら3.6万円以上、3株なら5.1万円以上のように、注文数に応じて、ことなる金額を注文条件とする注文を受け付ける。ここで、注文数ごとの価格を多段階とする注文については、どれか1つの段階における全量約定あるいは全て取り消しは許されるが、複数の段階での約定(例えば1株と3株を約定させ、1.9+5.1=7万円の引き渡し)は許されないものとする。
情報処理装置200では、注文数ごとの価格を多段階とする注文条件を含む注文を受け付けた場合には次のような処理を行い、段階ごとに個別に配列を更新させる(ただし、更新元は各段階を反映させる前の配列を用いる)。
図36は、本実施例3にかかる処理を説明するための図である。図36では、配列aを用いて説明する。また、情報処理装置200は、1株なら1.9万円以上、2株なら3.6万円以上、3株なら5.1万円以上とする、注文数ごとの価格を3段階とする注文条件を含む注文を受け付けたものとする。
図36に示すように、情報処理装置200は、注文段階ごとに個別に配列aを更新させる。反映前では、配列aは、a[0]=0、a[2]=5、a[3]=6、a[5]=11となり、他の要素は∞となる。
第1段階の配列aについて説明する。第1段階では、a[i+1]>a[i]+1.9となる場合に、a[i+1]=a[i]+1.9に更新する処理を、インデックスiをインクリメントしながら、繰り返し実行する。これによって、a[0]~a[6]の要素がそれぞれ、「0,1.9,5,6.9,7.9,11,12.9となる。
第2段階の配列aについて説明する。第2段階では、第1段階の配列について、a[i+2]>a[i]+3.5となる場合に、a[i+2]=a[i]+3.5に更新する処理を、インデックスiをインクリメントしながら、繰り返し実行する。これによって、a[0]~a[7]の要素がそれぞれ、0,1.9,3.6,6.9,7.9,9.6,12,14.6となる。
第3段階の配列aについて説明する。第3段階では、第2段階の配列について、a[i+3]>a[i]+5.1となる場合に、a[i+3]=a[i]+5.1に更新する処理を、インデックスiをインクリメントしながら、繰り返し実行する。これによって、a[0]~a[8]の要素がそれぞれ、0,1.9,3.6,5.1,7.9,8.6,11.1,14.6,16.1となる。
図36に示す例では、注文段階ごとに個別に配列aを更新される場合について説明したが、配列bについても同様に、更新することが可能である。また、本実施例1、2で説明した情報処理装置は、配列a、配列bを更新する場合に、セグメントツリーを用いて更新してもよい。
ここで、注文数(約定数)ごとの価格を多段階として細かく指定した約定数保証取引の場合、注文数をnとしたとき、上述した既存配列への反映にはO(n)の計算量がかかり、計算コストが大きくなる。
そこで、本実施例3の情報処理装置100、200における設定部152、252では、注文を設定した既存配列に対し、注文数ごとの価格を多段階とする注文条件に対応する配列を反映する場合、TACU(Try-And-Clean-Up)アルゴリズムを用いて畳み込みを行う。
TACUアルゴリズムは、MichaelBussieck, HannesHassler, Gerhard J.Woeginger, Uwe T.Zimmermannを著者とする「Fast algorithms for the maximum convolution problem」で提案されたアルゴリズムである。このTACUアルゴリズムでは、最大値畳み込みをO(nlogn)の計算量で実行することができ、計算コストを抑えることができる。
具体的には、TACUアルゴリズムでは、畳み込みを行うために入力される2つの数列をa、bとするここで、数列a、bは、それぞれn項の数列a,a,…,an-1およびn項の数列b,b,…,bn-1とする。また、TACUアルゴリズムの出力、すなわち畳み込み結果は、c=max(0≦i≦n-1){ak-i-b}とする。
TACUアルゴリズムでは、次の(1)~(4)のアルゴリズムにより畳み込み結果cを計算する。
(1)c=-∞で初期化する。
(2)集合{a+b|0≦i,j≦n-1}の大きい方からn・ln n個の値を抽出し、w,w,…,wn・ln nとする。
(3)すべての添字l=1,…,n・ln nでw=a+a>ci+jであるとき、ci+j=wとする。
(4)c=-∞となっているものに対してc=max{ak-i+b}を計算する。
このアルゴリズムで行っていることは、次のとおりである。
・添字kのうち、大きい方からn・ln n個に入っているもの(良い添字と呼ぶ)はそれを採用する。添字kのうち、大きい方からn・ln n個に入っていないもの(悪い添字と呼ぶ)は直に計算する。
・悪い添字の直の計算は、平均的に少なくなることが証明でき、全体でもO(nlogn)の平均計算量である。
・最小値に畳み込む場合も上記のアルゴリズムを「大きい」を「小さい」に変え、-∞を+∞に変え、不等号の向きを逆にすることで適用できる。
このTACUアルゴリズムを用いた畳み込みにより、注文数ごとの価格を多段階とする注文条件に対応する配列を反映する場合の情報処理装置100、200の処理は次のとおりに行う。
まず、反映前の既存の配列をaとする。図37は、本実施例3にかかる配列情報のデータ構造の一例を示す図である。図37に示すように、ケースC1は、反映前のaを例示しており、受付済みの注文状況(売り注文)の一例を示している。具体的には、配列aには、a=0,a=∞,a=5,a=6,…のように値が入っている。
反映させたい注文(受け付けた売り注文)の配列bは、注文数がn株の購入時に支払う(買い注文の場合はもらう)金額の配列とする。情報処理装置100、200の設定部152、252は、反映させたい注文(売り注文/買い注文)の配列bを受け付けて、注文状況(売り注文/買い注文)に対応する既存の配列aに、配列bをTACUアルゴリズムを用いた畳み込みにより反映する。
ここでは、1株なら1.9万円以上、2株なら3.6万円以上、3株なら5.1万円以上とする、注文数ごとの価格を3段階とする注文条件を含む注文を情報処理装置100、200が受け付けたものとする。この場合、配列bは、b=0,b=1.9,b=3.6,b=5.1といった具合になる(他の項は∞としておく)。なお、b=0が約定させないことに対応している。
TACUアルゴリズムを用いた反映後の配列cは、a,bの最小値による畳み込みとなる。図37におけるケースC2は、上記の内容のa,bの最小値による畳み込みの結果(配列c)を示している。
例えば、情報処理装置100、200の設定部152、252は、TACUアルゴリズムを用いた最小値による畳み込みにより、cを次のように求める。
・c=min{a+b,a+b,a+b,a+b}=min{5.1,∞,6.9,6}=5.1
この最小値(買い注文の場合は最大値)による畳み込み計算は、通常、O(n)の計算量がかかるが、TACUアルゴリズムを用いることでO(nlogn)の計算量で済む。
図38は、本実施例3にかかる情報処理装置の処理手順を示すフローチャートである。図38に示すように、情報処理装置100(200)の取得部151(251)は、売り注文と買い注文の入力を受け付ける(S701)。
次いで、設定部152(252)は、受け付けた売り注文について上記の畳み込み(配列更新処理)を実行して配列A(第1配列情報143(243))を生成する(S702)。
次いで、設定部152(252)は、受け付けた買い注文について上記の畳み込み(配列更新処理)を実行して配列B(第2配列情報144(244))を生成する(S703)。
次いで、注文特定部154(254)は、上記の約定対象となる注文を特定する処理により、配列A[p]≦B[p]となる最大のpを探索し、金額pでの約定を特定する(S704)。
図39は、本実施例3にかかる売り注文の配列更新処理の処理手順を示すフローチャートである。具体的には、図39は、S702における配列Aを生成する設定部152(252)の処理手順を示している。なお、以下の説明では、設定部252の記載を省略する。
図39に示すように、処理が開始されると、設定部152は、受け付けた売り注文に対応する到着注文列{(nij,pij)}の入力を受け付ける(S711)。ここで、nijは、受け渡し株数を示す。また、pijは、受け取り金額を示す。
次いで、設定部152は、a[0]を0、その他の要素を∞の配列(既存配列)aを用意する(S712)。次いで、設定部152は、到着注文列の各注文(i=1,2,…,n)についてS713~S716のループ処理を実行する。
具体的には、設定部152は、注文列{(nij,pij)}から配列bを、b[nij]=pij、その他の要素を∞となるように作成する(S714)。次いで、設定部152は、配列a、bをTACUアルゴリズムを用いた最小値畳み込みにより畳み込んだ配列を求める。次いで、設定部152は、このようにして求めた配列、すなわち売り注文を組み合わせた状況に対応する既存配列を新たな配列aとする(S715)。
S713~S716のループ処理に次いで、設定部152は、得られた配列aを、受け付けた全ての売り注文を反映した配列A(第1配列情報143)として処理を終了する。
図40は、本実施例3にかかる買い注文の配列更新処理の処理手順を示すフローチャートである。具体的には、図40は、S703における配列Bを生成する設定部152(252)の処理手順を示している。なお、以下の説明では、設定部252の記載を省略する。
図40に示すように、処理が開始されると、設定部152は、受け付けた買い注文に対応する到着注文列{(nij,pij)}の入力を受け付ける(S721)。ここで、nijは、受け渡し株数を示す。また、pijは、支払い金額を示す。
次いで、設定部152は、a[0]を0、その他の要素を-∞の配列(既存配列)aを用意する(S722)。次いで、設定部152は、到着注文列の各注文(i=1,2,…,n)についてS723~S726のループ処理を実行する。
具体的には、設定部152は、注文列{(nij,pij)}から配列bを、b[nij]=pij、その他の要素を-∞となるように作成する(S724)。次いで、設定部152は、配列a、bをTACUアルゴリズムを用いた最大値畳み込みにより畳み込んだ配列を求める。次いで、設定部152は、このようにして求めた配列、すなわち買い注文を組み合わせた状況に対応する既存配列を新たな配列aとする(S725)。
S723~S726のループ処理に次いで、設定部152は、得られた配列aを、受け付けた全ての買い注文を反映した配列B(第2配列情報144)として処理を終了する。
以上のように、情報処理装置100、200は、注文に関する注文順および注文数に基づく情報を配列に設定する。情報処理装置100、200は、設定した配列に対して、注文数ごとの価格を多段階とする注文条件に対応する配列をTACU(Try-And-Clean-Up)アルゴリズムを用いて畳み込む。これにより、情報処理装置100、200では、畳み込みをO(nlogn)の計算量で実行することができ、計算コストを抑えることができる。
また、情報処理装置100、200は、売り注文に関して設定した配列に対して、注文条件に対応する配列を最小値を採用する条件でTACUアルゴリズムを用いて畳み込む。これにより、情報処理装置100、200では、売り注文に関する配列をO(nlogn)の計算量で求めることができる。
また、情報処理装置100、200は、買い注文に関して設定した配列に対して、注文条件に対応する配列を最大値を採用する条件でTACUアルゴリズムを用いて畳み込む。これにより、情報処理装置100、200では、買い注文に関する配列をO(nlogn)の計算量で求めることができる。
なお、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
また、上記の各実施例では証券取引市場における株取引で全量約定、または、一定数の注文数を条件にして、注文を行う場合に適用するケースを例示したが、株取引への適用に限定するものではない。例えば、先物取引市場などの株取引以外の取引に適用してもよい。
また、情報処理装置100、200で行われる各種処理機能は、CPU(またはMPU、MCU(Micro Controller Unit)等のマイクロ・コンピュータ)あるいはGPU(Graphics Processing Unit)上で、その全部または任意の一部を実行するようにしてもよい。また、各種処理機能は、CPU(またはMPU、MCU等のマイクロ・コンピュータ)あるいはGPUで解析実行されるプログラム上、またはワイヤードロジックによるハードウェア上で、その全部または任意の一部を実行するようにしてもよいことは言うまでもない。また、情報処理装置100、200で行われる各種処理機能は、クラウドコンピューティングにより、複数のコンピュータが協働して実行してもよい。
次に、上記実施例に示した情報処理装置100(200)と同様の機能を実現するコンピュータのハードウェア構成の一例について説明する。図41は、実施例の情報処理装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
図41に示すように、コンピュータ300は、各種演算処理を実行するCPU301と、ユーザからのデータの入力を受け付ける入力装置302と、ディスプレイ303とを有する。また、コンピュータ300は、有線または無線ネットワークを介して、外部装置等との間でデータの授受を行う通信装置304と、インタフェース装置305とを有する。また、コンピュータ300は、各種情報を一時記憶するRAM306と、ハードディスク装置307とを有する。そして、各装置301~307は、バス308に接続される。
ハードディスク装置307は、取得プログラム307a、設定プログラム307b、約定数算出プログラム307c、注文特定プログラム307d、出力制御プログラム307eを有する。また、CPU301は、各プログラム307a~307eを読み出してRAM306に展開する。
取得プログラム307aは、取得プロセス306aとして機能する。設定プログラム307bは、設定プロセス306bとして機能する。約定数算出プログラム307cは、約定数算出プロセス306cとして機能する。注文特定プログラム307dは、注文特定プロセス306dとして機能する。出力制御プログラム307eは、出力制御プロセス306eとして機能する。
取得プロセス306aの処理は、取得部151,251の処理に対応する。設定プロセス306bの処理は、設定部152,252の処理に対応する。約定数算出プロセス306cの処理は、約定数算出部153,253の処理に対応する。注文特定プロセス306dの処理は、注文特定部154,254の処理に対応する。出力制御プロセス306eの処理は、出力制御部155,255の処理に対応する。
なお、各プログラム307a~307eについては、必ずしも最初からハードディスク装置307に記憶させておかなくても良い。例えば、コンピュータ300に挿入されるフレキシブルディスク(FD)、CD-ROM、DVD、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ300が各プログラム307a~307eを読み出して実行するようにしてもよい。また、公衆回線、インターネット、LAN等のネットワークに接続された外部装置に各プログラム307a~307eを記憶させておき、コンピュータ300がネットワークに接続された外部装置から各プログラム307a~307eを読み出して実行するようにしてもよい。
以上の実施形態に関し、さらに以下の付記を開示する。
(付記1)注文に関する注文順および注文数に基づく情報を配列に設定し、
設定した前記配列に対して、前記注文数ごとの価格を多段階とする注文条件に対応する配列をTACU(Try-And-Clean-Up)アルゴリズムを用いて畳み込む、
処理をコンピュータに実行させることを特徴とする約定プログラム。
(付記2)前記畳み込む処理は、売り注文に関して設定した前記配列に対して、前記注文条件に対応する配列を最小値を採用する条件で前記TACUアルゴリズムを用いて畳み込む処理を含む、
ことを特徴とする付記1に記載の約定プログラム。
(付記3)前記畳み込む処理は、買い注文に関して設定した前記配列に対して、前記注文条件に対応する配列を最大値を採用する条件で前記TACUアルゴリズムを用いて畳み込む処理を含む、
ことを特徴とする付記1または2に記載の約定プログラム。
(付記4)注文に関する注文順および注文数に基づく情報を配列に設定し、
設定した前記配列に対して、前記注文数ごとの価格を多段階とする注文条件に対応する配列をTACU(Try-And-Clean-Up)アルゴリズムを用いて畳み込む、
処理をコンピュータが実行することを特徴とする約定方法。
(付記5)前記畳み込む処理は、売り注文に関して設定した前記配列に対して、前記注文条件に対応する配列を最小値を採用する条件で前記TACUアルゴリズムを用いて畳み込む処理を含む、
ことを特徴とする付記4に記載の約定方法。
(付記6)前記畳み込む処理は、買い注文に関して設定した前記配列に対して、前記注文条件に対応する配列を最大値を採用する条件で前記TACUアルゴリズムを用いて畳み込む処理を含む、
ことを特徴とする付記4または5に記載の約定方法。
(付記7)注文に関する注文順および注文数に基づく情報を配列に設定し、
設定した前記配列に対して、前記注文数ごとの価格を多段階とする注文条件に対応する配列をTACU(Try-And-Clean-Up)アルゴリズムを用いて畳み込む、
処理を実行する制御部を含むことを特徴とする情報処理装置。
(付記8)前記畳み込む処理は、売り注文に関して設定した前記配列に対して、前記注文条件に対応する配列を最小値を採用する条件で前記TACUアルゴリズムを用いて畳み込む処理を含む、
ことを特徴とする付記7に記載の情報処理装置。
(付記9)前記畳み込む処理は、買い注文に関して設定した前記配列に対して、前記注文条件に対応する配列を最大値を採用する条件で前記TACUアルゴリズムを用いて畳み込む処理を含む、
ことを特徴とする付記7または8に記載の情報処理装置。
100、200…情報処理装置
110、210…通信部
120、220…入力部
130、230…表示部
140、240…記憶部
141、241…売り注文テーブル
142、242…買い注文テーブル
143、243…第1配列情報
144、244…第2配列情報
145、245…約定結果情報
150、250…制御部
151、251…取得部
152、252…設定部
153、253…約定数算出部
154、254…注文特定部
155、255…出力制御部
300…コンピュータ
301…CPU
302…入力装置
303…ディスプレイ
304…通信装置
305…インタフェース装置
306…RAM
306a…取得プロセス
306b…設定プロセス
306c…約定数算出プロセス
306d…注文特定プロセス
306e…出力制御プロセス
307…ハードディスク装置
307a…取得プログラム
307b…設定プログラム
307c…約定数算出プログラム
307d…注文特定プログラム
307e…出力制御プログラム
308…バス
C1、C2…ケース

Claims (5)

  1. 注文に関する注文順および注文数に基づく情報を配列に設定し、
    設定した前記配列に対して、前記注文数ごとの価格を多段階とする注文条件に対応する配列をTACU(Try-And-Clean-Up)アルゴリズムを用いて畳み込む、
    処理をコンピュータに実行させることを特徴とする約定プログラム。
  2. 前記畳み込む処理は、売り注文に関して設定した前記配列に対して、前記注文条件に対応する配列を最小値を採用する条件で前記TACUアルゴリズムを用いて畳み込む処理を含む、
    ことを特徴とする請求項1に記載の約定プログラム。
  3. 前記畳み込む処理は、買い注文に関して設定した前記配列に対して、前記注文条件に対応する配列を最大値を採用する条件で前記TACUアルゴリズムを用いて畳み込む処理を含む、
    ことを特徴とする請求項1または2に記載の約定プログラム。
  4. 注文に関する注文順および注文数に基づく情報を配列に設定し、
    設定した前記配列に対して、前記注文数ごとの価格を多段階とする注文条件に対応する配列をTACU(Try-And-Clean-Up)アルゴリズムを用いて畳み込む、
    処理をコンピュータが実行することを特徴とする約定方法。
  5. 注文に関する注文順および注文数に基づく情報を配列に設定し、
    設定した前記配列に対して、前記注文数ごとの価格を多段階とする注文条件に対応する配列をTACU(Try-And-Clean-Up)アルゴリズムを用いて畳み込む、
    処理を実行する制御部を含むことを特徴とする情報処理装置。
JP2021002887A 2021-01-12 2021-01-12 約定プログラム、約定方法および情報処理装置 Pending JP2022108070A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2021002887A JP2022108070A (ja) 2021-01-12 2021-01-12 約定プログラム、約定方法および情報処理装置
US17/522,044 US20220222745A1 (en) 2021-01-12 2021-11-09 Execution method and information processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021002887A JP2022108070A (ja) 2021-01-12 2021-01-12 約定プログラム、約定方法および情報処理装置

Publications (1)

Publication Number Publication Date
JP2022108070A true JP2022108070A (ja) 2022-07-25

Family

ID=82321990

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021002887A Pending JP2022108070A (ja) 2021-01-12 2021-01-12 約定プログラム、約定方法および情報処理装置

Country Status (2)

Country Link
US (1) US20220222745A1 (ja)
JP (1) JP2022108070A (ja)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020049661A1 (en) * 2000-10-14 2002-04-25 Goldman, Sachs & Company Apparatus, methods and articles of manufacture for constructing and executing computerized transaction processes and programs
US8346653B2 (en) * 2003-04-24 2013-01-01 Chicago Board Options Exchange, Incorporated Automated trading system for routing and matching orders
US20100017323A1 (en) * 2008-07-16 2010-01-21 Carla Git Ying Wong Method and System for Trading Combinations of Financial Instruments
US20120072327A1 (en) * 2010-06-18 2012-03-22 Tilly Edward T Automated trading system for routing and matching orders
US11295382B2 (en) * 2017-09-12 2022-04-05 Mark Gimple System and method for global trading exchange

Also Published As

Publication number Publication date
US20220222745A1 (en) 2022-07-14

Similar Documents

Publication Publication Date Title
US20230005061A1 (en) Generating implied orders based on electronic requests for quotes
US6157918A (en) Methods and apparatus relating to the formulation and trading of investment contracts
US8417618B2 (en) Utilizing a trigger order with multiple counterparties in implied market trading
JP2022137304A (ja) 注文分散のための製品および処理
US20220327623A1 (en) Accelerated trade matching using speculative parallel processing
US20150006349A1 (en) Electronic Trading Auction With Orders Interpreted Using Future Information
US20100017323A1 (en) Method and System for Trading Combinations of Financial Instruments
JP2006520049A (ja) 可変注文価格を使用するデリバティブ商品取引方法
JP7317168B2 (ja) セルサイドのマーケットメイキングを促進するプロセス間通信
JP2017511550A (ja) トランザクションの最新情報を提供するシステム及び方法
AU2010295872A1 (en) Transformation of a multi-leg security definition for calculation of implied orders in an electronic trading system
WO2011034729A1 (en) Ratio spreads for contracts of different sizes in implied market trading
JP2011138470A (ja) 特許評価方法及びそのコンピュータ読み取り可能な保存媒体
JP2007514240A (ja) 複数の条件付き取引を処理するシステム及び方法
US20140236799A1 (en) Out of Band Credit Control
US8762252B2 (en) Out of band credit control
US20240202829A1 (en) Guarantee fund calculation with allocation for self-referencing risk
JP2022108070A (ja) 約定プログラム、約定方法および情報処理装置
Wang et al. Designing a Combinatorial Financial Options Market
JP2022108055A (ja) 約定プログラム、約定方法および情報処理装置
JP2023009534A (ja) 約定プログラム、約定方法および情報処理装置
WO2022070257A1 (ja) 最適化装置、最適化方法、及び、記録媒体
CA3049762C (en) Systems and methods of sequencing or combining multiple related, but different, transaction requests into a single transaction
EP3079117A1 (en) Platform for handling multilateral over the counter transactions
JP2021189906A (ja) 約定プログラム、約定方法および情報処理装置