ストラテジーでは、以下の3種類の条件付きオーダーの一つを使用する事が出来ます。
- ストップオーダー
- リミットオーダー
- MITオーダー(Market if Touch Order)
上記のオーダーは全て同じIEngine.submitOrderメソッドで設定しますが、IEngine.OrderCommandの異なるオーダーコマンドを使用して送信されます。
ストップオーダー
submitOrderメソッドを用いて買いストップオーダー設定を行う事が出来ます。
引数にBUYSTOP_BYBIDコマンドを指定します。
現在のBid価格がストップオーダー価格以上の場合に約定されます。
engine.submitOrder(
"OrderLabel",
Instrument.EURUSD,
OrderCommand.BUYSTOP_BYBID,
0.001,
price
);
注意:ストップロスの設定価格が最後に受信したBid価格よりも低い場合は、オーダーコマンドはBUYLIMITに変更され、価格設定は最後に受信したBid価格に変更されます。
SELLSTOPオーダーコマンドでは、Bid価格での売りストップオーダーになります。
SELLSTOP_BYASKオーダーコマンドでは、Ask価格での売りストップオーダーになります。
Ask価格での買いストップオーダーにするには、オーダーコマンドにBUYSTOPを指定します。
engine.submitOrder(
"OrderLabel",
Instrument.EURUSD,
OrderCommand.BUYSTOP,
0.001,
price
);
注意:SELLSTOP_BYASKオーダーで設定した価格が、最後に受信したAsk価格よりも高い場合は、オーダーコマンドはSELLLIMITに変更され価格設定は最後に受信したAsk価格に変更されます。
以下の例は、現在のAsk価格よりも2pips上に買いストップオーダーを設定します。
double lastAsk = history.getLastTick(Instrument.EURUSD).getAsk();
double price = lastAsk + Instrument.EURUSD.getPipValue() * 2;
engine.submitOrder(
"BuyStopOrder",
Instrument.EURUSD,
OrderCommand.BUYSTOP,
0.001,
price
);
サンプルソースコード:
ConditionalOrder.java
リミットオーダー
submitOrderメソッド(BUYLIMITオーダーコマンド)を用いて、Ask価格での買いリミットオーダーを設定する事が出来ます。
現在のAsk価格が設定したリミット価格以下の時に約定されます。
engine.submitOrder(
"OrderLabel",
Instrument.EURUSD,
OrderCommand.BUYLIMIT,
0.001,
price
);
SELLLIMIT_BYASKオーダーコマンドでは、Ask価格での売りリミットオーダーになります。
注意:JForexプラットフォームでは手動でAsk価格での売りリミットオーダーと、Bid価格での買いリミットオーダーを行う事は出来ません。
BUYLIMIT_BYBIDオーダーコマンドはストラテジーでのみ使用可能です。
engine.submitOrder(
"OrderLabel",
Instrument.EURUSD,
OrderCommand.BUYLIMIT_BYBID,
0.001,
price
);
SELLLIMITオーダーコマンドはBid価格での売りリミットオーダー用にreservedされています。
MITオーダー(Market if Touch Order)
スリップページ付きのリミットオーダーを指定した場合、MITオーダーになります。
以下は、買いのMITオーダー設定の例です。
int slippage = 5;
engine.submitOrder(
"OrderLabel",
Instrument.EURUSD,
OrderCommand.BUYLIMIT_BYBID,
0.001,
price,
slippage
);
スリップページ付きのSELLLIMITオーダーコマンドでは、売りMITオーダーになります。