今回は、JForex APIで注文情報の管理方法について解説します。
既存の注文情報(IOrderオブジェクト)にアクセスしたい場合、IEngineインターフェースの関数を利用することができます。
IEngineインターフェースを利用すると、手動で発注したオーダーを含め、全てのストラテジーから発注されたIOrderオブジェクトを取得することができます。
ストラテジーのスケルトンコードでは、IEngineオブジェクトにアクセスするためのクラス変数「engine」が定義されており、OnStartコールバック関数内でIEngineオブジェクトへの参照がセットされています。
このIEngineオブジェクト「engine」を利用して注文情報にアクセスします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class Strategy implements IStrategy { private IEngine engine; private IConsole console; private IHistory history; private IContext context; private IIndicators indicators; private IUserInterface userInterface; public void onStart(IContext context) throws JFException { this.engine = context.getEngine(); this.console = context.getConsole(); this.history = context.getHistory(); this.context = context; this.indicators = context.getIndicators(); this.userInterface = context.getUserInterface(); } |
注文情報を取得する
IEngineインターフェースの「 getOrder 」及び「getOrderById」を利用すると特定のオーダー情報が取得できます。
「getOrder」は引数に発注時に設定したオーダーラベルを指定することで、指定したオーダーの情報を取得できます。
1 |
IOrder orderByLabel = engine.getOrder("label"); |
「getOrderById」は引数にオーダーIDを指定することで、指定したオーダーの情報を取得できます。
オーダーIDはIOrderインターフェースの「getId」関数で取得できるIDのことです。
1 |
IOrder orderById = engine.getOrderById("id"); |
「getOrders」関数を利用すれば、 IOrder.StateがCREATED、OPEND、FILLEDとなっているすべての注文情報をリストとして取得できます。
1 |
List<IOrder> Orders = engine.getOrders(); |
「getOrders」に引数で通貨ペア名を渡せば、IOrder.StateがCREATED、OPEND、FILLEDとなっている特定の通貨ペアの注文情報のみリストで取得できます。
1 |
List<IOrder> Orders = engine.getOrders(Instrument.EURUSD); |
各種条件に一致する注文情報を取得するサンプル
利益になっている注文情報のみを取得する
IOrderインターフェースの「getProfitLossInUSD」関数を使用すれば、ポジションの米ドル換算での損益を取得できます。
engineインターフェースの「getOrders」で注文を順次取り出し、getProfitLossInUSDの戻り値が0以上の注文情報のみを新しく作成したリスト「orders」に格納します。
1 2 3 4 5 6 7 |
List<IOrder> orders = new ArrayList<IOrder>(); for(IOrder o : engine.getOrders()) { if(o.getProfitLossInUSD() >= 0){ orders.add(o); } } |
損失になっている注文情報のみを取得する
getProfitLossInUSDの戻り値が0より小さいときのみリストに追加します。
1 2 3 4 5 6 7 |
List<IOrder> orders = new ArrayList<IOrder>(); for(IOrder o : engine.getOrders()) { if(o.getProfitLossInUSD() < 0){ orders.add(o); } } |
保有ポジションの注文情報のみを取得する
IOrder.Stateが「FILLED」になっている注文情報のみリストに追加します。
1 2 3 4 5 6 7 |
List<IOrder> orders = new ArrayList<IOrder>(); for(IOrder o : engine.getOrders()) { if(o.getState() == IOrder.State.FILLED){ orders.add(o); } } |
執行待機中の注文情報のみを取得する
IOrder.Stateが「OPEND」になっている注文情報のみリストに追加します。
1 2 3 4 5 6 7 |
List<IOrder> orders = new ArrayList<IOrder>(); for(IOrder o : engine.getOrders()) { if(o.getState() == IOrder.State.OPENED){ orders.add(o); } } |
コメント