public Bar[] GetBars(string symbol, PriceType priceType, BarPeriod period, DateTime startTime, DateTime endTime) { try { var forexPeriodicity = StorageConvert.ToPeriodicity(period); var forexPriceType = StorageConvert.ToFxPriceType(priceType); var manager = this.storage.GetOrCreateHistoryManager(symbol); if (this.source != null) { // online mode if (!manager.BarsAreSynchronized(this.source, symbol, forexPeriodicity, forexPriceType, startTime, endTime, false)) { manager.SynchronizeBars(this.source, symbol, forexPeriodicity, forexPriceType, startTime, endTime, false, NullCallback); } } var bars = new List <HistoryBar>(); if (startTime < endTime) { ForwardFillBars(manager, symbol, forexPeriodicity, forexPriceType, startTime, endTime, bars); } else { BackwardFillBars(manager, symbol, forexPeriodicity, forexPriceType, startTime, endTime, bars); } var result = bars.Select(o => StorageConvert.ToBar(o, period)).ToArray(); return(result); } catch (StorageHistoryNotFoundException ex) { throw new HistoryNotFoundException("GetBars", ex); } }
Bar[] GetOfflineBars(string symbol, PriceType priceType, BarPeriod period, DateTime startTime, int barsNumber) { var manager = this.storage.GetOrCreateHistoryManager(symbol); var fxPriceType = StorageConvert.ToFxPriceType(priceType); var report = manager.QueryBarHistory(startTime, -barsNumber, symbol, period.ToString(), fxPriceType); var items = report.Items; if (barsNumber > 0) { return(items.Select(o => StorageConvert.ToBar(o, period)).ToArray()); } else if (barsNumber < 0) { return(items.Select(o => StorageConvert.ToBar(o, period)).Reverse().ToArray()); } return(Enumerable.Empty <Bar>().ToArray()); }