今回は、JForex APIで成り行き注文と指し値注文や逆指値注文等の条件付き注文を行う方法を解説します。
注文を行う時はIEngineインターフェースのsubmitOrderを使用しますが、その際注文の種類を「IEngine.OrderCommand」で指定します。
Market Order(成行注文)
Market Order(成行注文)は現在提示されている価格でオーダーを行う注文方法です。
成り行き注文を行うには、IEngineインターフェースの「submitOrder」を使用します。
IOrder submitOrder(String label,
Instrument instrument,
IEngine.OrderCommand orderCommand,
double amount)
throws JFException
ドル円1万通貨を買い成行注文する場合
1 2 |
IOrder order = engine.submitOrder("OrderLabel", Instrument.USDJPY, OrderCommand.BUY, 0.01); |
ドル円1万通貨を売り成行注文する場合
1 2 |
IOrder order = engine.submitOrder("OrderLabel", Instrument.USDJPY, OrderCommand.SELL, 0.01); |
上の記述方法はデフォルトで5pipsのスリッページが適用されます。
スリッページを指定した成行注文
スリッページを自分で指定して成行注文を行うには以下の「submitOrder」を使用します。
この場合引数「price」に0を指定します。
IOrder submitOrder(String label,
Instrument instrument,
IEngine.OrderCommand orderCommand,
double amount,
double price,
double slippage)
throws JFException
スリッページ2でドル円1万通貨を買い成行注文する場合
1 2 3 |
double slippage = 2; engine.submitOrder("OrderLabel, Instrument.USDJPY, OrderCommand.BUY, 0.01, 0, slippage); |
Conditional Order(条件付き注文)
ストラテジーとして使用出来るConditional Order(条件付き注文)には以下の3種類があります。
- Stop Order
- Limit Order
- Market if Touch Order (MIT)
条件付き注文を行うにはIEngineインターフェースの「submitOrder」を使用しますが、引数の「orderCommand」がそれぞれ異なります。
Stop Order(逆指値注文)
BUYSTOP
現在のBIDプライスよりも上に指定したストッププライスにBIDプライスが到達したら買い注文を出す場合は、「orderCommand」に「BUYSTOP_BYBID」を指定します。
1 2 |
engine.submitOrder("OrderLabel", Instrument.USDJPY, OrderCommand.BUYSTOP_BYBID, 0.01, price)); |
オーダーを出した瞬間のビッドプライスがストッププライスより大きかった場合、コマンドがBUYLIMITオーダーに変更されpriceには最新のBidプライスが設定されます。
ASKプライスを利用してBUYSTOPオーダーを出す場合は、「orderCommand」に「BUYSTOP」を指定します。
SELLSTOP
現在のASKプライスよりも下に指定したストッププライスにASKプライスが到達したら売り注文を出す場合は、「orderCommand」に「SELLSTOP_BYASK」を指定します。
1 2 |
engine.submitOrder("OrderLabel", Instrument.USDJPY, OrderCommand.SELLSTOP_BYASK, 0.01, price)); |
オーダーを出した瞬間のASKプライスがストッププライスより小さかった場合、コマンドがSELLLIMITオーダーに変更されpriceには最新のAskプライスが設定されます。
BIDプライスを利用してSELLSTOPオーダーを出す場合は、「orderCommand」に「SELLSTOP」を指定します。
Limit Order(指値注文)
BUYLIMIT
ASKプライスを用いて指値買い注文を行う場合は、「orderCommand」に「BUYLIMIT」を指定します。
ASKプライスが指定したリミットプライス以下になると注文が執行されます。
1 2 |
engine.submitOrder("OrderLabel", Instrument.USDJPY, OrderCommand.BUYLIMIT, 0.01, price); |
「orderCommand」に「BUYLIMIT_BYBID」を指定すれば、BIDプライスを用いて指値買い注文を行うこともできます。
1 2 |
engine.submitOrder("OrderLabel", Instrument.USDJPY, OrderCommand.BUYLIMIT_BYBID, 0.01, price); |
SELLLIMIT
BIDプライスを用いて指値売り注文を行う場合は、「orderCommand」に「SELLLIMIT」を指定します。
BIDプライスが指定したリミットプライス以上になると注文が執行されます。
1 2 |
engine.submitOrder("OrderLabel", Instrument.USDJPY, OrderCommand.SELLLIMIT, 0.01, price); |
「orderCommand」に「SELLLIMIT_BYASK」を指定すれば、ASKプライスを用いて指値売り注文を行うこともできます。
1 2 |
engine.submitOrder("OrderLabel", Instrument.USDJPY, OrderCommand.SELLLIMIT_BYASK, 0.01, price); |
JForexでは、BIDプライスを用いた指値買い注文(BUYLIMIT_BYBID)及びASKプライスを用いた指値売り注文(SELLLIMIT_BYASK)は手動での注文には使用できません。ストラテジーのみの注文方法なので注意してください。
Market if Touch Order (MIT)
スリッページを指定して指値注文を行うことをMIT注文と呼ぶようです。
スリッページを指定した指値買い注文を行う場合は、以下のように記述します。
1 2 3 |
double slippage = 2; engine.submitOrder("OrderLabel", Instrument.USDJPY, OrderCommand.BUYLIMIT, 0.01, price, slippage); |
スリッページを指定した指値売り注文は、「orderCommand」に「SELLLIMIT」を指定します。
1 2 3 |
double slippage = 2; engine.submitOrder("OrderLabel", Instrument.USDJPY, OrderCommand.SELLLIMIT, 0.01, price, slippage); |
コメント