コード例 #1
0
        /// <summary>
        /// Get InsStore by Id
        /// </summary>
        /// <param name="insStoreID"></param>
        /// <returns></returns>
        public CommonData.InsStore GetInsStoreByID(int insStoreID)
        {
            CommonData.InsStore insStore = null;

            using (var db = new DaContext(_options))
            {
                insStore = db.InsStore.Find(insStoreID);
            }

            return(insStore);
        }
コード例 #2
0
        /// <summary>
        /// Update InsStore
        /// </summary>
        /// <param name="insStore">InsStore</param>
        public void UpdateInsStore(CommonData.InsStore insStore)
        {
            InsStore db_secStore = new InsStore()
            {
                InsStoreID = insStore.InsStoreID,
                InsID      = insStore.InsID,
                Tf         = (byte)insStore.Tf,
                IsEnable   = insStore.IsEnable
            };

            _da.DbContext.Update(db_secStore);
        }
コード例 #3
0
        /// <summary>
        /// Асинхронная загрузка исторических данных по фин. инструменту
        /// </summary>
        /// <param name="insStore">Поток данных</param>
        /// <param name="date1">Начальная дата</param>
        /// <param name="date2">Конечная дата</param>
        /// <param name="isLastDirty">Последняя дата содердит неполные данные</param>
        /// <param name="isForward">Загрузка блоками от начальной даты к конечной (иначе от конечной к начальной)</param>
        /// <param name="progress">Объект управления фоновой задачей</param>
        /// <param name="cancel">Объект отмены длительной операции</param>
        /// <returns>Асинхронная задача загрузки</returns>
        public async Task DownloadAsync(CommonData.InsStore insStore, DateTime date1, DateTime date2, bool isLastDirty, bool isForward,
                                        BgTaskProgress progress, CancellationToken cancel)
        {
            try
            {
                var parts = GetDownloadParts(insStore.Tf, date1, date2, isForward);
                int idx = 1; int count = parts.Count();
                if (progress != null)
                {
                    progress.OnStart(count > 1);
                }

                foreach (var part in parts)
                {
                    if (cancel.IsCancellationRequested)
                    {
                        if (progress != null)
                        {
                            progress.OnAbort();
                        }
                        break;
                    }
                    await SyncDataBlock(insStore, part.Date1, part.Date2, isLastDirty, cancel);

                    if (progress != null)
                    {
                        progress.OnProgress((double)idx++ / count * 100);
                    }
                }
                if (progress != null)
                {
                    if (cancel.IsCancellationRequested)
                    {
                        progress.OnAbort();
                    }
                    else
                    {
                        progress.OnComplete();
                    }
                }
            }
            catch (Exception ex)
            {
                if (progress != null)
                {
                    progress.OnFault(ex);
                }
            }
        }
コード例 #4
0
        /// <summary>
        /// Create InsStore (array of fin. instrument quotes)
        /// </summary>
        /// <param name="insID">Instrument</param>
        /// <param name="tf">Timeframe</param>
        /// <param name="isEnable">Active for sync</param>
        /// <returns></returns>
        public int CreateInsStore(int insID, Timeframes tf, bool isEnable)
        {
            var insStore = new CommonData.InsStore()
            {
                InsID    = insID,
                Tf       = tf,
                IsEnable = isEnable
            };

            using (var db = new DaContext(_options))
            {
                db.InsStore.Add(insStore);
                db.SaveChanges();
            }

            return(insStore.InsStoreID);
        }
コード例 #5
0
 /// <summary>
 /// Обновить объект InsStore
 /// </summary>
 /// <param name="insStore"></param>
 public void UpdateInsStore(CommonData.InsStore insStore)
 {
     _insStoreDA.UpdateInsStore(insStore.InsStoreID, insStore.IsEnable);
 }
コード例 #6
0
        /// <summary>
        /// Наилучший insStore для загрузки.
        /// Например, требуется сформировать бары с таймфреймом Hour, но такого insStore в базе нет.
        /// Тогда из имеющихся insStore будет выбран наиболее подходящий.
        /// </summary>
        /// <param name="insID">Инструмент</param>
        /// <param name="tf">ТФ у BarRow</param>
        /// <returns>Наиболее подходящий insStore для загрузки.</returns>
        public CommonData.InsStore GetLoadHistoryInsStore(int insID, Timeframes tf)
        {
            CommonData.InsStore ss = null;
            var insStores          = GetInsStores(insID);

            if (tf == Timeframes.Tick)
            {
                ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Tick);
            }

            if (tf == Timeframes.Min)
            {
                ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min);
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Tick);
                }
            }

            if (tf == Timeframes.Min5)
            {
                ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min5);
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Tick);
                }
            }

            if (tf == Timeframes.Min10)
            {
                ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min10);
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min5);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Tick);
                }
            }

            if (tf == Timeframes.Min15)
            {
                ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min15);
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min5);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Tick);
                }
            }

            if (tf == Timeframes.Min20)
            {
                ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min20);
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min10);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min5);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Tick);
                }
            }

            if (tf == Timeframes.Min30)
            {
                ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min30);
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min15);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min10);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min5);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Tick);
                }
            }

            if (tf == Timeframes.Hour)
            {
                ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Hour);
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min30);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min20);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min15);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min10);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min5);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Tick);
                }
            }

            if (tf == Timeframes.Day)
            {
                ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Day);
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Hour);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min30);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min20);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min15);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min10);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min5);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Tick);
                }
            }

            if (tf == Timeframes.Week)
            {
                ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Week);
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Day);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Hour);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min30);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min20);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min15);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min10);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min5);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Min);
                }
                if (ss == null)
                {
                    ss = insStores.FirstOrDefault(s => s.Tf == Timeframes.Tick);
                }
            }

            return(ss);
        }
コード例 #7
0
        /// <summary>
        /// Загрузка одного потока
        /// </summary>
        /// <param name="args">Date1, Date2, [Dirty], Tf, Ticker, Ticker, ...</param>
        public async void HistoryDownloadAsync(List <string> args)
        {
            DateTime   date1       = DateTime.Today;
            DateTime   date2       = DateTime.Today;
            bool       isLastDirty = false;
            Timeframes tf          = Timeframes.Min;

            if (args.Count == 1)
            {
                if (args[0].Trim().ToLower() == "progress")
                {
                    if (_progress != null)
                    {
                        ShowProgress(_progress);
                    }
                    else
                    {
                        _console.WriteLine("Нет операции");
                    }
                    return;
                }
                else if (args[0].Trim().ToLower() == "cancel")
                {
                    if (_cancel != null)
                    {
                        _cancel.Cancel();
                        _console.WriteLine("Операция прервана");
                    }
                    else
                    {
                        _console.WriteLine("Нет операции");
                    }
                    return;
                }
            }

            if (args.Count < 2)
            {
                _console.WriteError("Не указаны даты");
                return;
            }

            DateTime d;

            if (DateTime.TryParse(args[0].Trim(), out d))
            {
                date1 = d;
            }
            else
            {
                _console.WriteError("Неверно указана дата начала");
                return;
            }
            if (DateTime.TryParse(args[1].Trim(), out d))
            {
                date2 = d;
            }
            else
            {
                _console.WriteError("Неверно указана дата окончания");
                return;
            }

            args.RemoveRange(0, 2);

            if (args.Count < 1)
            {
                _console.WriteError("Неверное число аргументов");
                return;
            }

            if (args[0].Trim().ToLower() == "dirty")
            {
                isLastDirty = true;
                args.RemoveAt(0);
            }

            if (args.Count < 1)
            {
                _console.WriteError("Неверное число аргументов");
                return;
            }

            Timeframes tf_;

            if (!Timeframes.TryParse <Timeframes>(args[0].Trim(), out tf_))
            {
                _console.WriteError("Неверный агрумент: Timeframe");
                return;
            }
            tf = tf_;

            args.RemoveAt(0);

            if (args.Count < 1)
            {
                _console.WriteError("Неверное число аргументов");
                return;
            }

            List <CommonData.InsStore> insStores = new List <CommonData.InsStore>();

            foreach (string ticker in args)
            {
                CommonData.InsStore insStore = _insStoreBL.GetInsStore(ticker, tf);
                if (insStore == null)
                {
                    _console.WriteError("Не найден тикер: " + ticker);
                    continue;
                }
                insStores.Add(insStore);
            }
            if (insStores.Count == 0)
            {
                _console.WriteError("Пустой список тикеров");
                return;
            }

            if (_progress != null && _progress.IsWorking)
            {
                ShowProgress(_progress);
                return;
            }

            _console.WriteLine("Загрузка данных ... ");
            _progress = new BgTaskProgress(_syncContext, "Загрузка данных ...");
            _cancel   = new CancellationTokenSource();

            _progress.OnStart();
            int idx = 0;

            foreach (var insStore in insStores)
            {
                var instrum = _instrumBL.GetInstrumByID(insStore.InsID);
                if (instrum == null)
                {
                    continue;
                }

                var p = _progress.AddChildProgress(instrum.ShortName);
                await _historyDownloader.DownloadAsync(insStore, date1, date2, isLastDirty, true, p, _cancel.Token);

                idx++;
                _progress.OnProgress((double)idx * 100 / insStores.Count);
            }
            _progress.OnComplete();
        }