예제 #1
0
        private void ForwardNextDay_KLine(KLineData_RealTime klineData, KLinePeriod period)
        {
            if (period.PeriodType >= KLineTimeType.DAY)
            {
                double day            = currentTickData.TradingDay;
                int    nextKLineIndex = FindNextKLineIndex(klineData, day);
                if (nextKLineIndex != klineData.BarPos)
                {
                    dic_KLinePeriod_IsEnd[period] = true;
                    klineData.SetRealTimeData(GetKLineBar(currentTickData), nextKLineIndex);
                }
                else
                {
                    dic_KLinePeriod_IsEnd[period] = false;
                    klineData.SetRealTimeData(GetKLineBar(klineData, currentTickData));
                }
                return;
            }

            ITickBar tickBar = currentTickData.GetCurrentBar();
            KLineData_DaySplitter daySplitter = dic_Period_DaySplitter[period];

            daySplitter.NextDay();
            //klineData.BarPos = daySplitter.CurrentDayKLineIndex;
            ForwardKLine_NextPeriod(klineData, daySplitter.CurrentDayKLineIndex, tickBar);
        }
예제 #2
0
        private void ForwardToday_KLineData(KLineData_RealTime klineData, KLinePeriod period)
        {
            ITickBar nextTickBar = currentTickData.GetBar(currentTickData.BarPos + 1);

            //日线,肯定不会跳到下一个bar
            if (period == KLinePeriod.KLinePeriod_1Day)
            {
                dic_KLinePeriod_IsEnd[period] = false;
                klineData.SetRealTimeData(GetKLineBar(klineData, nextTickBar));
                return;
            }
            double time           = nextTickBar.Time;
            int    nextKLineIndex = FindNextKLineIndex(klineData, time);

            if (nextKLineIndex == klineData.BarPos)
            {
                dic_KLinePeriod_IsEnd[period] = false;
                klineData.SetRealTimeData(GetKLineBar(klineData, nextTickBar));
            }
            else
            {
                dic_KLinePeriod_IsEnd[period] = true;
                klineData.SetRealTimeData(GetKLineBar(nextTickBar), nextKLineIndex);
            }
        }
예제 #3
0
        public void TestAdjustKLineDataByTick()
        {
            DataReaderFactory  fac               = ResourceLoader.GetDefaultDataReaderFactory();
            IKLineData         klineData         = fac.KLineDataReader.GetData("m05", 20120104, 20120110, KLinePeriod.KLinePeriod_1Minute);
            KLineData_RealTime realtimeKLineData = new KLineData_RealTime(klineData);

            realtimeKLineData.BarPos = TimeIndeierUtils.IndexOfTime_KLine(klineData, 20120104.090000);
            ITickData tickData = fac.TickDataReader.GetTickData("m05", 20120104);

            tickData.BarPos = 0;

            int lastIndex    = -1;
            int currentIndex = 0;

            tickData.BarPos = currentIndex;

            KLineBar klineBar = KLineBar.CopyFrom(realtimeKLineData);

            klineBar.High  = klineBar.Start;
            klineBar.Low   = klineBar.Start;
            klineBar.End   = klineBar.Start;
            klineBar.Mount = 0;
            klineBar.Money = 0;
            klineBar.Hold  = 0;
            realtimeKLineData.SetRealTimeData(klineBar);

            for (int i = 0; i < tickData.Length; i++)
            {
                RealTimeDataNavigateUtils.ForwardKLineDataByForwardedTick(realtimeKLineData, tickData, lastIndex, currentIndex, new KLineBar());
                Console.WriteLine(realtimeKLineData);
                lastIndex = currentIndex;
                currentIndex++;
            }
        }
예제 #4
0
        //private KLineDataIndeier klineDataIndeier;

        public void ChangeTime(double time)
        {
            if (this.time == time)
            {
                return;
            }
            if (!IsInCurrentKLineData(time))
            {
                Change(code, time, period);
                return;
            }
            RefreshChartBuilder(time);
            this.time = time;

            this.currentKLineIndex = TimeIndeierUtils.IndexOfTime_KLine(klineData, time);
            this.chartBuilder.ChangeTime(time);
            IKLineBar chart = this.chartBuilder.GetCurrentChart();

            klineData.SetRealTimeData(chart, currentKLineIndex);
        }
예제 #5
0
 private void InitKLine()
 {
     currentTickData = dataReader.TickDataReader.GetTickData(code, tradingDays[0]);
     foreach (KLinePeriod period in dic_Period_KLineData.Keys)
     {
         KLineData_RealTime klineData = dic_Period_KLineData[period];
         klineData.SetRealTimeData(GetKLineBar(currentTickData));
         if (period == forwardPeriod)
         {
             mainKlineData = klineData;
         }
     }
 }
예제 #6
0
 private void InitKLine()
 {
     foreach (KLinePeriod period in dic_Period_KLineData.Keys)
     {
         KLineData_RealTime klineData = dic_Period_KLineData[period];
         //主K线最后前进
         if (klineData == mainKLineData)
         {
             continue;
         }
         klineData.SetRealTimeData(mainKLineData);
     }
 }
예제 #7
0
        private void ForwardKLine_NextPeriod(KLineData_RealTime klineData, int newBarPos, ITickBar tickBar)
        {
            KLineBar bar = new KLineBar();

            bar.Time         = tickBar.Time;
            bar.Start        = tickBar.Price;
            bar.High         = tickBar.Price;
            bar.Low          = tickBar.Price;
            bar.End          = tickBar.Price;
            bar.Money        = tickBar.Mount * tickBar.Price;
            bar.Mount        = tickBar.Mount;
            bar.Hold         = tickBar.Hold;
            klineData.BarPos = newBarPos;
            klineData.SetRealTimeData(bar);
        }
예제 #8
0
        private void ForwardBar_CurrentPeriod(KLineData_RealTime klineData, IKLineBar klineBar)
        {
            double time = klineBar.Time;

            IKLineBar oldbar = klineData.GetBar(klineData.BarPos);

            KLineBar bar = new KLineBar();

            bar.Time  = klineBar.Time;
            bar.Start = oldbar.Start;
            bar.High  = klineBar.High > oldbar.High ? klineBar.High : oldbar.High;
            bar.Low   = klineBar.Low < oldbar.Low ? klineBar.Low : oldbar.Low;
            bar.End   = klineBar.End;
            bar.Mount = oldbar.Mount + klineBar.Mount;
            bar.Money = oldbar.Money + klineBar.Money;
            bar.Hold  = klineBar.Hold;

            klineData.SetRealTimeData(bar);
        }
예제 #9
0
 private void ForwardBar_NextPeriod(KLineData_RealTime klineData, IKLineBar klineBar)
 {
     klineData.BarPos++;
     klineData.SetRealTimeData(klineBar);
 }