FeedEmaMacdMinMax.java

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



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

import java.util.Arrays;
import java.util.HashSet;

import com.dukascopy.api.*;
import com.dukascopy.api.IIndicators.AppliedPrice;
import com.dukascopy.api.feed.*;
import com.dukascopy.api.feed.util.*;
import com.dukascopy.api.indicators.IIndicator;

/**
 このストラテジーは、フィードのインジケータ算出を行います。
まず、フィードデータを登録してログ力します。 
対象フィードのヒストリーを取得し、インジケータ算出を行います。
対象フィードのチャートを開きます(オプション設定)
 */

public class FeedEmaMacdMinMax implements IStrategy, IFeedListener {

    private IConsole console;
    private IIndicators indicators;

    @Configurable("フィード")
    public IFeedDescriptor feedDescriptor = new RenkoFeedDescriptor(Instrument.EURUSD, PriceRange.ONE_PIP, OfferSide.BID);
    @Configurable("インジケータ算出用フィードデータカウント")
    public int dataCount = 10;
    @Configurable("MINMAX期間")
    public int minMaxTimePeriod = 5;
    @Configurable("EMA期間")
    public int emaTimePeriod = 12;
    @Configurable("MACDシグナル期間")
    public int macdSignalPeriod = 9;
    @Configurable("MACD長期期間")
    public int macdSlowPeriod = 26;
    @Configurable("MACD短期期間")
    public int macdFastPeriod = 12;
    @Configurable("チャートを開く")
    public boolean openChart = false;
    
    private static int MAX = 0, MIN = 1;
   

    @Override
    public void onStart(IContext context) throws JFException {

        console = context.getConsole();
        indicators = context.getIndicators();

        context.setSubscribedInstruments(new HashSet<Instrument>(Arrays.asList(new Instrument[] { feedDescriptor.getInstrument() })), true);

        if (openChart) {
            context.openChart(feedDescriptor);
        }

        print("フィード登録=" + feedDescriptor);
        context.subscribeToFeed(feedDescriptor, this);

    }
    
    @Override
    public void onFeedData(IFeedDescriptor feedDescriptor, ITimedData feedData) {
        console.getInfo().println("フィードデータ:" + feedData + " フィードタイプ:" + feedDescriptor);
        try {            
            // シフトによるMINMAX算出
            double[] minMax = indicators.minMax(
                                                 feedDescriptor,
                                                 AppliedPrice.CLOSE,
                                                 feedDescriptor.getOfferSide(),
                                                 minMaxTimePeriod
                                                ).calculate(1);

            print("シフト:直前のバー %s max=%.5f min=%.5f", feedDescriptor.getDataType(), minMax[MAX], minMax[MIN]);
            
            // シフトによるEMA算出
            double emaPrev = indicators.ema(
                                             feedDescriptor,
                                             AppliedPrice.CLOSE,
                                             feedDescriptor.getOfferSide(),
                                             emaTimePeriod
                                            ).calculate(1);

            print("シフト:直前のバー %s ema=%.5f", feedDescriptor.getDataType(), emaPrev);

            // フィードデータによる直近10本のEMA算出
            double[] ema =indicators.ema(
                                          feedDescriptor,
                                          AppliedPrice.CLOSE,
                                          feedDescriptor.getOfferSide(),
                                          emaTimePeriod
                                         ).calculate(dataCount, feedData.getTime(), 0);

            print("フィード:直近10本のEMA %s %s: %s", dataCount, feedDescriptor.getDataType(), arrayToString(ema));

            // フィードデータによる直近10本のMACD算出
            double[][] macd = indicators.macd(
                                               feedDescriptor,
                                               AppliedPrice.CLOSE,
                                               feedDescriptor.getOfferSide(),
                                               macdFastPeriod,
                                               macdSlowPeriod,
                                               macdSignalPeriod
                                              ).calculate(dataCount, feedData.getTime(), 0);

            IIndicator macdIndicator = indicators.getIndicator("MACD");

            for (int i = 0; i < macdIndicator.getIndicatorInfo().getNumberOfOutputs(); i++) {
                String outputName = macdIndicator.getOutputParameterInfo(i).getName();
                print("フィード:MACD %s の直近%s本データ %s: %s",
                       outputName, dataCount, feedDescriptor.getDataType(), arrayToString(macd[i]));
            }
        } catch (JFException e) {
            console.getErr().println(e);
            e.printStackTrace();
        }
    }

    private void print(Object o) {
        console.getOut().println(o);
    }

    private void print(String format, Object... args) {
        console.getOut().format(format, args).println();
    }
    
    private 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;
    }

    @Override
    public void onTick(Instrument instrument, ITick tick) throws JFException {    }
    @Override
    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {    }
    @Override
    public void onMessage(IMessage message) throws JFException {    }
    @Override
    public void onAccount(IAccount account) throws JFException {    }
    @Override
    public void onStop() throws JFException {    }
}









スポンサーリンク

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


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


Top

inserted by FC2 system