Esempio n. 1
0
        /// <summary>
        /// To send data request.
        /// </summary>
        /// <param name="series">The candles series for which data receiving should be started.</param>
        /// <param name="from">The initial date from which you need to get data.</param>
        /// <param name="to">The final date by which you need to get data.</param>
        public void Start(CandleSeries series, DateTimeOffset from, DateTimeOffset to)
        {
            if (series == null)
            {
                throw new ArgumentNullException(nameof(series));
            }

            CandleSeriesInfo info;

            lock (_info.SyncRoot)
            {
                info = _info.TryGetValue(series);

                if (info != null)
                {
                    throw new ArgumentException(LocalizedStrings.Str636Params.Put(series), nameof(series));
                }

                info = new CandleSeriesInfo(series, from, to, Sources, OnNewValues, s =>
                {
                    _info.Remove(s);
                    OnStopped(s);
                });

                //Container.Start(series, from, to);

                _info.Add(series, info);
            }

            info.Start();
        }
Esempio n. 2
0
        private DateTimeOffset OnNewValues(CandleSeriesInfo info, IEnumerable <ICandleBuilderSourceValue> values)
        {
            ICandleBuilderSourceValue lastValue = null;

            foreach (var value in values)
            {
                var messages = _builder.Process(info.Message, info.CurrentCandleMessage, value);

                foreach (var candleMsg in messages)
                {
                    info.CurrentCandleMessage = candleMsg;

                    if (info.CurrentCandle != null && info.CurrentCandle.OpenTime == candleMsg.OpenTime)
                    {
                        if (info.CurrentCandle.State == CandleStates.Finished)
                        {
                            continue;
                        }

                        info.CurrentCandle.Update(candleMsg);
                    }
                    else
                    {
                        info.CurrentCandle = candleMsg.ToCandle(info.Series);
                    }

                    Processing?.Invoke(info.Series, info.CurrentCandle);

                    //if (candleMsg.IsFinished)
                    //	OnStopped(info.Series);
                }

                lastValue = value;
            }

            return(lastValue?.Time ?? default(DateTimeOffset));
        }