CalculateIndicatorsFromChart.java

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



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

import java.util.Arrays;

import com.dukascopy.api.DataType;
import com.dukascopy.api.IAccount;
import com.dukascopy.api.IBar;
import com.dukascopy.api.IChart;
import com.dukascopy.api.IConsole;
import com.dukascopy.api.IContext;
import com.dukascopy.api.IHistory;
import com.dukascopy.api.IIndicators;
import com.dukascopy.api.IIndicators.AppliedPrice;
import com.dukascopy.api.IMessage;
import com.dukascopy.api.IStrategy;
import com.dukascopy.api.ITick;
import com.dukascopy.api.ITimedData;
import com.dukascopy.api.Instrument;
import com.dukascopy.api.JFException;
import com.dukascopy.api.OfferSide;
import com.dukascopy.api.Period;
import com.dukascopy.api.feed.IFeedDescriptor;
import com.dukascopy.api.indicators.IIndicator;
import com.dukascopy.api.indicators.IIndicatorAppearanceInfo;
import com.dukascopy.api.indicators.OutputParameterInfo;

/**
 最後に選択したチャートに表示されているインジケータと同じパラメータでインジケータ算出を行います。
 */
public class CalculateIndicatorsFromChart implements IStrategy {

    private IIndicators indicators;
    private IHistory history;
    private IConsole console;
    private IChart chart;
    
    private int dataCount = 3;

    @Override
    public void onStart(IContext context) throws JFException {
        indicators = context.getIndicators();
        history = context.getHistory();
        console = context.getConsole();
        chart = context.getLastActiveChart();

        if ( chart == null ) {
            console.getErr().println("チャートが開かれていません!");
            return;
        }

        IFeedDescriptor feedDescriptor = chart.getFeedDescriptor();

        if( feedDescriptor.getDataType() == DataType.TICKS ){
            console.getWarn().println("このストラテジーはティックチャートには対応していません。");
            return;
        }
        
        for ( IIndicatorAppearanceInfo info : chart.getIndicatorApperanceInfos() ) {
            AppliedPrice[] appliedPrices = new AppliedPrice[info.getDrawingStyles().length];
            OfferSide[]    offerSides    = new OfferSide[info.getDrawingStyles().length];
            IIndicator     indicator     = indicators.getIndicator(info.getName());
            ITimedData     feedData      = history.getFeedData(feedDescriptor, 0);

            Arrays.fill(appliedPrices, AppliedPrice.CLOSE          );
            Arrays.fill(offerSides   , chart.getSelectedOfferSide());

            Object[] result = indicators.calculateIndicator(
                                                            feedDescriptor,
                                                            offerSides,
                                                            info.getName(),
                                                            appliedPrices,
                                                            info.getOptParams(),
                                                            dataCount,
                                                            feedData.getTime(),
                                                            0
                                                           );

            for (int i = 0; i < indicator.getIndicatorInfo().getNumberOfOutputs(); i++) {
                OutputParameterInfo.Type outputType = indicator.getOutputParameterInfo(i).getType();

                String resultStr = 
                          outputType == OutputParameterInfo.Type.DOUBLE ? Arrays.toString((double[]) result[i])
                        : outputType == OutputParameterInfo.Type.INT    ? Arrays.toString((int[]   ) result[i])
                        : "オブジェクト出力には特別なプロセスが必要です";

                console.getOut().format("IND名:%s パラメータ:%s 直近%sつの値: %s",
                                        info.getName(),
                                        indicator.getOutputParameterInfo(i).getName(),
                                        dataCount,
                                        resultStr
                                       ).println();
            }
        }

        context.stop();
    }

    @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 {}

}



EURUSD-1分足チャートにMAインジケータを表示させた状態でストラテジーを起動した結果。



スポンサーリンク

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


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


Top

inserted by FC2 system