Example #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 });
        }
Example #2
0
        /// <summary>
        /// データをプロットします。
        /// </summary>
        /// <param name="candles">ロウソク足のリスト</param>
        public virtual void Plot(List <DataTypes.Candle> candles)
        {
            List <DataTypes.Candle> reversed = new List <DataTypes.Candle>();

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

            // 移動平均
            decimal ma = GetMovingAverage(candles.GetRange(0, Period).Select(candle => candle.Close).ToArray(), MaMethod, PreviousMa);

            // 次回のために覚えておく
            PreviousMa = ma;

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

            // 移動平均
            decimal ma = MovingAverageIndicator.GetValues(candles)[0];

            // 標準偏差
            decimal dev
                = (decimal)candles.GetRange(0, MovingAverageIndicator.Period).Select(candle => (double)candle.Close).PopulationStandardDeviation();

            return(new decimal[] { ma, ma + dev * Deviation, ma - dev * Deviation });
        }
Example #5
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 });
        }
Example #6
0
 /// <summary>
 /// 値を取得します。
 /// </summary>
 /// <param name="candles">ロウソク足のコレクション</param>
 /// <returns>値</returns>
 public decimal[] GetValues(DataTypes.CandleCollection candles)
 {
     return(new decimal[4] {
         candles[0].High, candles[0].Low, candles[0].Open, candles[0].Close
     });
 }
Example #7
0
 /// <summary>
 /// 値を取得します。
 /// </summary>
 /// <param name="candles">ロウソク足のコレクション</param>
 /// <returns>値</returns>
 public decimal[] GetValues(DataTypes.CandleCollection candles)
 {
     return(new decimal[] { candles[0].Volume });
 }