クローズオーダーはIOrder.closeメソッドかIEngine.closeOrdersメソッドのいずれかを使います。
・IOrder.close(全取引数量のクローズ要求を送信する場合)
engine.getOrder("OrderLabel").close();
・IOrder.close(取引数量を指定してクローズ要求(部分クローズ)を送信する場合)
double amount = 0.001;
engine.getOrder("OrderLabel").close(
amount
);
・IOrder.close(価格とスリップページを指定してクローズ要求(部分クローズ)を送信する場合)
double amount = 0.001;
double lastBid = history.getLastTick(Instrument.EURUSD).getBid();
double closeprice = lastBid - 100 * Instrument.EURUSD.getPipValue();
double slip = 5;
engine.getOrder("OrderLabel").close(
amount,
closeprice,
slip
);
・IEngine.closeOrder(複数のポジションをクローズする)
engine.closeOrders(
engine.getOrder("order1"),
engine.getOrder("order2"),
engine.getOrder("order3")
);
クローズオーダー要求の送信は1秒間に1回までと制限されています。
IOrder.getClosePrice() と IOrder.getCloseTime() は最後にクローズした時間と価格を示します、
これは部分クローズでクローズオーダーを行った場合、最後にクローズしたデータについてのみ取得出来ます。
通常は、以下例のようにオーダー送信する前にオーダー状態をチェックする事を推奨します。
if( order.getState() == IOrder.State.FILLED || order.getState() == IOrder.State.OPENED ){
order.close();
} else {
console.getOut().println( order.getState() + "状態ではクローズオーダーは出来ません。" );
}
サンプル(クローズオーダーとオーダー取消しのワークフロー)
このサンプルではクローズオーダーとオーダー取消しのやり方と、オーダー状態とメッセージのワークフローにどのように従うかを理解出来ます。
また、全てのアクティブオーダーをクローズ/取消しする方法も分かります。
サンプルソースコード:
CloseOrderVarious.java
サンプル(部分クローズ)
サンプルソースコード:
PartialClose.java
サンプル(価格指定の部分クローズ)
サンプルソースコード:
PartialCloseByPrice.java
サンプル(タイムインターバルによるクローズ)
サンプルソースコード:
OrderTimedClose.java