protected override TimeSpan OnProcess() { var source = new MfdHistorySource(); if (_settings.UseTemporaryFiles != TempFiles.NotUse) { source.DumpFolder = GetTempPath(); } var allSecurity = this.GetAllSecurity(); // если фильтр по инструментам выключен (выбран инструмент все инструменты) var selectedSecurities = (allSecurity != null ? this.ToHydraSecurities(_mfdSecurityStorage.Securities) : Settings.Securities).ToArray(); var hasNonMfd = selectedSecurities.Any(s => !IsMfd(s)); if (selectedSecurities.IsEmpty() || hasNonMfd) { this.AddWarningLog(selectedSecurities.IsEmpty() ? LocalizedStrings.Str2289 : LocalizedStrings.Str2290.Put("MFD")); source.Refresh(_mfdSecurityStorage, new Security(), SaveSecurity, () => !CanProcess(false)); selectedSecurities = (allSecurity != null ? this.ToHydraSecurities(_mfdSecurityStorage.Securities) : Settings.Securities) .Where(s => { var retVal = IsMfd(s); if (!retVal) { this.AddWarningLog(LocalizedStrings.Str2291Params, s.Security.Id, "MFD"); } return(retVal); }).ToArray(); } if (!CanProcess()) { return(base.OnProcess()); } if (selectedSecurities.IsEmpty()) { this.AddWarningLog(LocalizedStrings.Str2292); return(TimeSpan.MaxValue); } var startDate = _settings.StartFrom; var endDate = DateTime.Today - TimeSpan.FromDays(_settings.DayOffset); var allDates = startDate.Range(endDate, TimeSpan.FromDays(1)).ToArray(); foreach (var security in selectedSecurities) { if (!CanProcess()) { break; } #region LoadTrades if ((allSecurity ?? security).IsTicksEnabled()) { var storage = StorageRegistry.GetTradeStorage(security.Security, _settings.Drive, _settings.StorageFormat); var emptyDates = allDates.Except(storage.Dates).ToArray(); if (emptyDates.IsEmpty()) { this.AddInfoLog(LocalizedStrings.Str2293Params, security.Security.Id); } else { foreach (var emptyDate in emptyDates) { if (!CanProcess()) { break; } if (_settings.IgnoreWeekends && !security.IsTradeDate(emptyDate)) { this.AddDebugLog(LocalizedStrings.WeekEndDate, emptyDate); continue; } try { this.AddInfoLog(LocalizedStrings.Str2294Params, emptyDate, security.Security.Id); var ticks = source.GetTicks(security.Security, emptyDate, emptyDate); if (ticks.Any()) { SaveTicks(security, ticks); } else { this.AddDebugLog(LocalizedStrings.NoData); } if (_settings.UseTemporaryFiles == TempFiles.UseAndDelete) { File.Delete(source.GetDumpFile(security.Security, emptyDate, emptyDate, typeof(ExecutionMessage), ExecutionTypes.Tick)); } } catch (Exception ex) { HandleError(new InvalidOperationException(LocalizedStrings.Str2295Params .Put(emptyDate, security.Security.Id), ex)); } } } } else { this.AddDebugLog(LocalizedStrings.MarketDataNotEnabled, security.Security.Id, typeof(Trade).Name); } #endregion if (!CanProcess()) { break; } #region LoadCandles foreach (var pair in (allSecurity ?? security).GetCandleSeries()) { if (!CanProcess()) { break; } if (pair.MessageType != typeof(TimeFrameCandleMessage)) { this.AddWarningLog(LocalizedStrings.Str2296Params, pair); continue; } var tf = (TimeSpan)pair.Arg; var storage = StorageRegistry.GetCandleMessageStorage(pair.MessageType, security.Security, tf, _settings.Drive, _settings.StorageFormat); var emptyDates = allDates.Except(storage.Dates).ToArray(); if (emptyDates.IsEmpty()) { this.AddInfoLog(LocalizedStrings.Str2297Params, tf, security.Security.Id); continue; } var currDate = emptyDates.First(); var lastDate = emptyDates.Last(); while (currDate <= lastDate) { if (!CanProcess()) { break; } if (_settings.IgnoreWeekends && !security.IsTradeDate(currDate)) { this.AddDebugLog(LocalizedStrings.WeekEndDate, currDate); currDate = currDate.AddDays(1); continue; } try { var till = currDate.AddDays(_settings.CandleDayStep - 1); this.AddInfoLog(LocalizedStrings.Str2298Params, tf, currDate, till, security.Security.Id); var candles = source.GetCandles(security.Security, tf, currDate, till); if (candles.Any()) { SaveCandles(security, candles); } else { this.AddDebugLog(LocalizedStrings.NoData); } if (_settings.UseTemporaryFiles == TempFiles.UseAndDelete) { File.Delete(source.GetDumpFile(security.Security, currDate, till, typeof(TimeFrameCandleMessage), tf)); } } catch (Exception ex) { HandleError(new InvalidOperationException(LocalizedStrings.Str2299Params .Put(tf, currDate, security.Security.Id), ex)); } currDate = currDate.AddDays(_settings.CandleDayStep); } } #endregion } if (CanProcess()) { this.AddInfoLog(LocalizedStrings.Str2300); } return(base.OnProcess()); }
protected override TimeSpan OnProcess() { var source = new MfdHistorySource(); if (_settings.UseTemporaryFiles != TempFiles.NotUse) source.DumpFolder = GetTempPath(); var allSecurity = this.GetAllSecurity(); // если фильтр по инструментам выключен (выбран инструмент все инструменты) var selectedSecurities = (allSecurity != null ? this.ToHydraSecurities(_mfdSecurityStorage.Securities) : Settings.Securities).ToArray(); var hasNonMfd = selectedSecurities.Any(s => !IsMfd(s)); if (selectedSecurities.IsEmpty() || hasNonMfd) { this.AddWarningLog(selectedSecurities.IsEmpty() ? LocalizedStrings.Str2289 : LocalizedStrings.Str2290.Put("MFD")); source.Refresh(_mfdSecurityStorage, new Security(), SaveSecurity, () => !CanProcess(false)); selectedSecurities = (allSecurity != null ? this.ToHydraSecurities(_mfdSecurityStorage.Securities) : Settings.Securities) .Where(s => { var retVal = IsMfd(s); if (!retVal) this.AddWarningLog(LocalizedStrings.Str2291Params, s.Security.Id, "MFD"); return retVal; }).ToArray(); } if (!CanProcess()) return base.OnProcess(); if (selectedSecurities.IsEmpty()) { this.AddWarningLog(LocalizedStrings.Str2292); return TimeSpan.MaxValue; } var startDate = _settings.StartFrom; var endDate = DateTime.Today - TimeSpan.FromDays(_settings.DayOffset); var allDates = startDate.Range(endDate, TimeSpan.FromDays(1)).ToArray(); foreach (var security in selectedSecurities) { if (!CanProcess()) break; #region LoadTrades if ((allSecurity ?? security).MarketDataTypesSet.Contains(typeof(Trade))) { var storage = StorageRegistry.GetTradeStorage(security.Security, _settings.Drive, _settings.StorageFormat); var emptyDates = allDates.Except(storage.Dates).ToArray(); if (emptyDates.IsEmpty()) { this.AddInfoLog(LocalizedStrings.Str2293Params, security.Security.Id); } else { foreach (var emptyDate in emptyDates) { if (!CanProcess()) break; if (_settings.IgnoreWeekends && !security.IsTradeDate(emptyDate)) { this.AddDebugLog(LocalizedStrings.WeekEndDate, emptyDate); continue; } try { this.AddInfoLog(LocalizedStrings.Str2294Params, emptyDate, security.Security.Id); var ticks = source.GetTicks(security.Security, emptyDate, emptyDate); if (ticks.Any()) SaveTicks(security, ticks); else this.AddDebugLog(LocalizedStrings.NoData); if (_settings.UseTemporaryFiles == TempFiles.UseAndDelete) File.Delete(source.GetDumpFile(security.Security, emptyDate, emptyDate, typeof(ExecutionMessage), ExecutionTypes.Tick)); } catch (Exception ex) { HandleError(new InvalidOperationException(LocalizedStrings.Str2295Params .Put(emptyDate, security.Security.Id), ex)); } } } } else this.AddDebugLog(LocalizedStrings.MarketDataNotEnabled, security.Security.Id, typeof(Trade).Name); #endregion if (!CanProcess()) break; #region LoadCandles foreach (var series in (allSecurity ?? security).CandleSeries) { if (!CanProcess()) break; if (series.CandleType != typeof(TimeFrameCandle)) { this.AddWarningLog(LocalizedStrings.Str2296Params, series); continue; } var storage = StorageRegistry.GetCandleStorage(series.CandleType, security.Security, series.Arg, _settings.Drive, _settings.StorageFormat); var emptyDates = allDates.Except(storage.Dates).ToArray(); if (emptyDates.IsEmpty()) { this.AddInfoLog(LocalizedStrings.Str2297Params, series.Arg, security.Security.Id); continue; } var currDate = emptyDates.First(); var lastDate = emptyDates.Last(); while (currDate <= lastDate) { if (!CanProcess()) break; if (_settings.IgnoreWeekends && !security.IsTradeDate(currDate)) { this.AddDebugLog(LocalizedStrings.WeekEndDate, currDate); currDate = currDate.AddDays(1); continue; } try { var till = currDate.AddDays(_settings.CandleDayStep - 1); this.AddInfoLog(LocalizedStrings.Str2298Params, series.Arg, currDate, till, security.Security.Id); var candles = source.GetCandles(security.Security, (TimeSpan)series.Arg, currDate, till); if (candles.Any()) SaveCandles(security, candles); else this.AddDebugLog(LocalizedStrings.NoData); if (_settings.UseTemporaryFiles == TempFiles.UseAndDelete) File.Delete(source.GetDumpFile(security.Security, currDate, till, typeof(TimeFrameCandleMessage), series.Arg)); } catch (Exception ex) { HandleError(new InvalidOperationException(LocalizedStrings.Str2299Params .Put(series.Arg, currDate, security.Security.Id), ex)); } currDate = currDate.AddDays(_settings.CandleDayStep); } } #endregion } if (CanProcess()) this.AddInfoLog(LocalizedStrings.Str2300); return base.OnProcess(); }