示例#1
0
        public void BarBuilderTimeBar_СоздатьЭкземплар()
        {
            BarBuilderTimeBar barBuilder = null;

            Assert.IsNull(barBuilder);
            BarSettings barSettings;

            Common.Enums.DataModelType barType;
            barBuilder = CreateBarBuilderTimeBar(out barSettings, out barType);

            Assert.IsNotNull(barBuilder);
            Assert.AreEqual(barBuilder.BarSettings.BarType, barType);
            Assert.IsNotNull(barBuilder.BarList);
            Assert.AreEqual(barBuilder.TimeSpanInterval.TotalSeconds, barBuilder.BarSettings.Interval);
            Assert.AreEqual(barBuilder.DateTimeStart.Date, DateTime.Now.Date);
            Assert.AreEqual(barBuilder.DateTimeStart.TimeOfDay, barBuilder.BarSettings.DateTimeStart.TimeOfDay);
            Assert.AreNotEqual(barBuilder.BarList.Count, 0);
            ///15 чаосов * 60 мин = 900 мин
            Assert.AreEqual(barBuilder.BarList.Count, 900);
            Assert.AreEqual(barBuilder.BarList.First().DateTimeOpen, (DateTime.Now.Date).AddHours(9));
            Assert.AreEqual(barBuilder.BarList.First().DateTime, (DateTime.Now.Date).AddHours(9) + barBuilder.TimeSpanInterval);
            Assert.AreEqual(barBuilder.BarList.Last().DateTimeOpen, (DateTime.Now.Date).AddHours(24) - barBuilder.TimeSpanInterval);
            Assert.AreEqual(barBuilder.BarList.Last().DateTime, (DateTime.Now.Date).AddHours(24));

            Assert.AreEqual(barBuilder.BarList.Last().Interval, barBuilder.BarSettings.Interval);
            Assert.AreEqual(barBuilder.BarList.Last().Symbol, barBuilder.BarSettings.Symbol);
        }
示例#2
0
 //public MakeTimeBarsOnTick(BarSettings barSettings, ITimeTrackable timeTracker, IDataContext tradingData, ILogger logger)
 public MakeTimeBarsOnTick(BarSettings barSettings, IDataContext tradingData, ILogger logger)
     : base(tradingData.Get <ObservableCollection <Tick> >())
 {
     this.tradingData = tradingData;
     this.barSettings = barSettings;
     this.logger      = logger;
     //подменяем тип бара на TimeBar
     if (this.barSettings.BarType != Enums.DataModelType.TimeBar)
     {
         this.barSettings.BarType = Enums.DataModelType.TimeBar;
     }
     this.barBuilder = new BarBuilderTimeBar(barSettings);
     // по умолчанию должен быть null
     //barCurrent = new Bar();
 }
示例#3
0
        public void BarBuilderTimeBar_GetNewBarTest()
        {
            BarBuilderTimeBar barBuilder = null;

            Assert.IsNull(barBuilder);
            BarSettings barSettings;

            Common.Enums.DataModelType barType;
            barBuilder = CreateBarBuilderTimeBar(out barSettings, out barType);
            var tick = new Tick(barSettings.Symbol, new DateTime(2016, 7, 10, 10, 0, 00, 600), 151000, 25);

            var bar = barBuilder.GetBarTemplate(tick);

            Assert.IsNotNull(bar);
            Assert.IsTrue(bar.DateTimeOpen == new DateTime(2016, 7, 10, 10, 0, 0));
            Assert.IsTrue(bar.DateTimeOpen <= tick.DateTime);
            Assert.IsTrue(bar.DateTime > tick.DateTime);
            Assert.IsTrue(bar.Symbol == tick.Symbol);
            Assert.IsTrue(bar.State == BarState.None);
            Assert.IsTrue(barBuilder.BarList.First().DateTimeOpen == new DateTime(2016, 7, 10, 10, 1, 0));
            Assert.IsTrue(barBuilder.BarList.Last().DateTime == new DateTime(2016, 7, 11, 00, 0, 0));
            Assert.AreEqual(barBuilder.DateTimeStart.Date, (new DateTime(2016, 7, 10, 00, 0, 0)).Date);
            try
            {   // проверяем генерацию exception когда
                // Не удалось создать нужный интервал
                tick = new Tick(barSettings.Symbol, new DateTime(2016, 7, 10, 08, 0, 00, 600), 151000, 25);
                bar  = barBuilder.GetBarTemplate(tick);
                Assert.Fail("no exception thrown");
                Assert.IsNull(bar);
            }
            catch (Exception ex)
            {
                //Assert.IsTrue(ex is Exception);
                //Assert.IsTrue(ex.Message == "Не удалось создать нужный интервал");
            }
        }
示例#4
0
        public override void OnItemAdded(Tick tick)
        {
            if (barSettings.Symbol != tick.Symbol)
            {
                if (flagLogSymbol)
                {
                    this.logger.Log(String.Format("Ошибка. тик Symbol {0}, {1}", barSettings.Symbol, tick.Symbol));
                    Console.WriteLine(String.Format("Ошибка. тик Symbol {0}, {1}", barSettings.Symbol, tick.Symbol));
                    flagLogSymbol = false;
                }
                return;
            }

            // П1
            // Проверяем попадание Тика в текущий бар
            try
            {   //// У10
                //// Если Тик попадает в текущий бар
                ////// Выходим
                //if ((barCurrent.DateTime.AddSeconds(-barSettings.Interval) < item.DateTime)&&
                if ((barCurrent.DateTimeOpen <= tick.DateTime) &&
                    (barCurrent.DateTime > tick.DateTime))
                {
                    return;
                }
                if (barCurrent.DateTimeOpen > tick.DateTime)
                {
                    this.logger.Log(String.Format("{0:dd/MM/yyyy H:mm:ss.fffffff}, {1}, Ошибка. тик перед баром {2}", DateTime.Now, this.GetType().Name, barCurrent.ToString()));
                    return;
                }
            }
            catch (System.NullReferenceException e)
            {   // П2
                //// Исключение
                //// Если текущий бар отсутсвует
                ////// Запрашиваем новый текущий бар у барбилдера
                ////// Выходим
                if (barCurrent == null)
                {
                    //state = "Created";
                    barCurrent = barBuilder.GetBarTemplate(tick);
                    return;
                }
                //throw;
                throw e;
            }
            //// У11
            //// Есди Тик выходит за текущий бар
            ////// Завершаем текщий бар
            IEnumerable <Tick> barTicks = GetTicksInRangeOf(tick, barCurrent.DateTimeOpen, barCurrent.DateTime);

            ////// TODO вопрос как правильно поступать если не было тиков в диапазоне?
            //////if (barTicks == null)
            /////    return;
            if (barTicks.Count() == 0)
            {   //заполнить бар по предыдущему бару
                barCurrent = BarBuilderTimeBar.SetBarOHLCV(barCurrent, barPrevious);
                //return;
            }
            else
            {   //заполнить бар по списку тиков
                barCurrent = BarBuilderTimeBar.SetBarOHLCV(barCurrent, barTicks);
            }
            barBuilder.FinishBarState(barCurrent);
            ////// state = "Finished";
            ////// сгенерировать событие на "закончен" бара
            ////// добавить завершенный бар в контекст
            if (TradingDataBarExists(barCurrent.DateTime) != true)
            {
                this.logger.Log(String.Format("{0:dd/MM/yyyy H:mm:ss.fffffff}, {1}, добавлен новый бар {2}", DateTime.Now, this.GetType().Name, barCurrent.ToString()));
                this.tradingData.Get <ObservableCollection <Bar> >().Add(barCurrent);
            }
            else
            {
                this.logger.Log(String.Format("{0:dd/MM/yyyy H:mm:ss.fffffff}, {1}, Ошибка. Не добавлен бар {2}", DateTime.Now, this.GetType().Name, barCurrent.ToString()));
                //throw new Exception(String.Format("{0:dd/MM/yyyy H:mm:ss.fffffff}, {1}, Exception новый бар {2}", DateTime.Now, this.GetType().Name, barCurrent.ToString()));
            }
            ////// Запрашиваем новый текущий бар у барбилдера
            barCurrent = barBuilder.GetBarTemplate(tick);
            return;
            ////// Выходим
        }