OrderManage.java

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



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

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.HashSet;
import java.util.Arrays;

import com.dukascopy.api.*;

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

/**
このストラテジーは起動時に2つの通貨ペアで4つのオーダーを行います。
10秒ごとに以下リストの情報をログ出力します。
 ・アクティブオーダー
 ・保留中オーダー
 ・含み益オーダー
 ・含み損オーダー

ストラテジーパラメータ設定に応じて、対象のグループのオーダーをクローズします。
*/
public class OrderManagementPL implements IStrategy {
    
    @Configurable("アクティブオーダーを全てクローズする")
    public boolean closeAllActive = false;
    @Configurable("保留中オーダーを全てクローズする")
    public boolean closeAllPending = false;
    @Configurable("含み益オーダーを全てクローズする")
    public boolean closeAllProfit = false;
    @Configurable("含み損オーダーを全てクローズする")
    public boolean closeAllLoss = false;
    
    private IConsole console;
    private IEngine engine;
    private Set<Instrument> instruments = new HashSet<Instrument>(Arrays.asList(new Instrument[] {EURUSD, USDCAD}));

    @Override
    public void onStart(IContext context) throws JFException {
        
        console = context.getConsole();
        engine = context.getEngine();    
        
        context.setSubscribedInstruments(instruments, true);
        
        engine.submitOrder("Order_BUY_EURUSD" , EURUSD, BUY , 0.001);
        engine.submitOrder("Order_SELL_EURUSD", EURUSD, SELL, 0.002);
        engine.submitOrder("Order_BUY_USDCAD" , USDCAD, BUY , 0.001);
        engine.submitOrder("Order_SELL_USDCAD", USDCAD, SELL, 0.002);

    }
    
    private List<IOrder> getProfitOrders() throws JFException{
        List<IOrder> orders = new ArrayList<IOrder>();
        for(IOrder o : engine.getOrders()){
            if(o.getProfitLossInUSD() >= 0){
                orders.add(o);
            }
        }
        return orders;
    }
    
    private List<IOrder> getLossOrders() throws JFException{
        List<IOrder> orders = engine.getOrders();
        orders.removeAll(getProfitOrders());
        return orders;
    }
    
    private List<IOrder> getPendingOrders() throws JFException{
        List<IOrder> orders = engine.getOrders();
        for(IOrder o : engine.getOrders()){
            if(o.getState() == IOrder.State.OPENED){
                orders.add(o);
            }
        }
        return orders;
    }
    
    
    public void onTick(Instrument instrument, ITick tick) throws JFException {}
    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
        if(instrument != EURUSD || period != Period.TEN_SECS){
            return;
        }
        console.getOut().println("アクティブオーダー: " + engine.getOrders());
        console.getOut().println("保留中オーダー    : " + getPendingOrders());
        console.getOut().println("含み益オーダー    : " + getProfitOrders());
        console.getOut().println("含み損オーダー    : " + getLossOrders()); 
        
        if(closeAllActive ) closeOrders(engine.getOrders());
        if(closeAllPending) closeOrders(getPendingOrders());
        if(closeAllProfit ) closeOrders(getProfitOrders());
        if(closeAllLoss   ) closeOrders(getLossOrders());
    }
    
    private void closeOrders(List<IOrder> orders) throws JFException{
        for(IOrder o: orders){
            if(o.getState() == IOrder.State.FILLED || o.getState() == IOrder.State.OPENED){
                o.close();
            }
        }
    }
    
    
    public void onMessage(IMessage message) throws JFException {}
    public void onAccount(IAccount account) throws JFException {}

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

}









スポンサーリンク

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


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


Top

inserted by FC2 system