Пример #1
0
        void menu_LoadCSV(object sender, EventArgs e)
        {
            FolderBrowserDialog d = new FolderBrowserDialog();
            int i = 1;

            System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();

            if (d.ShowDialog() == DialogResult.OK)
            {
                string[]      filesArray = Directory.GetFiles(d.SelectedPath, "*.csv", SearchOption.AllDirectories);
                List <string> files      = new List <string>(filesArray);

                files.Sort();

                foreach (string file in files)
                {
                    if (l.IsInfoEnabled)
                    {
                        l.Info("[" + i + "/" + files.Count + "] Загружаю файл " + file);
                    }
                    FinamHelper.LoadCSV(new StreamReader(file, ascii), ParseFileNameToSymbol(file));
                    ++i;
                }
            }
        }
        public override void SetSetting(Settings settings)
        {
            base.SetSetting(settings);

            lock (FinamHelper.Lock)
            {
                if (FinamHelper.Emitents == null)
                {
                    FinamHelper.Emitents = FinamHelper.LoadEmitents(settings.EmitentsFileName);
                }
                if (FinamHelper.Emitents.Count == 0)
                {
                    buttonRefresh_Click(null, null);
                }
                else
                {
                    finamTreeView.SetEmitents(FinamHelper.Emitents);
                }
            }
        }
 private void buttonRefresh_Click(object sender, EventArgs e)
 {
     finamTreeView.SetEmitents(FinamHelper.DownloadEmitents(settings));
     buttonRefresh.Enabled = false;
 }
Пример #4
0
        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            l.Debug("стартовал backgroundWorker_DoWork");

            Random             random        = new Random(DateTime.Now.Millisecond);
            List <EmitentInfo> listDownloads = new List <EmitentInfo>();

            #region Формирование списка эмитентов
            backgroundWorker.ReportProgress(0, "Формирую список эмитентов для обработки");
            l.Debug("Формирую список эмитентов для обработки");

            lock (FinamHelper.Lock)
            {
                foreach (EmitentInfo emitent in FinamHelper.Emitents)
                {
                    if (backgroundWorker.CancellationPending)
                    {
                        e.Cancel = true; return;
                    }                                                                      // пользователь отменил операцию
                    if ((emitent.Id != -1) && (emitent.Checked))
                    {
                        listDownloads.Add(emitent);
                    }
                }
            }
            #endregion Формирование списка эмитентов

            IScale tickScale = Core.Data.GetScale(ScaleEnum.tick, 1);

            for (int i = 0; i < listDownloads.Count; ++i)
            {
                ISymbol symbol = Core.Data.GetSymbol(listDownloads[i].MarketName, listDownloads[i].Name);

                backgroundWorker.ReportProgress((100 * i / listDownloads.Count), "==== Работаю с " + symbol);
                l.Debug("==== Работаю с " + symbol);

                if (backgroundWorker.CancellationPending)
                {
                    e.Cancel = true; return;
                }                                                                      // пользователь отменил операцию

                #region Определение начальной date
                DateTime date = settings.from;

                switch (settings.fromType)
                {
                case 0:
                    date = settings.from;
                    break;

                case 1:
                    date = DateTime.Now.Date.AddDays(-1);
                    break;

                case 2:
                    date = DateTime2Int.DateTime(Core.Data.GetBars(symbol, tickScale).Last.DT);
                    break;

                case 3:
                    date = DateTime2Int.DateTime(Core.Data.GetBars(symbol, tickScale).Last.DT).AddDays(-1);
                    break;

                default:
                    l.Error("settings.fromType=" + settings.fromType);
                    break;
                }
                #endregion Определение начальной date

                for (; date <= settings.to; date = date.AddDays(1))
                {
                    string filename = Path.Combine(settings.saveCSVFolder, listDownloads[i].MarketName + "-" + listDownloads[i].Code + "-" + date.ToString("yyyyMMdd") + ".csv");
                    string csv      = string.Empty;

                    if (!File.Exists(filename))
                    {
                        #region Загрузка c финама
                        if (settings.downloadChecked)
                        {
                            backgroundWorker.ReportProgress((100 * i / listDownloads.Count), "Загружаю " + symbol + " за " + date.ToShortDateString());
                            l.Debug("Загружаю " + symbol + " за " + date.ToShortDateString());
                            do
                            {
                                if (backgroundWorker.CancellationPending)
                                {
                                    e.Cancel = true; return;
                                }                                                                      // пользователь отменил операцию
                                try
                                {
                                    csv = FinamHelper.Download(settings, listDownloads[i], date);
                                }
                                catch
                                {
                                    l.Error("Необробатываемый Exception в FinamHelper.Download");
                                    csv = "Exception";
                                }
                                if (csv == "Система уже обрабатывает Ваш запрос. Дождитесь окончания обработки.")
                                {
                                    backgroundWorker.ReportProgress((100 * i / listDownloads.Count), "Финам просит подождать");
                                    System.Threading.Thread.Sleep(random.Next(30000));
                                    if (backgroundWorker.CancellationPending)
                                    {
                                        e.Cancel = true; return;
                                    }                                                                      // пользователь отменил операцию
                                    backgroundWorker.ReportProgress((100 * i / listDownloads.Count), "Пробую снова");
                                }
                                if (csv == "Exception")
                                {
                                    backgroundWorker.ReportProgress((100 * i / listDownloads.Count), "Ошибка при скачивании");
                                    System.Threading.Thread.Sleep(random.Next(30000));
                                    if (backgroundWorker.CancellationPending)
                                    {
                                        e.Cancel = true; return;
                                    }                                                                      // пользователь отменил операцию
                                    backgroundWorker.ReportProgress((100 * i / listDownloads.Count), "Пробую снова");
                                }
                            } while
                            (
                                (csv == "Система уже обрабатывает Ваш запрос. Дождитесь окончания обработки.")
                                ||
                                (csv == "Exception")
                            );

                            if ((csv == String.Empty) || (csv.Length < 30))
                            {
                                backgroundWorker.ReportProgress((100 * i / listDownloads.Count), "нет данных \r\n" + csv);
                                l.Debug("нет данных \r\n" + csv);
                                if (backgroundWorker.CancellationPending)
                                {
                                    e.Cancel = true; return;
                                }                                                                      // пользователь отменил операцию
                            }
                        }
                        #endregion Загрузка с финама

                        #region Сохранение
                        if ((settings.saveCSVChecked) && (csv.Length >= 30))
                        {
                            backgroundWorker.ReportProgress((100 * i / listDownloads.Count), "Сохраняю csv");
                            l.Debug("Сохраняю csv");

                            try
                            {
                                if (!Directory.Exists(settings.saveCSVFolder))
                                {
                                    Directory.CreateDirectory(settings.saveCSVFolder);
                                }

                                File.WriteAllText(filename, csv, Encoding.UTF8);
                            }
                            catch (Exception exc)
                            {
                                l.Error("Не смог сохранить csv в файл ", exc);
                            }
                        }
                        #endregion Сохранение
                    }

                    #region Анализ
                    if (settings.analyzeChecked)
                    {
                        if ((csv.Length < 30) && (File.Exists(filename)))
                        {
                            csv = File.ReadAllText(filename, Encoding.UTF8);
                        }

                        if ((settings.analyzeChecked) && (csv.Length >= 30))
                        {
                            backgroundWorker.ReportProgress((100 * i / listDownloads.Count), "Анализирую " + symbol + " за " + date.ToShortDateString());
                            l.Debug("Анализирую " + symbol + " за " + date.ToShortDateString());
                            using (StringReader csvStringReader = new StringReader(csv))
                            {
                                FinamHelper.LoadCSV(csvStringReader, symbol);
                            }
                        }
                    }
                    #endregion Анализ

                    System.Threading.Thread.Sleep(random.Next(100)); // дадим интерфейсу отрисоваться, а финуму отдохнуть
                }
            }

            if (backgroundWorker.CancellationPending)
            {
                e.Cancel = true; return;
            }                                                 // пользователь отменил операцию

            System.Threading.Thread.Sleep(random.Next(1000)); // дадим интерфейсу отрисоваться, а финуму отдохнуть

            backgroundWorker.ReportProgress(100, "Всё!!!");
            l.Info("backgroundWorker_DoWork закончил");
        }