前回、サンプルプログラムでも使用していましたが、ポジションの状態を参照するためにIOrderインターフェースで取得できるOrder stateを利用しました。
今回はそのOrder stateをもう少し詳しく解説してみたいと思います。
注文情報とポジション情報の見分け方
参照するIOrderオブジェクトが注文情報を意味しているのか、ポジション保有状態を意味しているのかは、「Order state」を見ることで判別できます。
Order stateが、「CREATED」 もしくは「OPENED」の状態にあるときは、注文情報を意味し、「FILLED」の時はポジション情報を意味します。
また、「CANCELLED」状態はキャンセルされた注文を意味し、「CLOSED」状態はポジションがクローズされた状態を意味します。
Order state(注文状態)について
「Order state」は、列挙型として「IOrder.State」で定義されており、IOrderインターフェースの「getState()」関数で取得できます。
IOrder.Stateの状態には、OPENED、CREATED、FILLED、CLOSED、CANCELLEDの5つの状態があります。
OPENED、CREATED、FILLEDの状態は、オーダーのクローズやキャンセル等で状態が変化しますが、CLOSED、CANCELLEDになったものは状態が変化することはありません。
CLOSEDになったオーダーデータは、IHistoryインターフェースを通して読み出すことができますが、CANCELLEDとなったものはオーダーヒストリーに含まれないので読み出せません。
Order stateが変化するタイミングには、ユーザーのマニュアル操作やストラテジーによる発注、キャンセル等のアクション時、または、サーバーサイドにおいて注文で指定したプライスにレートがヒットしたのを検出した時の2つのパターンが考えられます。
Order stateに変化があると、ストラテジーのonMessageコールバック関数が呼ばれ、引数として渡される「IMessage」オブジェクトを通してどの状態へ変化したのかを知ることができます。
具体的には、IMessageオブジェクトのgetType()でメッセージのタイプを取得して判別します。
オーダー変化に対応するそれぞれのメッセージタイプは「IMessage.Type」で定義されています。
注文状態とメッセージの組み合わせは下記の状態遷移図にまとまっているので、どの状態でどのメッセージが通知されるのかをしっかりと理解しておきましょう。
Conditional order(条件付注文)の状態遷移図
コメント