Market class

Description

Market クラスは,連続ダブルオークション(ザラバ方式)に従う注文の処理を行う. このクラスはすべてのマーケットの基底クラスを担う.

本ソフトウェアにおいて,Market クラスは金融用語としての「市場」とは異なり,ある個別特定の「銘柄」に対する注文を処理するシステムを抽象化している. したがって,モデル上で扱いたい「銘柄」の数だけ,Market クラスのインスタンスを作る必要がある. 本稿では,Market クラスのインスタンス(個別特定の銘柄に対応する)を表す言葉として「マーケット」を用いる.

Market クラスは,マーケットに注文の処理を実行させる役割を担うメソッド handleOrders(...) をもつ. プログラマは handleOrders(...) をオーバーライドし,任意の注文処理を実装できる. Market クラスは,マーケットの情報として,価格時系列,買い板・売り板(また気配値)をフィールドとしてもつ.

Model

連続ダブルオークションでは,トレーダ・エージェントはいつでも注文をだすことができる. 注文には,対象銘柄,売り買いの区別,価格,単位数,保留期間といった情報を指定する. 注文は,板(オーダーブック)上で価格優先・時間優先の原則に従って順序づけされ,順序の先頭から約定の対象となる. 注文が届いたとき,もし相対する注文が板にあればただちに約定し,現金と株式の交換(取引)が実行される. もし相対する注文がなければ,その注文は板に追加される.

Arrow of time

シミュレーション上での時間の進み方を説明する. マーケットは時点 $t$ を含む現在までの価格時系列を保管している. 時点 $t$ でエージェントが出した注文は時点 $t + 1$ の価格を決める. 時点 $t$ はティック時間とは区別され,ある時点 $t$ から $t + 1$ までの間に複数の注文が約定することもありうる(シミュレーションの設定に依存する).

Determination of next prices

時点を跨ぐときの価格更新の手続きを説明する. ある時点 $t$ から $t + 1$ までの間に複数の注文が約定した場合,その最後の取引価格が次時点 $t + 1$ の市場価格となる. もし時点 $t$ で約定が起きなければ,次時点 $t + 1$ の市場価格には仲値が設定される. ただし,もし板に注文が存在せず,仲値を計算できなければ,次時点 $t + 1$ の市場価格は時点 $t$ の市場価格が設定される. 以上の価格更新処理のあと,次の時点 $t + 1$ での注文を受け付ける.

Parameters

  JSON keyword Field variable  
  marketPrice marketPrices 初期の市場価格
  fundamentalPrice fundamentalPrices 初期のファンダメンタル価格
  tickSize tickSize ティックサイズ

Parameter setup from JSON

marketPrice

初期の市場価格を設定する. 例)

{  "marketPrice": 10000.0  }

fundamentalPrice

初期のファンダメンタル価格を設定する. JSON ファイルのマーケットに関する記述に,もし fundamentalPrice が未定義ならば,marketPrice の値が代わりに設定される. 例)

{  "fundamentalPrice": 10000.0  }

tickSize

ティックサイズを指定する. 売り注文の場合,ティックサイズより小さな端数は切り上げる(Math.ceil). 買い注文の場合,ティックサイズより小さな端数は切り下げる(Math.floor). ただし,tickSize < 0 を指定した場合,ティックサイズなし(無限小)に設定できる. 例)

{  "tickSize": 0.001  }

Fields & Methods

getTime()

マーケットの現在の時点 $t$ を返す. マーケットは時点 $t$ を含む現在までの価格時系列を保管している. 時点 $t$ でエージェントが出した注文は時点 $t + 1$ の価格を決める.

getPrice(t:Long), getMarketPrice(t:Long)

時点 $t$ の市場価格を返す. マーケットは getTime() メソッドが返す時点を含む現在までの価格時系列を保管している.

getFundamentalPrice(t:Long)

時点 $t$ のファンダメンタル価格を返す. マーケットは getTime() メソッドが返す時点を含む現在までの価格時系列を保管している.

getBuyOrderBook(), getSellOrderBook()

Market クラスは,買い板と売り板に対応した2つの OrderBook クラスのインスタンスをもつ. いずれも Market クラスのコンストラクタでインスタンス化される. 各フィールドへのアクセスは以下のメソッドを呼ぶ.

なお,買い気配値,売り気配値の取得には getBestBuyPrice()getBestSellPrice() を使える.

getBestBuyPrice(), getBestSellPrice()

買い気配値(best buy/bid),売り気配値(best sell/ask)を返す. ただし,もし買い・売り注文が板に存在しなければ,Double.NaN を返す.

getMidPrice()

仲値(買い気配値と売り気配値の中間の値)を返す. ただし,もし買い・売り注文が板に存在しなければ,Double.NaN を返す.