EmaAtomicTests.java

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



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

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;

/**
 * このストラテジーは以下3パターンの方法でEMAを算出します
 *  ・シフトによる算出
 *  ・バーインターバルによる算出
 *  ・タイムインターバルによる算出
 * 
 * また、インジケータ算出には以下2パターンの方法を用います
 *  ・Emaインジケータメソッドを使用
 *  ・ユニバーサルメソッドを使用
 * 
 * 結果ログにて、異なる方法を用いても一致している事を確認する事が出来ます。
 *
 */
public class EmaAtomicTests 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 ema = indicators.ema(
                                     Instrument.EURUSD,          // 通貨ペア
                                     Period.ONE_MIN,             // 時間軸
                                     OfferSide.ASK,              // オファーサイド
                                     AppliedPrice.CLOSE,         // 適用価格
                                     5,                          // オプションパラメータ
                                     shift                       // シフト
                                    );

        console.getOut().format("シフト:直前のバー ema=%.5f", ema).println();
    }

    // タイムインターバル
    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[] ema = indicators.ema(
                                     Instrument.EURUSD,          // 通貨ペア
                                     Period.ONE_MIN,             // 時間軸
                                     OfferSide.ASK,              // オファーサイド
                                     AppliedPrice.CLOSE,         // 適用価格
                                     5,                          // オプションパラメータ
                                     from,                       // 開始時刻
                                     to                          // 終了時刻
                                    );

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

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

        int last = ema.length - 1;
        console.getOut().format("タイムインターバルティック:現在のティック ema=%.5f; 直前のテック ema=%.5f; 3つ目のティック ema=%.5f",
                                ema[last], ema[last - 1], ema[0]).println();
    }

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

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

        int last = ema.length - 1;
        console.getOut().format("バーインターバル:現在のバー ema=%.5f; 直前のバー ema=%.5f;3つ目のバー ema=%.5f",
                                ema[last], ema[last - 1], ema[0]).println();
    }

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

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

        double ema = (Double) emaUni[0];
        console.getOut().format("シフト(ユニバーサル):直前のバー ema=%.5f", ema).println();
    }
    
    // タイムインターバル(ユニバーサル)
    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[] emaUni = indicators.calculateIndicator(
                                     Instrument.EURUSD,                                     // 通貨ペア
                                     Period.ONE_MIN,                                        // 時間軸
                                     new OfferSide[] { OfferSide.ASK },                     // オファーサイド
                                     "EMA",                                                 // 機能名
                                     new AppliedPrice[] { IIndicators.AppliedPrice.CLOSE }, // 適用価格
                                     new Object[] { 5 },                                    // オプションパラメータ
                                     from,                                                   // 開始時刻
                                     to                                                      // 終了時刻
                                    );

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

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

        double[] ema  = (double[]) emaUni[0];
        int last = ema.length - 1;
        console.getOut().format("バーインターバル(ユニバーサル):現在のバー ema=%.5f; 直前のバー ema=%.5f; 3つ目のバー ema=%.5f",
                               ema[last], ema[last - 1], ema[0]).println();    
    }
    
    @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