今回は、JForex APIでストップロスを設定する方法に関して解説します。
オーダーにストップロスを設定する方法には2種類あります。
- 注文発注時にストップロスを設定
- 既存の注文orポジションに対してストップロスを設定
注文発注時にストップロスを設定する
注文の発注時にストップロスを設定するには、IEngineインターフェースの「submitOrder」の「stopLossPrice」にストップロス価格を設定します。
IOrder submitOrder(String label,
Instrument instrument,
IEngine.OrderCommand orderCommand,
double amount,
double price,
double slippage,
double stopLossPrice,
double takeProfitPrice)
throws JFException
買い成行注文でストップロスを105.00にセットする場合
1 2 |
engine.submitOrder("orderLabel", Instrument.USDJPY, OrderCommand.BUY, 0.01, 0, 5, 105.00, 0); |
既存注文に対してストップロスを設定する
既存注文に対してストップロスを設定するには、IOrderインターフェースを使用します。
IOrderインターフェースには、既存注文のストップロス価格の設定あるいは修正を行うための3種類の関数が用意されています。
- void setStopLossPrice(double price)
- void setStopLossPrice(double price, OfferSide side)
- void setStopLossPrice(double price,OfferSide side, double trailingStep)
ストップロスを設定したいIOrderオブジェクトを取得し、そのオブジェクトに対して上記の関数を呼びます。
IOrder order = engine.getOrder(“orderLabel”);
void setStopLossPrice(double price)
ストップロスを105.00にセットする場合
1 |
order.setStopLossPrice(105.00); |
void setStopLossPrice(double price, OfferSide side)
この関数を使用すれば、ストップロスを判定する際にASKとBIDプライスのどちらを使用するのかを指定することができます。
1 |
order.setStopLossPrice(105.00 ,OfferSide.ASK)); |
void setStopLossPrice(double price,OfferSide side, double trailingStep)
この関数を使用すれば、ストップロスを判定する際のASKとBIDプライスの選択に加え、ストップロス注文をトレーリングストップ注文にすることができます。
1 |
order.setStopLossPrice(105.00, OfferSide.BID, 20); |
トレーリングストップを有効にするには、trailingStepパラメータは10以上を指定する必要があります。
ストップロス注文をキャンセルする
既に設定してあるストップロス注文を削除したい場合は、ストップロスプライスを0に設定します。
1 |
order.setStopLossPrice(0); |
ストップロスによるポジションクローズを検出する
ストップロス価格に到達したことによってポジションがクローズされたことを検出するには、ストラテジのonMessageコールバック関数内でメッセージをチェックします。
IMessageインターフェースのgetReasonsの戻り値に「IMessage.Reason.ORDER_CLOSED_BY_SL」が含まれていればストップロスによるクローズと判断できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public void onMessage(IMessage message) throws JFException { IOrder order = message.getOrder(); if (order == null) { return; } if (message.getType() == IMessage.Type.ORDER_CLOSE_OK) { if (message.getReasons().contains(IMessage.Reason.ORDER_CLOSED_BY_SL)) { //ストップロスでポジションがクローズされた時の処理 } else { //ストップロス以外でポジションがクローズされた時の処理 } } } |
コメント