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; }
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); }
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); }
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); }
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); }
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++; } }
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]; }
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); }
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); }
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); }
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); }
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); }
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()); }
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; }
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; }
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)); }
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); }
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); }
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); }
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; }
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); }