Esempio n. 1
0
        /// <summary>
        /// 値を取得します。
        /// </summary>
        /// <param name="candles">ロウソク足のコレクション</param>
        /// <returns>値</returns>
        public virtual decimal[] GetValues(DataTypes.CandleCollection candles)
        {
            // 必要期間に満たない
            if (candles.Count < Period + 1)
            {
                return(null);
            }

            // 真の値幅(TR)
            List <decimal> trs = new List <decimal>();

            for (int i = 0; i < Period; i++)
            {
                trs.Add(new decimal[]
                {
                    Math.Abs(candles[i].High - candles[i].Low),                                 // 当日高値 - 当日安値
                    Math.Abs(candles[i].High - candles[i + 1].Close),                           // 当日高値 - 前日終値
                    Math.Abs(candles[i].Low - candles[i + 1].Close)                             // 当日安値 - 前日終値
                }.Max());
            }

            // ATR
            decimal atr = MovingAverageIndicator.GetMovingAverage(trs.ToArray(), MaMethod.Smma, PreviousAtr);

            // 次回のために覚えておく
            PreviousAtr = atr;

            return(new decimal[] { atr });
        }
Esempio n. 2
0
 /// <summary>
 /// MacdIndicatorの新しいインスタンスを初期化します。
 /// </summary>
 public MacdIndicator()
 {
     FastMaIndicator          = new MovingAverageIndicator();
     FastMaIndicator.Period   = 12;
     FastMaIndicator.MaMethod = MaMethod.Ema;
     SlowMaIndicator          = new MovingAverageIndicator();
     SlowMaIndicator.Period   = 26;
     SlowMaIndicator.MaMethod = MaMethod.Ema;
 }
Esempio n. 3
0
        /// <summary>
        /// 値を取得します。
        /// </summary>
        /// <param name="candles">ロウソク足のコレクション</param>
        /// <returns>値</returns>
        public decimal[] GetValues(DataTypes.CandleCollection candles)
        {
            // 必要期間に満たない
            if (candles.Count < FastMaIndicator.Period || candles.Count < SlowMaIndicator.Period)
            {
                return(null);
            }

            // キュー作成
            if (MacdQueue == null)
            {
                MacdQueue = new Queue <decimal>();
            }

            // 移動平均
            decimal fast_ma = FastMaIndicator.GetValues(candles)[0];
            decimal slow_ma = SlowMaIndicator.GetValues(candles)[0];

            // MACD
            decimal macd = fast_ma - slow_ma;

            // キューに格納
            MacdQueue.Enqueue(macd);
            if (MacdQueue.Count > SignalPeriod)
            {
                MacdQueue.Dequeue();
            }

            // 必要期間に満たない
            if (MacdQueue.Count < SignalPeriod)
            {
                return(null);
            }

            // シグナル
            decimal signal = MovingAverageIndicator.GetMovingAverage(MacdQueue.ToArray(), SignalMaMethod, PreviousSignal);

            // 次回のために覚えておく
            PreviousSignal = signal;

            return(new decimal[] { macd, signal });
        }
Esempio n. 4
0
 /// <summary>
 /// BollingerBandIndicatorクラスの新しいインスタンスを初期化します。
 /// </summary>
 public BollingerBandIndicator()
 {
     MovingAverageIndicator = new MovingAverageIndicator();
 }