MinMaxAtomicTests.java

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



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

import com.dukascopy.api.Filter;
import com.dukascopy.api.IAccount;
import com.dukascopy.api.IBar;
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.Instrument;
import com.dukascopy.api.JFException;
import com.dukascopy.api.OfferSide;
import com.dukascopy.api.Period;
import com.dukascopy.api.RequiresFullAccess;

/**
 * このストラテジーは以下3パターンの方法でMixMaxを算出します
 *  ・シフトによる算出
 *  ・バーインターバルによる算出
 *  ・タイムインターバルによる算出
 * 
 * また、インジケータ算出には以下2パターンの方法を用います
 *  ・MixMaxインジケータメソッドを使用
 *  ・ユニバーサルメソッドを使用
 * 
 * 結果ログにて、異なる方法を用いても一致している事を確認する事が出来ます。
 *
 */
@RequiresFullAccess
public class MinMaxAtomicTests implements IStrategy {
    
    private IConsole console;
    private IHistory history;
    private IIndicators indicators;

    @Override
    public void onStart(IContext context) throws JFException {
        console = context.getConsole();
        history = context.getHistory();
        indicators = context.getIndicators();
        context.setSubscribedInstruments(java.util.Collections.singleton(Instrument.EURUSD), true);
        
        testShift();              // シフト
        testTimeInterval();       // タイムインターバル
        testTimeIntervalTicks();  // タイムインターバルティック
        testCandleInterval();     // バーインターバル

        testShiftUni();           // シフト(ユニバーサル)
        testTimeIntervalUni();    // タイムインターバル(ユニバーサル)
        testCandleIntervalUni();  // バーインターバル(ユニバーサル)
    }
    
    // シフト
    private void testShift() throws JFException {
        int shift = 1;

        double[] minMax = indicators.minMax(
                                             Instrument.EURUSD,       // 通貨ペア
                                             Period.ONE_MIN,          // 時間軸
                                             OfferSide.ASK,           // オファーサイド
                                             AppliedPrice.CLOSE,      // 適用価格
                                             5,                       // オプションパラメータ
                                             shift                    // シフト
                                            );

        console.getOut().println(String.format("シフト:直前のバー min=%1$.5f max=%2$.5f", minMax[0], minMax[1]));
    }

    // タイムインターバル
    private void testTimeInterval() throws JFException {
        long from = history.getBar(Instrument.EURUSD, Period.ONE_MIN, OfferSide.ASK, 3).getTime();
        long to   = history.getBar(Instrument.EURUSD, Period.ONE_MIN, OfferSide.ASK, 0).getTime();

        double[][] minMax = indicators.minMax(
                                             Instrument.EURUSD,       // 通貨ペア
                                             Period.ONE_MIN,          // 時間軸
                                             OfferSide.ASK,           // オファーサイド
                                             AppliedPrice.CLOSE,      // 適用価格
                                             5,                       // オプションパラメータ
                                             from,                    // 開始時刻
                                             to                       // 終了時刻
                                            );

        int last = minMax[0].length - 1;
        console.getOut().println(String.format(
            "タイムインターバル:現在のバー min=%1$.5f max=%2$.5f; 直前のバー min=%3$.5f max=%4$.5f;" + 
            " 3つ目のバー min=%5$.5f max=%6$.5f",
            minMax[0][last], minMax[1][last], minMax[0][last - 1], minMax[1][last - 1], minMax[0][0], minMax[1][0]));
    }
    
    // タイムインターバルティック
    private void testTimeIntervalTicks() throws JFException {
        long to   = history.getTimeOfLastTick(Instrument.EURUSD);  
        long from = to - 1000 * 4; // 4秒前        

        double[][] minMax = indicators.minMax(
                                             Instrument.EURUSD,       // 通貨ペア
                                             Period.TICK,             // 時間軸
                                             OfferSide.ASK,           // オファーサイド
                                             AppliedPrice.CLOSE,      // 適用価格
                                             5,                       // オプションパラメータ
                                             from,                    // 開始時刻
                                             to                       // 終了時刻
                                            );

        int last = minMax[0].length - 1;
        console.getOut().println(String.format(
            "タイムインターバルティック:現在のティック min=%1$.5f max=%2$.5f; 一つ前のティック min=%3$.5f max=%4$.5f;" + 
            " 3つ目のティック min=%5$.5f max=%6$.5f",
            minMax[0][last], minMax[1][last], minMax[0][last - 1], minMax[1][last - 1], minMax[0][0], minMax[1][0]));
    }

    // バーインターバル
    private void testCandleInterval() throws JFException {
        int candlesBefore = 4, candlesAfter = 0; 
        long currBarTime  = history.getBar(Instrument.EURUSD, Period.ONE_MIN, OfferSide.ASK, 0).getTime();

        double[][] minMax = indicators.minMax(
                                             Instrument.EURUSD,      // 通貨ペア
                                             Period.ONE_MIN,         // 時間軸
                                             OfferSide.ASK,          // オファーサイド
                                             AppliedPrice.CLOSE,     // 適用価格
                                             5,                      // オプションパラメータ
                                             Filter.NO_FILTER,       // フィルター
                                             candlesBefore,          // 基準時刻から前方向へバーオフセット(算出開始時刻)
                                             currBarTime,            // 基準時刻
                                             candlesAfter            // 基準時刻から後ろ方向へバーオフセット(算出終了時刻)
                                            );

        int last = minMax[0].length - 1;
        console.getOut().println(String.format(
            "バーインターバル:現在のバー min=%1$.5f max=%2$.5f; 直前のバー min=%3$.5f max=%4$.5f;" + 
            " 3つ目のバー min=%5$.5f max=%6$.5f",
            minMax[0][last], minMax[1][last], minMax[0][last - 1], minMax[1][last - 1], minMax[0][0], minMax[1][0]));
    }

    // シフト(ユニバーサル)
    private void testShiftUni() throws JFException {
        int shift = 1;

        Object[] minMaxUni = indicators.calculateIndicator(
                                             Instrument.EURUSD,                                     // 通貨ペア
                                             Period.ONE_MIN,                                        // 時間軸
                                             new OfferSide[] { OfferSide.ASK },                     // オファーサイド
                                             "MINMAX",                                              // 機能名
                                             new AppliedPrice[] { IIndicators.AppliedPrice.CLOSE }, // 適用価格
                                             new Object[] { 5 },                                    // オプションパラメータ
                                             shift                                                  // シフト
                                            );

        double[] minMax = {(Double) minMaxUni[0], (Double) minMaxUni[1]};
        console.getOut().println(String.format("シフト(ユニバーサル):直前のバー min=%1$.5f max=%2$.5f", minMax[0], minMax[1]));
    }
    
    // タイムインターバル(ユニバーサル)
    private void testTimeIntervalUni() throws JFException {
        long from = history.getBar(Instrument.EURUSD, Period.ONE_MIN, OfferSide.ASK, 3).getTime();
        long to   = history.getBar(Instrument.EURUSD, Period.ONE_MIN, OfferSide.ASK, 0).getTime();

        Object[] minMaxUni = indicators.calculateIndicator(
                                             Instrument.EURUSD,                                     // 通貨ペア
                                             Period.ONE_MIN,                                        // 時間軸
                                             new OfferSide[] { OfferSide.ASK },                     // オファーサイド
                                             "MINMAX",                                              // 機能名
                                             new AppliedPrice[] { IIndicators.AppliedPrice.CLOSE }, // 適用価格
                                             new Object[] { 5 },                                    // オプションパラメータ
                                             from,                                                  // 開始時刻
                                             to                                                     // 終了時刻
                                            );

        double[][] minMax = {(double[]) minMaxUni[0], (double[]) minMaxUni[1]};
        int last = minMax[0].length - 1;
        console.getOut().println(String.format(
            "タイムインターバル(ユニバーサル):現在のバー min=%1$.5f max=%2$.5f; 直前のバー min=%3$.5f max=%4$.5f;" + 
            " 3つ目のバー min=%5$.5f max=%6$.5f",
            minMax[0][last], minMax[1][last], minMax[0][last - 1], minMax[1][last - 1], minMax[0][0], minMax[1][0]));
    }
    
    // バーインターバル(ユニバーサル)
    private void testCandleIntervalUni() throws JFException {
        int candlesBefore = 4, candlesAfter = 0;
        long currBarTime  = history.getBar(Instrument.EURUSD, Period.ONE_MIN, OfferSide.ASK, 0).getTime();

        Object[] minMaxUni = indicators.calculateIndicator(
                                             Instrument.EURUSD,                                     // 通貨ペア
                                             Period.ONE_MIN,                                        // 時間軸
                                             new OfferSide[] { OfferSide.ASK },                     // オファーサイド
                                             "MINMAX",                                              // 機能名
                                             new AppliedPrice[] { IIndicators.AppliedPrice.CLOSE }, // 適用価格
                                             new Object[] { 5 },                                    // オプションパラメータ
                                             Filter.NO_FILTER,                                      // フィルター
                                             candlesBefore,                 // 基準時刻から前方向へバーオフセット(算出開始時刻)
                                             currBarTime,                   // 基準時刻
                                             candlesAfter                   // 基準時刻から後ろ方向へバーオフセット(算出終了時刻)
                                            );

        double[][] minMax = {(double[]) minMaxUni[0], (double[]) minMaxUni[1]};
        int last = minMax[0].length - 1;
        console.getOut().println(String.format(
            "バーインターバル(ユニバーサル):現在のバー min=%1$.5f max=%2$.5f; 直前のバー min=%3$.5f max=%4$.5f;" +
            " 3つ目のバー min=%5$.5f max=%6$.5f",
            minMax[0][last], minMax[1][last], minMax[0][last - 1], minMax[1][last - 1], minMax[0][0], minMax[1][0]));
    }
    
    @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