Пример #1
0
                bool IEnumerator.MoveNext()
                {
                    if (_current == null)
                    {
                        _current = _storage.Load(_currDate).GetEnumerator();
                    }

                    while (true)
                    {
                        if (!_current.MoveNext())
                        {
                            _current.Dispose();

                            var canMove = false;

                            while (!canMove)
                            {
                                _currDate += TimeSpan.FromDays(1);

                                if (_currDate > _to)
                                {
                                    break;
                                }

                                _checkBounds = _currDate == _to.Date;

                                _current = _storage.Load(_currDate).GetEnumerator();

                                canMove = _current.MoveNext();
                            }

                            if (!canMove)
                            {
                                return(false);
                            }
                        }

                        if (!_checkBounds)
                        {
                            break;
                        }

                        do
                        {
                            var time = _getTime(Current).UtcDateTime;

                            if (_bounds.Contains(time))
                            {
                                return(true);
                            }

                            if (time > _to)
                            {
                                return(false);
                            }
                        }while (_current.MoveNext());
                    }

                    return(true);
                }
Пример #2
0
        /// <summary>
        /// To delete market data from the storage for the specified time period.
        /// </summary>
        /// <param name="storage">Market-data storage.</param>
        /// <param name="from">The start time for data deleting. If the value is not specified, the data will be deleted starting from the date <see cref="GetFromDate"/>.</param>
        /// <param name="to">The end time, up to which the data shall be deleted. If the value is not specified, data will be deleted up to the end date <see cref="GetToDate"/>, inclusive.</param>
        public static void Delete(this IMarketDataStorage storage, DateTimeOffset?from = null, DateTimeOffset?to = null)
        {
            if (storage == null)
            {
                throw new ArgumentNullException(nameof(storage));
            }

            var range = GetRange(storage, from, to);

            if (range == null)
            {
                return;
            }

            var info = (IMarketDataStorageInfo)storage;

            var min = range.Min.UtcDateTime;
            var max = range.Max.UtcDateTime.EndOfDay();

            for (var date = min; date <= max; date = date.AddDays(1))
            {
                if (date == min)
                {
                    var metaInfo = storage.GetMetaInfo(date.Date);

                    if (metaInfo == null)
                    {
                        continue;
                    }

                    if (metaInfo.FirstTime >= date && max.Date != min.Date)
                    {
                        storage.Delete(date.Date);
                    }
                    else
                    {
                        var data = storage.Load(date.Date).ToList();
                        data.RemoveWhere(d =>
                        {
                            var time = info.GetTime(d);
                            return(time.UtcDateTime < min || time > range.Max);
                        });
                        storage.Delete(data);
                    }
                }
                else if (date.Date < max.Date)
                {
                    storage.Delete(date.Date);
                }
                else
                {
                    var data = storage.Load(date.Date).ToList();
                    data.RemoveWhere(d => info.GetTime(d) > range.Max);
                    storage.Delete(data);
                }
            }
        }
Пример #3
0
 private void LoadMessages <TMessage>(IMarketDataStorage <TMessage> storage, DateTimeOffset from, DateTimeOffset to)
     where TMessage : Message
 {
     storage
     .Load(from, to)
     .ForEach(RaiseStorageMessage);
 }
Пример #4
0
        /// <summary>
        /// Удалить маркет-данные из хранилища для заданного периода.
        /// </summary>
        /// <param name="storage">Хранилище маркет-данных.</param>
        /// <param name="from">Время начала, с которого необходимо удалять данные. Если значение не указано, то будут удалены данные с начальной даты <see cref="GetFromDate"/>.</param>
        /// <param name="to">Время окончания, до которого включительно необходимо удалять данные. Если значение не указано, то будут удалены данные до конечной даты <see cref="GetToDate"/> включительно.</param>
        public static void Delete(this IMarketDataStorage storage, DateTimeOffset?from = null, DateTimeOffset?to = null)
        {
            if (storage == null)
            {
                throw new ArgumentNullException("storage");
            }

            var range = GetRange(storage, from, to);

            if (range == null)
            {
                return;
            }

            var info = (IMarketDataStorageInfo)storage;

            var max = range.Max.Date.EndOfDay();

            for (var date = range.Min; date <= max; date = date.AddDays(1))
            {
                if (date == range.Min)
                {
                    var metaInfo = storage.GetMetaInfo(date.Date);

                    if (metaInfo.FirstTime >= date.UtcDateTime && range.Max.Date != range.Min.Date)
                    {
                        storage.Delete(date.Date);
                    }
                    else
                    {
                        var data = storage.Load(date.Date).Cast <object>().ToList();
                        data.RemoveWhere(d => info.GetTime(d) < range.Min);
                        storage.Delete(data);
                    }
                }
                else if (date.Date < range.Max.Date)
                {
                    storage.Delete(date.Date);
                }
                else
                {
                    var data = storage.Load(date.Date).Cast <object>().ToList();
                    data.RemoveWhere(d => info.GetTime(d) > range.Max);
                    storage.Delete(data);
                }
            }
        }
Пример #5
0
        private DateTimeOffset?LoadMessages <TMessage>(IMarketDataStorage <TMessage> storage, DateTimeOffset?from, DateTimeOffset?to, TimeSpan daysLoad, long transactionId, Action sendReply, Action <Message> newOutMessage)
            where TMessage : Message, ISubscriptionIdMessage, IServerTimeMessage
        {
            var range = GetRange(storage, from, to, daysLoad);

            if (range == null)
            {
                return(null);
            }

            var messages = storage.Load(range.Item1.Date, range.Item2.Date.EndOfDay());

            return(LoadMessages(messages, range.Item1, transactionId, sendReply, newOutMessage));
        }
Пример #6
0
            public SeriesInfo(CandleSeries series, DateTimeOffset from, DateTimeOffset to, IMarketDataStorage <Candle> storage)
            {
                if (series == null)
                {
                    throw new ArgumentNullException("series");
                }

                if (storage == null)
                {
                    throw new ArgumentNullException("storage");
                }

                Series = series;
                Reader = storage.Load(from, to).GetEnumerator();
            }
Пример #7
0
        private DateTimeOffset LoadMessages <TMessage>(IMarketDataStorage <TMessage> storage, DateTimeOffset from, DateTimeOffset to, Func <TMessage, DateTimeOffset> func)
            where TMessage : Message
        {
            var messages = storage.Load(from, to);
            var lastTime = from;

            foreach (var message in messages)
            {
                if (func != null)
                {
                    lastTime = func.Invoke(message);
                }

                RaiseStorageMessage(message);
            }

            return(lastTime);
        }
Пример #8
0
        static void Main(string[] args)
        {
            var security = new Security()
            {
                Id = "RIH7@FORTS", Board = ExchangeBoard.Forts
            };
            StorageRegistry storage = new StorageRegistry();

            string path = @"../../../Data/Quik";

            //Для работы будем использовать готовое локальное файловое хранилище, в которое данные были предварительно записаны при помощи Гидры.
            //Создаем экземпляр LocalMarketDataDrive.
            LocalMarketDataDrive drive = new LocalMarketDataDrive()
            {
                Path = path
            };

            //Передаем в StorageRegistry ссылку на локальное файловое хранилище
            storage.DefaultDrive = drive;

            DateTime from = new DateTime(2017, 02, 14, 10, 0, 0);
            DateTime to   = new DateTime(2017, 02, 15, 23, 50, 0);

            // Получаем хранилище сделок для RIH7
            IMarketDataStorage <Trade> tradeStorage = storage.GetTradeStorage(security);

            // Загружаем сделки из хранилища
            var trades = tradeStorage.Load(from, to);

            // Отображаем в окне вывода информацию
            foreach (var trade in trades)
            {
                Debug.WriteLine("{0} {1}", trade, trade.OpenInterest);
            }

            Console.Read();
        }