コード例 #1
0
        public AllSecurityMarketDataStorage(Security security, object arg, Func <T, DateTimeOffset> getTime, Func <T, Security> getSecurity, Func <Security, IMarketDataDrive, IMarketDataStorage <T> > getStorage, IMarketDataStorageDrive drive)
        {
            if (security == null)
            {
                throw new ArgumentNullException("security");
            }

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

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

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

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

            _security = security;
            _getTime  = getTime;

            _arg  = arg;
            Drive = drive;

            _basket = new BasketMarketDataStorage <T>();

            var idGenerator = new SecurityIdGenerator();

            var parts = idGenerator.Split(security.Id);
            var code  = parts.Item1;

            var securities = InteropHelper
                             .GetDirectories(Path.Combine(Drive.Drive.Path, code.Substring(0, 1)), code + "*")
                             .Select(p => Path.GetFileName(p).FolderNameToSecurityId())
                             .Select(s =>
            {
                var id = idGenerator.Split(s);

                var clone   = security.Clone();
                clone.Id    = s;
                clone.Board = ExchangeBoard.GetOrCreateBoard(id.Item2);
                return(clone);
            });

            foreach (var sec in securities)
            {
                _basket.InnerStorages.Add(getStorage(sec, Drive.Drive));
            }
        }
コード例 #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CachedBasketMarketDataStorage{T}"/>.
        /// </summary>
        public CachedBasketMarketDataStorage(BasketMarketDataStorage <T> basketStorage)
        {
            if (basketStorage == null)
            {
                throw new ArgumentNullException(nameof(basketStorage));
            }

            _basketStorage     = basketStorage;
            _cancellationToken = new CancellationTokenSource();

            ThreadingHelper
            .Thread(() => CultureInfo.InvariantCulture.DoInCulture(OnLoad))
            .Name("Cached marketdata storage thread.")
            .Launch();
        }
コード例 #3
0
            public BasketMarketDataStorageEnumerator(BasketMarketDataStorage <TMessage> storage, DateTime date)
            {
                _storage = storage ?? throw new ArgumentNullException(nameof(storage));
                _date    = date;

                foreach (var s in storage._innerStorages.Cache)
                {
                    if (s.GetType().GetGenericType(typeof(InMemoryMarketDataStorage <>)) == null && !s.Dates.Contains(date))
                    {
                        continue;
                    }

                    _actions.Add(Tuple.Create(ActionTypes.Add, s, storage._innerStorages.TryGetTransactionId(s)));
                }

                _storage._enumerators.Add(this);
            }
コード例 #4
0
            public BasketEnumerable(BasketMarketDataStorage <TMessage> storage, DateTime date)
                : base(() => new BasketMarketDataStorageEnumerator(storage, date))
            {
                if (storage == null)
                {
                    throw new ArgumentNullException(nameof(storage));
                }

                var dataTypes = new List <MessageTypes>();

                foreach (var s in storage._innerStorages.Cache)
                {
                    if (s.GetType().GetGenericType(typeof(InMemoryMarketDataStorage <>)) == null && !s.Dates.Contains(date))
                    {
                        continue;
                    }

                    if (s.DataType == typeof(ExecutionMessage))
                    {
                        dataTypes.Add(MessageTypes.Execution);
                    }

                    if (s.DataType == typeof(QuoteChangeMessage))
                    {
                        dataTypes.Add(MessageTypes.QuoteChange);
                    }

                    if (s.DataType == typeof(Level1ChangeMessage))
                    {
                        dataTypes.Add(MessageTypes.Level1Change);
                    }

                    if (s.DataType == typeof(TimeMessage))
                    {
                        dataTypes.Add(MessageTypes.Time);
                    }

                    if (s.DataType.IsCandleMessage())
                    {
                        dataTypes.Add(s.DataType.ToMessageType());
                    }
                }

                DataTypes = dataTypes.ToArray();
            }
コード例 #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CachedBasketMarketDataStorage{T}"/>.
        /// </summary>
        public CachedBasketMarketDataStorage(BasketMarketDataStorage <T> basketStorage)
        {
            if (basketStorage == null)
            {
                throw new ArgumentNullException(nameof(basketStorage));
            }

            _basketStorage = basketStorage;
            _basketStorage.InnerStorages.Add(new InMemoryMarketDataStorage <TimeMessage>(null, null, GetTimeLine));

            _cancellationToken = new CancellationTokenSource();

            MaxMessageCount = 1000000;

            ThreadingHelper
            .Thread(() => CultureInfo.InvariantCulture.DoInCulture(OnLoad))
            .Name("Cached marketdata storage thread.")
            .Launch();
        }
コード例 #6
0
            internal BasketMarketDataStorageEnumerator(BasketMarketDataStorage <T> storage, DateTime date)
            {
                if (storage == null)
                {
                    throw new ArgumentNullException("storage");
                }

                _storage = storage;
                _date    = date;

                var dataTypes = new List <MessageTypes>();

                foreach (var s in storage._innerStorages.Cache)
                {
                    if (!s.Dates.Contains(date))
                    {
                        continue;
                    }

                    _actions.Add(Tuple.Create(ActionType.Add, s));

                    if (s.DataType == typeof(ExecutionMessage))
                    {
                        dataTypes.Add(MessageTypes.Execution);
                    }

                    if (s.DataType == typeof(QuoteChangeMessage))
                    {
                        dataTypes.Add(MessageTypes.QuoteChange);
                    }

                    if (s.DataType == typeof(Level1ChangeMessage))
                    {
                        dataTypes.Add(MessageTypes.Level1Change);
                    }

                    if (s.DataType == typeof(TimeMessage))
                    {
                        dataTypes.Add(MessageTypes.Time);
                    }

                    if (s.DataType == typeof(TimeFrameCandleMessage))
                    {
                        dataTypes.Add(MessageTypes.CandleTimeFrame);
                    }

                    if (s.DataType == typeof(PnFCandleMessage))
                    {
                        dataTypes.Add(MessageTypes.CandlePnF);
                    }

                    if (s.DataType == typeof(RangeCandleMessage))
                    {
                        dataTypes.Add(MessageTypes.CandleRange);
                    }

                    if (s.DataType == typeof(RenkoCandleMessage))
                    {
                        dataTypes.Add(MessageTypes.CandleRenko);
                    }

                    if (s.DataType == typeof(TickCandleMessage))
                    {
                        dataTypes.Add(MessageTypes.CandleTick);
                    }

                    if (s.DataType == typeof(VolumeCandleMessage))
                    {
                        dataTypes.Add(MessageTypes.CandleVolume);
                    }
                }

                DataTypes = dataTypes.ToArray();

                _storage._enumerators.Add(this);
            }
コード例 #7
0
        public AllSecurityMarketDataStorage(Security security,
                                            object arg,
                                            Func <T, DateTimeOffset> getTime,
                                            Func <T, Security> getSecurity,
                                            Func <Security, IMarketDataDrive, IMarketDataStorage <T> > getStorage,
                                            IMarketDataStorageDrive drive,
                                            IExchangeInfoProvider exchangeInfoProvider)
        {
            if (security == null)
            {
                throw new ArgumentNullException(nameof(security));
            }

            if (getTime == null)
            {
                throw new ArgumentNullException(nameof(getTime));
            }

            if (getSecurity == null)
            {
                throw new ArgumentNullException(nameof(getSecurity));
            }

            if (getStorage == null)
            {
                throw new ArgumentNullException(nameof(getStorage));
            }

            if (drive == null)
            {
                throw new ArgumentNullException(nameof(drive));
            }

            if (exchangeInfoProvider == null)
            {
                throw new ArgumentNullException(nameof(exchangeInfoProvider));
            }

            _security             = security;
            _exchangeInfoProvider = exchangeInfoProvider;
            _getTime = getTime;

            _arg  = arg;
            Drive = drive;

            _basket = new BasketMarketDataStorage <T>();

            var id   = security.Id.ToSecurityId();
            var code = id.SecurityCode;

            var securities = InteropHelper
                             .GetDirectories(Path.Combine(Drive.Drive.Path, code.Substring(0, 1)), code + "*")
                             .Select(p => Path.GetFileName(p).FolderNameToSecurityId())
                             .Select(s =>
            {
                var idInfo = s.ToSecurityId();

                var clone   = security.Clone();
                clone.Id    = s;
                clone.Board = _exchangeInfoProvider.GetOrCreateBoard(idInfo.BoardCode);
                return(clone);
            });

            foreach (var sec in securities)
            {
                _basket.InnerStorages.Add(getStorage(sec, Drive.Drive));
            }
        }
コード例 #8
0
 private static DateTimeOffset GetServerTime(IEnumerator enumerator)
 {
     return(BasketMarketDataStorage <T> .GetServerTime((Message)enumerator.Current));
 }
コード例 #9
0
 public BasketMarketDataSerializer(BasketMarketDataStorage <TMessage> parent)
 {
     _parent = parent ?? throw new ArgumentNullException(nameof(parent));
 }