Пример #1
0
        /// <summary>
        /// Обработчик появления новых данных
        /// Вычисляет среднюю за период
        /// Вычисляет отклонение источника от средней за период
        /// </summary>
        ///// <param name="item">Bar</param>
        //public override void OnEvent(long id)
        public void Do(long id)
        {
            ///вычисляем новые занчения
            ///Input
            //double iMa = Indicator.EMAi(closePrices.ToList<double>(), Period, Ma.ToList<double>());
            //double iDe = closePrices.Last() - iMa;
            double iMa = Indicator.Ema_i(Input.Value.ToList <double>(), Period, Ma.ToList <double>());
            double iDe = Input.Value.Last() - iMa;


            Ma.Add(iMa);
            De.Add(iDe);

            ///вызываем обработчики значений
            foreach (var handler in HandlersMa)
            {
                handler.Invoke(Ma.Last());
            }

            foreach (var handler in HandlersDe)
            {
                handler.Invoke(De.Last());
            }

            ///упаковка посчитанных значений
            ValueMa.Add(new ValueDouble()
            {
                Id = id,
                //DateTime = item.DateTime,
                Name  = "Ma",
                Value = iMa
            });

            ValueDe.Add(new ValueDouble()
            {
                Id = id,
                //DateTime = item.DateTime,
                Name = "De",
                //TODO 4. сейчас отрисовывается по имени MaFast, надо переделать на стороне отрисовки
                //Name = "MaDeviation",
                Value = iDe
            });

            ///отправка посчитанных значений
            foreach (var handler in HandlersValueMa)
            {
                handler.Invoke(ValueMa.Last());
            }

            foreach (var handler in HandlersValueDe)
            {
                handler.Invoke(ValueDe.Last());
            }
        }
Пример #2
0
        /// <summary>
        /// Обработчик появления нового бара
        /// Вычисляет отклонение цены (закрытия) от средней за период
        /// </summary>
        /// <param name="item">Bar</param>
        public override void OnItemAdded(Bar item)
        {
            bar = item;
            if (item.Symbol != this.strategyHeader.Symbol)
            {
                return;
            }

            bs = this.tradingData.Get <IEnumerable <BarSettings> >().SingleOrDefault(s => s.StrategyId == this.strategyHeader.Id);
            if (bs == null)
            {
                throw new System.Exception("BarSettings bs == null");
                //return;
            }

            //barsSet <= bars
            //IEnumerable<Bar> bars = this.tradingData.Get<IEnumerable<Bar>>().GetNewestBars(bs.Symbol, bs.Interval);
            IEnumerable <Bar> barsSet = this.tradingData.Get <IEnumerable <Bar> >().GetNewestBars(bs.Symbol, bs.Interval, bs.Period + 1);
            //int barsCount = bars.Count();
            int barsCount = this.tradingData.Get <IEnumerable <Bar> >().GetNewestBars(bs.Symbol, bs.Interval).Count();

            if (barsSet == null || barsSet.Count() == 0)
            {
                return;
            }

            IEnumerable <double> closePrices = from b in barsSet
                                               select b.Close;

            ///вычисляем новые занчения
            double iMa = Indicator.EMA_i(closePrices.ToList <double>(), Period, Ma.ToList <double>());
            double iDe = closePrices.Last() - iMa;

            Ma.Add(iMa);
            De.Add(iDe);

            ///вызываем обработчики значений
            foreach (var handler in HandlersMa)
            {
                handler.Invoke(Ma.Last());
            }

            foreach (var handler in HandlersDe)
            {
                handler.Invoke(De.Last());
            }

            ///упаковка посчитанных значений
            ValueMa.Add(new ValueDouble()
            {
                Id       = barsCount - 1,
                DateTime = item.DateTime,
                Name     = "MaSlow",
                Value    = iMa
            });

            ValueDe.Add(new ValueDouble()
            {
                Id       = barsCount - 1,
                DateTime = item.DateTime,
                Name     = "MaFast",
                //TODO 4. сейчас отрисовывается по имени MaFast, надо переделать на стороне отрисовки
                //Name = "MaDeviation",
                Value = iDe
            });

            ///отправка посчитанных значений
            foreach (var handler in HandlersValueMa)
            {
                handler.Invoke(ValueMa.Last());
            }

            foreach (var handler in HandlersValueDe)
            {
                handler.Invoke(ValueDe.Last());
            }
        }