CalculateArbIndCandleInterval.java

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



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

import java.io.File;
import java.util.Arrays;

import com.dukascopy.api.*;
import com.dukascopy.api.indicators.*;
import com.dukascopy.api.IIndicators.AppliedPrice;

@RequiresFullAccess
public class CalculateArbIndCandleInterval implements IStrategy {

    private IConsole console;
    private IIndicators indicators;
    private IHistory history;
    
    @Configurable(value = "カスタムインジケータ .jfx file", 
                    description = "カスタムインジケータ用。 プラットフォームインジケータの場合は、空のままにする。")
    public File indFile;
    @Configurable("インジケータ名")
    public String indName = "ALLIGATOR";
    @Configurable("通貨ペア")
    public Instrument instrument = Instrument.EURUSD;
    @Configurable("時間軸")
    public Period period = Period.ONE_MIN;
    @Configurable("適用価格")
    public AppliedPrice appliedPrice = AppliedPrice.CLOSE;
    @Configurable("オファーサイド")
    public OfferSide side = OfferSide.BID;
    @Configurable("バーカウント")
    public int candleCount = 10;

    public void onStart(IContext context) throws JFException {
        this.console = context.getConsole();
        this.indicators = context.getIndicators();      
        this.history = context.getHistory();
        
        // 対象ファイルがあればロードする
        if(indFile != null && indFile.exists()){
            indName = indicators.registerCustomIndicator(indFile);
        } 
        
        IIndicator indicator = indicators.getIndicator(indName);
        
        // インジケータメタデータ取得
        IndicatorInfo info           = indicator.getIndicatorInfo();
        int           inputCount    = info.getNumberOfInputs();
        int           optInputCount = info.getNumberOfOptionalInputs();
        int           outputCount   = info.getNumberOfOutputs();
        print("インプット数=%s, オプションインプット数=%s, アウトプット数=%s",inputCount,optInputCount,outputCount);
        
        //1 インプットパラメータ
        
        AppliedPrice[] inputTypes = new AppliedPrice[inputCount];
        Arrays.fill(inputTypes, appliedPrice);
        
        OfferSide[] offerSides = new OfferSide[inputCount];
        Arrays.fill(offerSides, side);
        
        //2 オプションインプットパラメータ
        Object[] optParams = new Object[optInputCount];
        for(int i = 0; i < optInputCount; i++){
            optParams[i] = indicator.getOptInputParameterInfo(i).getDescription().getOptInputDefaultValue();
            print("オプションインプットのデフォルト設定: %s=%s",indicator.getOptInputParameterInfo(i).getName(),optParams[i]);
        }
        
        long currBarTime = history.getBar(instrument, period, side, 0).getTime();
        Object[] outputs = indicators.calculateIndicator(
                               instrument,
                               period, offerSides,
                               indName, inputTypes,
                               optParams,
                               Filter.NO_FILTER,
                               candleCount,
                               currBarTime,
                               0
                           );
        
        //3 アウトプット
        print("インジケータアウトプット: ");
        for(int i = 0; i < outputCount; i++){
            OutputParameterInfo outputInfo = indicator.getOutputParameterInfo(i);
            String outputName = outputInfo.getName();
            //note that the last element is the latest value, the 0th - the oldest one
            if(outputInfo.getType() == OutputParameterInfo.Type.DOUBLE){
                print("%s=%s", outputName, arrayToString((double[])outputs[i]));  
            } else if(outputInfo.getType() == OutputParameterInfo.Type.INT){
                print("%s=%s", outputName, arrayToString((int[])outputs[i]));
            } else {
                print("%sのタイプはint/double以外のものです:%s", outputName, outputs[i].getClass());
            }
        }
       
    }
    
    private void print(String format, Object...args){
        print(String.format(format, args));
    }

    private void print(Object message) {
        console.getOut().println(message);
    }
    
    public static String arrayToString(double[] arr) {
        String str = "";
        for (int r = 0; r < arr.length; r++) {
            str += String.format("[%s] %.5f; ", r, arr[r]);
        }
        return str;
    }
    
    public static String arrayToString(int[] arr) {
        String str = "";
        for (int r = 0; r < arr.length; r++) {
            str += String.format("[%s] %s; ", r, arr[r]);
        }
        return str;
    }
    
    public void onAccount(IAccount account) throws JFException {    }
    public void onMessage(IMessage message) throws JFException {    }
    public void onStop() throws JFException {    }
    public void onTick(Instrument instrument, ITick tick) throws JFException {    }
    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {    }
}







スポンサーリンク

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


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


Top

inserted by FC2 system