トップ  >  リファレンス  >  サンプルソースコード  >  ストラテジーAPI  >  TestOnMessageSLQueue.java
TestOnMessageSLQueue.java

注意事項:
サンプルソースコードには実際にオーダーを発注するものがあります。
サンプルソースコードのストラテジーを起動する場合は、注意して下さい。



// Copyright (c) 2009 Dukascopy (Suisse) SA. All Rights Reserved.
package jforex.orders;

import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;

import com.dukascopy.api.*;
import com.dukascopy.api.IEngine.OrderCommand;

/**
 ストラテジー起動時にストップロス付き成行オーダーを送信し、約定後直ぐにストップロスを更新します。
このストラテジーでは更新オーダーをキューに入れ、次のonTickで処理します。
 */
@RequiresFullAccess
public class TestOnMessageSLQueue implements IStrategy {
    private IEngine engine;
    private IConsole console; 
    private IOrder order;
    
    private Queue<IOrder> justFilledOrders = new ConcurrentLinkedQueue<IOrder>();
    
    public void onStart(IContext context) throws JFException {
        this.engine = context.getEngine();
        this.console = context.getConsole();
        context.setSubscribedInstruments(java.util.Collections.singleton(Instrument.EURUSD), true);
        
        double price = context.getHistory().getLastTick(Instrument.EURUSD).getBid();
        
        // ストップロス5pipsとリミット5pipsとスリップ20pips設定で成行オーダー
        order = engine.submitOrder("orderValid", Instrument.EURUSD, OrderCommand.BUY, 0.001, 0, 20, 
                price - 0.0005, price + 0.0005);
    }

    public void onMessage(IMessage message) throws JFException {

        // JForex-API 2.6.38ではonMessageでオーダー変更出来ないので、オーダー変更要求をキューに入れ次のonTickで処理します
        if(message.getOrder() == order && message.getType() == IMessage.Type.ORDER_FILL_OK){
            justFilledOrders.add(message.getOrder());
        }
        
        print("<html><font color=\"gray\">"+message+"</font>");
        
    }
    
    public void print(String message) {
        console.getOut().println(message);
    }

    // ストラテジー停止時に全オーダークローズ
    public void onStop() throws JFException {
        for (IOrder order : engine.getOrders()) {
            order.close();
        }
    }    

    public void onAccount(IAccount account) throws JFException {    }

    public void onTick(Instrument instrument, ITick tick) throws JFException {                
        // 約定されたオーダーを処理します
        while(!justFilledOrders.isEmpty()){
            IOrder filledOrder = justFilledOrders.poll();
            if(filledOrder == order){
                // ストップロスをオープン価格から5pipsに更新
                order.setStopLossPrice(order.getOpenPrice() - 0.0005);  
            }
        }
    }

    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {    }

}







スポンサーリンク

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


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


Top

inserted by FC2 system