/// <summary> /// пользователь кликнул ссылку в окне сообщений - заполнить все гэпы /// (по всем графикам) /// </summary> private bool ProcessUserClickOnFillGapLink(string linkTarget) { if (linkTarget != LinkTargetFillGaps) return false; // заполнить дырки var dlg = new DownloadQuotesForm( Charts.Select(c => c.chart.Symbol) .Distinct() .ToDictionary(s => s, s => { var interval = AtomCandleStorage.Instance.GetDataRange(s); return interval.HasValue ? interval.Value.b : DateTime.Now.AddDays(-1); }), 0); dlg.LoadCompleted += delegate { // обновить графики AddMessageToStatusPanelSafe(DateTime.Now, "Обновление графиков..."); foreach (var ticker in dlg.TickersToUpload) ReopenChartsSafe(ticker); // вывести сообщение - готово AddMessageToStatusPanelSafe(DateTime.Now, dlg.TickersToUpload.Count == 1 ? "График " + dlg.TickersToUpload[0] + " обновлен" : "Обновлено " + dlg.TickersToUpload.Count + " графиков"); }; dlg.ShowDialog(this); return true; }
/// <summary> /// этот метод дергает ферма роботов при запуске /// актуализируется кеш котировок /// если по какой-либо паре в кеше нет данных либо недостаточно /// продолжительная история - делается запрос из БД /// /// на входе словарь: тикер - старт загрузки истории (предполагается время окончания - DateTime.Now) /// </summary> public void UpdateTickersCacheForRobots( Dictionary<string, DateTime> tickersToUpload, int minMinutesToUpdateCache) { if (tickersToUpload == null) throw new Exception("UpdateTickersCacheForRobots: неправильные входные данные tickersToUpload == null"); var dlg = new DownloadQuotesForm(tickersToUpload, minMinutesToUpdateCache); dlg.ShowDialog(); }