ストップロス


条件付きオーダーのストップロスとリミットは、IOrderオブジェクトでメインオーダー確認する事が重要です。
ストップロスやリミットオーダーにヒットしている可能性があるからです。
これは以下の事が言えるからです。
  1. ストップロス価格とリミット価格をゼロ以外の設定でメインオーダーを送信すると、ストップロスとリミットのオーダーが自動的に作成されます。
  2. ストップロスやリミット価格にヒットすると、メインオーダーはクローズされ他の条件付きオーダーはキャンセルされます。
    (例えば、ストップロスがヒットしたらリミットオーダーはキャンセルされる)
  3. メインオーダーをクローズすると、条件付きオーダーは全てキャンセルされます。

ストップロス価格の設定方法は2つあります。

・オーダー作成時にストップロス価格を設定する方法
engine.submitOrder(
                    "order",           // オーダーラベル
                    Instrument.EURUSD, // 通貨ペア
                    OrderCommand.BUY,  // オーダーコマンド
                    0.001,             // 取引数量[分解能:100万通貨]
                    0,                 // 価格
                    20,                // スリップページ
                    1.2222,            // ストップロス価格
                    0,                 // リミット価格
                   );


・作成済みオーダーを変更する方法
order.setStopLossPrice(1.2222);




既存のオーダーにストップロスを設定

ストップロス価格設定のオーダーをするには、以下の条件を満たしていなければなりません。
  1. オーダー状態はFILLEDまたは、OPENEDである必要があります。
  2. ストップロス価格は0.1pipsで割り切れる値である必要があります、割り切れない場合は拒否されます。
  3. ストップロス価格の設定は1秒間に1回しか設定出来ません。


IOrderインターフェースは既存オーダーのストップロス設定やストップロス変更の為の3つのメソッド(オーバーライドメソッドなのでメソッド名は同じ)を持っています。


void setStopLossPrice(double price)
IOrder order = engine.getOrder("order");

order.setStopLossPrice(
                       1.2222            // ストップロス価格
);


void setStopLossPrice(double price, OfferSide side)
IOrder order = engine.getOrder("order");

order.setStopLossPrice(
                       1.2222,        // ストップロス価格
                       OfferSide.ASK  // オファー方向
);


void setStopLossPrice(double price,OfferSide side, double trailingStep)
IOrder order = engine.getOrder("order");

order.setStopLossPrice(
                       1.2222,        // ストップロス価格
                       OfferSide.BID, // オファー方向
                       20             // トレーリングステップ
);


注意:トレーリングステップのパラメータ値は、10以上である必要があります。







ストップロスの取り消し

ストップロス価格にゼロを指定した場合、ストップロス条件は適用されません。
次の例では、既存のオーダーからストップロス条件を削除します。



IOrder order = engine.getOrder("order");

order.setStopLossPrice(
                       0              // ストップロス価格
);








ストップロスによるクローズ検出

ストップロス条件によってオーダーがクローズされた事を検出する為には、IStrategy.onMessageを確認し、
IMessage.getReasons()にIMessage.Reason.ORDER_CLOSED_BY_SLが含まれているかチェックします。
messagesのワークフローの詳細はオーダー状態のページを参照して下さい。

以下例では、ストップロスによるクローズと他要因によるクローズをチェックします。


@Override
public void onStart(IContext context) throws JFException {
    console = context.getConsole();
    engine = context.getEngine();
    history = context.getHistory();

    // 成行買いオーダー(ストップロスでクローズする用)
    context.setSubscribedInstruments(java.util.Collections.singleton(instrument), true);
    IOrder order = engine.submitOrder("orderCloseBySL", instrument, OrderCommand.BUY, 0.001);
    order.waitForUpdate(2000, IOrder.State.FILLED);
    // 直ぐにストップロスに到達するように、近くにストップロスを設定する
    double slPrice = history.getLastTick(instrument).getAsk() + instrument.getPipValue() * 10;
    order.setStopLossPrice(slPrice);

    // 成行買いオーダー(手動でクローズする用)
    order = engine.submitOrder("orderUnconditionalClose", instrument, OrderCommand.BUY, 0.001);
    order.waitForUpdate(2000, IOrder.State.FILLED);
    order.close();
}

@Override
public void onMessage(IMessage message) throws JFException {
    IOrder order = message.getOrder();
    if (order == null) {
        return;
    }
    console.getOut().println(message);
    if (message.getType() == IMessage.Type.ORDER_CLOSE_OK) {
        if (message.getReasons().contains(IMessage.Reason.ORDER_CLOSED_BY_SL)) {
            console.getInfo().println(order.getLabel() + " ストップロスによるクローズ");
        } else {
            console.getInfo().println(order.getLabel() + " ストップロス以外によるクローズ");
        }
    }
}



サンプルソースコード:Stoploss_OrderClosedBySL.java






サンプル【ストップロスの管理】

このサンプルでは以下の順序で特定のオーダーのストップロスを管理します。
  1. オーダー作成時にストップロスを追加する
  2. 既存のオーダーにストップロスを追加する
  3. ストップロスを削除する
  4. ストップロスを変更します。


サンプルソースコード:ManageSL.java



サンプル【ストップロスの追跡】

このサンプルでは以下のオーダーを行います
  1. tick受信毎にストップロスとリミットを、現在のマーケット価格から一定価格離した状態に更新します。
  2. 最初のストップロスとリミット価格のラインをチャート上に描画します。
  3. 現在のマーケット価格が、最初のストップロスとリミット価格のいずれかを抜けたらログ出力します。


サンプルソースコード:SlTpUpdateWithOrigLines.java



サンプル【ブレークイーブン】

含み益が5pipsに到達したら、ストップロス価格をエントリー価格に移動します。


サンプルソースコード:BreakEven.java



サンプル【手動によるブレークイーブン調整】

ブレークイーブンレベルでチャート上にライン描画します、ユーザーが手動でチャート上のラインを移動してレベル調整する事が出来ます。


サンプルソースコード:BreakEvenHLine.java



サンプル【複数オーダーのブレークイーブン】

複数のオーダーに同じブレークイーブンロジックを適用します。


サンプルソースコード:BreakEvenMultipleOrders.java



サンプル【トレーリングストップ追跡】

トレーリングストップによるストップロス変化の追跡を行います。
ストラテジーで両方向の2つのオーダーを作成し、一つはストップロスでクローズされるようにし、もう一つはトレーリングステップでストップロスが更新されるようにします。
また、ストップロス更新回数をカウントします。


サンプルソースコード:TrailingStepTest.java



スポンサーリンク

スポンサーリンク
検索
リファレンスツリー


Copyright ©2016 JForexAPIで自動売買させ隊! All Rights Reserved.


Top

inserted by FC2 system