/// <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(); }
/// <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); }