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); }
/// <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); } } }
private void LoadMessages <TMessage>(IMarketDataStorage <TMessage> storage, DateTimeOffset from, DateTimeOffset to) where TMessage : Message { storage .Load(from, to) .ForEach(RaiseStorageMessage); }
/// <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); } } }
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)); }
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(); }
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); }
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(); }