コード例 #1
0
        private static KLineBar GetChart(IKLineData data, int startIndex, int endIndex)
        {
            //KLineChart chart = new KLineChart();
            KLineBar chart = new KLineBar();
            chart.Code = data.Code;
            chart.Time = data.Arr_Time[startIndex];
            chart.Start = data.Arr_Start[startIndex];
            chart.End = data.Arr_End[endIndex];
            chart.Hold = data.Arr_Hold[endIndex];

            float high = float.MinValue;
            float low = float.MaxValue;
            int mount = 0;
            float money = 0;
            for (int i = startIndex; i <= endIndex; i++)
            {
                float chigh = data.Arr_High[i];
                float clow = data.Arr_Low[i];
                high = high < chigh ? chigh : high;
                low = low > clow ? clow : low;
                mount += data.Arr_Mount[i];
                money += data.Arr_Money[i];
            }
            chart.High = high;
            chart.Low = low;
            chart.Mount = mount;
            chart.Money = money;
            return chart;
        }
コード例 #2
0
        private KLineBar CalcKLineBar(int klineIndex, int startTickIndex, int endTickIndex)
        {
            if (endTickIndex < startTickIndex)
            {
                return(CalcCurrentChart_EmptyChart(klineIndex));
            }
            KLineBar klineBar = new KLineBar();
            float    high     = 0;
            float    low      = float.MaxValue;
            int      mount    = 0;
            float    money    = 0;

            for (int i = startTickIndex; i <= endTickIndex; i++)
            {
                int   currentMount = tickData.Arr_Mount[i];
                float price        = tickData.Arr_Price[i];
                high   = high < price ? price : high;
                low    = low > price ? price : low;
                mount += currentMount;
                //money += currentMount * price;
                currentHold += tickData.Arr_Add[i];
            }
            klineBar.Code  = tickData.Code;
            klineBar.Time  = klineTimes[klineIndex][0];
            klineBar.Start = tickData.Arr_Price[startTickIndex];
            klineBar.High  = high;
            klineBar.Low   = low;
            klineBar.End   = tickData.Arr_Price[endTickIndex];
            klineBar.Mount = mount;
            klineBar.Money = money;
            klineBar.Hold  = currentHold;
            return(klineBar);
        }
コード例 #3
0
        public static KLineBar GetKLineBar(IKLineBar klineBar, ITickData tickData, int startIndex, int endIndex)
        {
            KLineBar bar        = new KLineBar();
            ITickBar endTickBar = tickData.GetBar(endIndex);

            bar.Time  = endTickBar.Time;
            bar.Start = klineBar.Start;

            float high  = klineBar.High;
            float low   = klineBar.Low;
            float money = klineBar.Money;
            int   mount = klineBar.Mount;

            for (int i = startIndex; i <= endIndex; i++)
            {
                ITickBar tickBar = tickData.GetBar(i);
                if (high < tickBar.Price)
                {
                    high = tickBar.Price;
                }
                if (low > tickBar.Price)
                {
                    low = tickBar.Price;
                }
                money += tickBar.Mount * tickBar.Price;
                mount += tickBar.Mount;
            }
            bar.High  = high;
            bar.Low   = low;
            bar.End   = endTickBar.Price;
            bar.Money = money;
            bar.Mount = mount;
            bar.Hold  = endTickBar.Hold;
            return(bar);
        }
コード例 #4
0
        private KLineBar GetChart(int startTickIndex, int endTickIndex)
        {
            //if (endTickIndex < startTickIndex)
            //    return GetEmptyChart();
            KLineBar chart = new KLineBar();
            float    high  = 0;
            float    low   = float.MaxValue;
            int      mount = 0;
            float    money = 0;

            for (int i = startTickIndex; i <= endTickIndex; i++)
            {
                int   currentMount = tickData.arr_mount[i];
                float price        = tickData.arr_price[i];
                high   = high < price ? price : high;
                low    = low > price ? price : low;
                mount += currentMount;
                //money += currentMount * price;
                currentHold += tickData.arr_add[i];
            }
            chart.Code  = tickData.Code;
            chart.Time  = periods[currentPeriodIndex];
            chart.Start = tickData.arr_price[startTickIndex];
            chart.High  = high;
            chart.Low   = low;
            chart.End   = tickData.arr_price[endTickIndex];
            chart.Mount = mount;
            chart.Money = money;
            chart.Hold  = currentHold;
            return(chart);
        }
コード例 #5
0
        private static KLineBar GetChart_Day(IKLineData data, int startIndex, int endIndex)
        {
            KLineBar chart = GetChart(data, startIndex, endIndex);

            chart.Time = (int)data.Arr_Time[endIndex];
            return(chart);
        }
コード例 #6
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++;
            }
        }
コード例 #7
0
        private void ModifyChart(KLineBar chart, int tickStart, int tickEnd)
        {
            float high  = 0;
            float low   = float.MaxValue;
            int   mount = 0;

            for (int i = tickStart; i <= tickEnd; i++)
            {
                float p = tickData.Arr_Price[i];
                if (high < p)
                {
                    high = p;
                }
                if (low > p)
                {
                    low = p;
                }
                mount += tickData.Arr_Mount[i];
            }

            chart.Code  = tickData.Code;
            chart.Start = tickData.Arr_Price[tickStart];
            chart.End   = tickData.Arr_Price[tickEnd];
            chart.High  = high;
            chart.Low   = low;
            chart.Mount = mount;
            chart.Hold  = tickData.Arr_Hold[tickEnd];
        }
コード例 #8
0
        private static KLineBar GetKLineBar(ITickData tickData, int startIndex, int endIndex)
        {
            KLineBar klineBar = KLineUtils.GetKLineBar(tickData.GetBar(startIndex));

            for (int i = startIndex + 1; i <= endIndex; i++)
            {
                klineBar = KLineUtils.GetKLineBar(klineBar, tickData.GetBar(i));
            }
            return(klineBar);
        }
コード例 #9
0
        private KLineBar CalcCurrentChart_EmptyChart(int currentKLineIndex)
        {
            KLineBar klineBar = new KLineBar();

            klineBar.Time = klineTimes[currentKLineIndex][0];
            float lastPrice = 0;

            if (currentKLineIndex == 0)
            {
                if (lastEndPrice < 0)
                {
                    lastPrice = tickData.Arr_Price[0];
                }
                else
                {
                    lastPrice = lastEndPrice;
                }
            }
            else
            {
                lastPrice = klineData.Arr_End[currentKLineIndex - 1];
            }

            int lastHold = 0;

            if (currentKLineIndex == 0)
            {
                if (lastEndHold < 0)
                {
                    lastHold = tickData.Arr_Hold[0];
                }
                else
                {
                    lastHold = lastEndHold;
                }
            }
            else
            {
                lastHold = klineData.Arr_Hold[currentKLineIndex - 1];
            }

            klineBar.Start = lastPrice;
            klineBar.High  = lastPrice;
            klineBar.Low   = lastPrice;
            klineBar.End   = lastPrice;
            klineBar.Mount = 0;
            klineBar.Money = 0;
            klineBar.Hold  = lastHold;
            return(klineBar);
        }
コード例 #10
0
        private KLineBar GetKLineBar(IKLineBar klineBar, ITickBar tickBar)
        {
            KLineBar bar = new KLineBar();

            bar.Time  = tickBar.Time;
            bar.Start = klineBar.Start;
            bar.High  = tickBar.Price > klineBar.High ? tickBar.Price : klineBar.High;
            bar.Low   = tickBar.Price < klineBar.Low ? tickBar.Price : klineBar.Low;
            bar.End   = tickBar.Price;
            bar.Money = klineBar.Money + tickBar.Mount * tickBar.Price;
            bar.Mount = klineBar.Mount + tickBar.Mount;
            bar.Hold  = tickBar.Hold;
            return(bar);
        }
コード例 #11
0
        private KLineBar GetKLineBar(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;
            return(bar);
        }
コード例 #12
0
ファイル: DataForward_Code_Tick3.cs プロジェクト: wanwei/sc2
        private void ForwardKLine_NextPeriod(IKLineData_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.ChangeCurrentBar(bar);
        }
コード例 #13
0
        public void TestForwardKLineDataToNextDayOpenTime()
        {
            string             code = "m05";
            DataReaderFactory  dataReaderFactory  = ResourceLoader.GetDefaultDataReaderFactory();
            IKLineData         klineData          = dataReaderFactory.KLineDataReader.GetData("m05", 20120104, 20120110, KLinePeriod.KLinePeriod_1Minute);
            KLineData_RealTime realtimeKLineData  = new KLineData_RealTime(klineData);
            ITickData          nextDayTickData    = dataReaderFactory.TickDataReader.GetTickData(code, 20120105);
            KLineBar           tmpCurrentKLineBar = new KLineBar();

            //Console.WriteLine(realtimeKLineData);
            Assert.AreEqual("20120104.09,2936,2938,2933,2935,2508,0,341690", realtimeKLineData.ToString());
            RealTimeDataNavigateUtils.ForwardKLineDataToNextDayOpenTime(realtimeKLineData, 20120105, nextDayTickData, dataReaderFactory, tmpCurrentKLineBar);
            //Console.WriteLine(realtimeKLineData);
            Assert.AreEqual("20120105.085901,2928,2928,2928,2928,6,17568,318690", realtimeKLineData.ToString());
        }
コード例 #14
0
        public void ChangeTime(double time)
        {
            if (currentTime == time)
            {
                return;
            }
            //比如 20150531140500
            //1分钟线可以正常显示
            //日线需要将

            int date = DaySplitter.GetTimeDate(time, dataCache_Code.GetOpenDateReader());

            if (currentDate != date)
            {
                //TODO 将以前生成的klineChartBuilder_1Minute cache下来
                this.currentDataCache_CodeDate = dataCache_Code.GetCache_CodeDate(date);
                this.klineChartBuilder_1Minute = new RealTimeDataBuilder_DayData(currentDataCache_CodeDate, time);
                this.currentDate = date;
            }

            int    index = klineData.IndexOfTime(time);
            double t     = klineData.Arr_Time[index];

            IKLineData todayMinuteKLineData = klineChartBuilder_1Minute.MinuteKlineData;
            KLineBar   currentMinuteChart   = klineChartBuilder_1Minute.GetCurrentChart();

            //TODO 这里最多只支持到日线,两日线或以上不支持
            int startIndex;

            if (t == (int)t)
            {
                startIndex = 0;
            }
            else
            {
                startIndex = todayMinuteKLineData.IndexOfTime(t);
            }
            int endIndex = todayMinuteKLineData.IndexOfTime(currentMinuteChart.Time);

            IKLineBar currentChart = todayMinuteKLineData.GetAggrKLineBar(startIndex, endIndex - 1);

            KLineBarMerge.MergeTo((KLineBar)currentChart, currentMinuteChart);
            this.currentChart = currentChart;
            this.currentTime  = time;
        }
コード例 #15
0
 private static KLineData GetKLineData(List<KLineBar> charts)
 {
     KLineData data = new KLineData(charts.Count);
     data.Code = charts[0].Code;
     for (int i = 0; i < charts.Count; i++)
     {
         KLineBar chart = charts[i];
         data.arr_time[i] = chart.Time;
         data.arr_start[i] = chart.Start;
         data.arr_high[i] = chart.High;
         data.arr_low[i] = chart.Low;
         data.arr_end[i] = chart.End;
         data.arr_mount[i] = chart.Mount;
         data.arr_money[i] = chart.Money;
         data.arr_hold[i] = chart.Hold;
     }
     return data;
 }
コード例 #16
0
        public void TestSetRealTimeData()
        {
            IKLineData data = MockDataLoader.GetKLineData("m1405", 20131202, 20131205, KLinePeriod.KLinePeriod_1Minute);
            //IKLineData data = MockDataLoader_Long.GetKLineData("m1405", 20131202, 20131205, KLinePeriod.KLinePeriod_1Minute);
            KLineData_RealTime data_real = new KLineData_RealTime(data);

            KLineBar chart = new KLineBar(data_real, 15);

            data.BarPos = 15;
            chart.Code  = "m1405";
            chart.Time  = 20131202.091455;
            chart.Start = 3745;
            chart.High  = 3745;
            chart.Low   = 3743;
            chart.End   = 3743;
            chart.Mount = 1600;
            chart.Hold  = 718011;

            data_real.ChangeCurrentBar(chart, 15);
            Assert.AreEqual("20131202.091455,3745,3745,3743,3743,1600,0,718011", chart.ToString());
            Assert.AreEqual(chart.ToString(), data_real.ToString());
            Assert.AreEqual(2, data_real.Height);
            //Console.WriteLine(data_real.HeightPercent);
            Assert.AreEqual(3745, data_real.BlockHigh);
            Assert.AreEqual(3743, data_real.BlockLow);
            Assert.AreEqual(2, data_real.BlockHeight);
            //Console.WriteLine(data_real.BlockHeightPercent);
            //Console.WriteLine(data_real.up);
            //Assert.AreEqual(3745, data_real.Arr_BlockHigh);

            //                list_Height.SetTmpValue(barPos, chart.Height);
            //list_HeightPercent.SetTmpValue(barPos, chart.HeightPercent);
            //list_BlockHigh.SetTmpValue(barPos, chart.BlockHigh);
            //list_BlockLow.SetTmpValue(barPos, chart.BlockLow);
            //list_BlockHeight.SetTmpValue(barPos, chart.BlockHeight);
            //list_BlockHeightPercent.SetTmpValue(barPos, chart.BlockHeightPercent);
            //float upPercent = barPos == 0 ?
            //    (float)NumberUtils.percent(chart.End, chart.Start) :
            //    (float)NumberUtils.percent(chart.End, klineData.Arr_End[barPos - 1]);
            //list_UpPercent.SetTmpValue(barPos, upPercent);

            data_real.ChangeCurrentBar(null, 16);
            Assert.AreEqual("20131202.0915,3354,3354,3352,3353,9202,0,1717708", data_real.ToString(15));
        }
コード例 #17
0
        private void ForwardBar_CurrentPeriod(IKLineData_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.ChangeCurrentBar(bar);
        }
コード例 #18
0
        public static void ChangeTime_KLineData(IKLineData_RealTime klineData_RealTime, int date, double time, ITickData_Extend tickData)
        {
            KLinePeriod klinePeriod = klineData_RealTime.Period;
            int         klineIndex  = IndexOfTime(klineData_RealTime, klinePeriod, time, date);
            //if(tickData.TradingDay !=date)
            //    tickData =
            int tickIndex = TimeIndeierUtils.IndexOfTime_Tick(tickData, time, true);

            if (IsPeriodEnd(klineData_RealTime, klineIndex, tickData, tickIndex))
            {
                klineData_RealTime.BarPos = klineIndex;
                klineData_RealTime.ResetCurrentBar();
                return;
            }
            int      startTickIndex = GetStartTickIndex(klineData_RealTime, tickData, klinePeriod, klineIndex);
            KLineBar klineBar       = GetKLineBar(tickData, startTickIndex, tickIndex);

            klineData_RealTime.ChangeCurrentBar(klineBar, klineIndex);
        }
コード例 #19
0
        private KLineBar GetEmptyChart()
        {
            KLineBar chart = new KLineBar();

            chart.Code = tickData.Code;
            chart.Time = periods[currentPeriodIndex];
            float lastPrice = currentTickIndex == 0 ? yesterdayEndPrice : tickData.arr_price[currentTickIndex - 1];

            if (lastPrice < 0)
            {
                lastPrice = tickData.arr_price[0];
            }
            chart.Start = lastPrice;
            chart.High  = lastPrice;
            chart.Low   = lastPrice;
            chart.End   = lastPrice;
            chart.Mount = 0;
            chart.Hold  = currentHold;
            return(chart);
        }
コード例 #20
0
ファイル: DataForward_Code_Tick2.cs プロジェクト: wanwei/sc2
        private void ForwardKLine(IKLineData_RealTime klineData, bool isBarFinished, bool isBarStart)
        {
            ITickBar tickBar = dataForForward_Code.CurrentTickData;

            if (isBarFinished)
            {
                klineData.ResetCurrentBar();
            }
            else if (isBarStart)
            {
                KLineBar klineBar = KLineUtils.GetKLineBar(tickBar);
                klineData.ChangeCurrentBar(klineBar, klineData.BarPos + 1);
            }
            else
            {
                KLineBar klineBar = KLineUtils.GetKLineBar(klineData, tickBar);
                klineData.ChangeCurrentBar(klineBar);
            }
            dic_KLinePeriod_IsEnd[klineData.Period] = isBarFinished;
        }
コード例 #21
0
ファイル: DataNavigate_Code_KLine.cs プロジェクト: wanwei/sc2
        private KLineData_RealTime GetKLineData_RealTime(IKLineData klineData, ITickData tickData, double time)
        {
            KLineData_RealTime klineData_RealTime = new KLineData_RealTime(klineData);
            int    klineIndex = IndexOfTime(klineData_RealTime, klinePeriod, time, date);
            int    tickIndex  = TimeIndeierUtils.IndexOfTime_Tick(tickData, time, true);
            double klineTime  = klineData_RealTime.Arr_Time[klineIndex];
            int    startTickIndex;

            if (klinePeriod.PeriodType == KLineTimeType.DAY)
            {
                startTickIndex = 0;
            }
            else
            {
                startTickIndex = TimeIndeierUtils.IndexOfTime_Tick(tickData, klineTime);
            }
            KLineBar klineBar = GetKLineBar(tickData, startTickIndex, tickIndex);

            klineData_RealTime.ChangeCurrentBar(klineBar, klineIndex);
            return(klineData_RealTime);
        }