CalculateArbitraryIndicator.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;

/*
 このストラテジーは、指定したインジケータ名のインジケータを算出し、結果をログ出力します。
ユーザーがindFileでカスタムインジケータを選択した場合、カスタムインジケータが使用されます。
プラットフォームインジケータとカスタムインジケータのどちらの場合でも、
ユーザーはindNameに正確なインジケータ名を設定する必要があります。

このストラテジーでは、オプションインプット値はデフォルト値を使用します。
*/

@RequiresFullAccess
public class CalculateArbitraryIndicator implements IStrategy {

    private IConsole console;
    private IIndicators indicators;
    @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;

    public void onStart(IContext context) throws JFException {
        this.console    = context.getConsole();
        this.indicators = context.getIndicators();

        // 対象ファイルがあればロードする
        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);
        print("インプットパラメータタイプ=%s", indicator.getInputParameterInfo(0).getType());

        // 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]);
        }

        int shift = 0;
        Object[] outputs = indicators.calculateIndicator(
                               instrument,
                               period,
                               offerSides,
                               indName,
                               inputTypes,
                               optParams,
                               shift
                           );

        // 3 アウトプット

        print("インジケータアウトプット: ");
        for (int i = 0; i < outputCount; i++) {
            OutputParameterInfo outputInfo = indicator.getOutputParameterInfo(i);
            String outputName = outputInfo.getName();

            if (outputInfo.getType() == OutputParameterInfo.Type.DOUBLE) {
                print("%s=%.7f", outputName, (Double) outputs[i]);
            } else if (outputInfo.getType() == OutputParameterInfo.Type.INT) {
                print("%s=%s", outputName, 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 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