IOCオーダー


IOC(Immediate or Cancel)の原理は成行オーダーに自動的に適用されます。
条件付きオーダーでIOCの原理を適用する事を検討してみましょう。
以下例は、ストラテジー起動時にオーダー作成し、オーダー約定直後に約定されなかった部分をキャンセルします。


@Override
public void onStart(IContext context) throws JFException {
    engine  = context.getEngine();
    console = context.getConsole();
    history = context.getHistory();
    context.setSubscribedInstruments(java.util.Collections.singleton(instrument), true);
    console.getOut().println("開始");
    
    // 最後に受信したBid価格の5pips下に指値オーダー
    double price = history.getLastTick(instrument).getBid() - 5 * instrument.getPipValue();
    order = engine.submitOrder(label, instrument, OrderCommand.BUYLIMIT, 0.010, price, 0, 0, 0);
}

@Override
public void onMessage(IMessage message) throws JFException {
    // オーダー約定し、一部取引数量が約定されなかったら
    if( message.getOrder() == order && order.getState() == IOrder.State.FILLED 
            && Double.compare(order.getRequestedAmount(), order.getAmount()) != 0){
        // 約定されなかった部分はキャンセルする 
        order.setRequestedAmount(0);
    }
    
    // オーダーの関連するメッセージをログ出力
    if(message.getOrder() != null){
        console.getOut().println(DateUtils.format(message.getCreationTime()) + " " +message);
    }

}



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





スポンサーリンク

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


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


Top

inserted by FC2 system