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)); } }
/// <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(); }
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); }
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(); }
/// <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(); }
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); }
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)); } }
private static DateTimeOffset GetServerTime(IEnumerator enumerator) { return(BasketMarketDataStorage <T> .GetServerTime((Message)enumerator.Current)); }
public BasketMarketDataSerializer(BasketMarketDataStorage <TMessage> parent) { _parent = parent ?? throw new ArgumentNullException(nameof(parent)); }