Пример #1
0
        public void InsertData(int insStoreID, IEnumerable <Bar> bars, DateTime date1, DateTime date2, bool isLastDirty, CancellationToken cancel)
        {
            var calendar = GetInsStoreCalendar(insStoreID);

            if (calendar == null)
            {
                return;
            }

            calendar.AppendPeriod(new InsStorePeriod(date1, date2, isLastDirty));
            var freeDays = GetFreeDays(bars, date1, date2, isLastDirty);

            if (freeDays != null)
            {
                calendar.AddFreeDays(freeDays);
            }

            _insStoreDA.InsertBars(insStoreID, bars, date1, date2, cancel);
            if (cancel.IsCancellationRequested)
            {
                return;
            }

            _insStoreDA.UpdatePeriods(insStoreID, calendar.Periods);
            _insStoreDA.UpdateFreeDays(insStoreID, calendar.FreeDays);
        }
Пример #2
0
        /// <summary>
        /// Запись в базу исторических данных
        /// </summary>
        /// <param name="insStoreID">Поток данных</param>
        /// <param name="decimals">Кол-во десятичных знаков после запятой в ценах</param>
        /// <param name="bars">Список баров</param>
        /// <param name="date1">Начальная дата блока исторических данных</param>
        /// <param name="date2">Конечная дата блока исторических данных</param>
        /// <param name="isLastDirty">Конечная дата помечается как неполный день</param>
        /// <param name="cancel">Токен отмены длительной операции</param>
        public void InsertData(int insStoreID, int decimals, IEnumerable <Bar> bars, DateTime date1, DateTime date2,
                               bool isLastDirty, CancellationToken cancel)
        {
            var calendar = GetInsStoreCalendar(insStoreID);

            if (calendar == null)
            {
                return;
            }

            calendar.AppendPeriod(new InsStorePeriod(date1, date2, isLastDirty));
            var freeDays = GetFreeDays(bars, date1, date2, isLastDirty);

            calendar.UpdateFreeDays(freeDays, date1, date2);

            int k = (int)Math.Pow(10, decimals);

            var dbBars = bars.Select(b =>
            {
                DbBarHistory bh = new DbBarHistory();
                bh.InsStoreID   = insStoreID;
                bh.Time         = StorageLib.ToDbTime(b.Time);

                int op = (int)(b.Open * k);
                int cp = (int)(b.Close * k);
                int hp = (int)(b.High * k);
                int lp = (int)(b.Low * k);

                bh.OpenPrice  = op;
                bh.CloseDelta = CalcDelta(cp, op);
                bh.HighDelta  = CalcDelta(hp, op);
                bh.LowDelta   = CalcDelta(lp, op);

                long v = b.Volume;
                if (v > int.MaxValue)
                {
                    v = int.MaxValue;
                }
                if (v < int.MinValue)
                {
                    v = int.MinValue;
                }
                bh.Volume = (int)v;

                return(bh);
            });

            _insStoreDA.InsertBars(insStoreID, dbBars, date1, date2, cancel);
            if (cancel.IsCancellationRequested)
            {
                return;
            }

            _insStoreDA.UpdatePeriods(insStoreID, calendar.Periods);
            _insStoreDA.UpdateFreeDays(insStoreID, calendar.FreeDays);
        }