private void AssertForwardData(string code, int start, int end, List <string> list_OnBar) { IDataPackage_Code dataPackage = DataCenter.Default.DataPackageFactory.CreateDataPackage_Code(code, start, end, 0, 0); List <KLinePeriod> usedKLinePeriods = new List <KLinePeriod>(); usedKLinePeriods.Add(KLinePeriod.KLinePeriod_1Minute); usedKLinePeriods.Add(KLinePeriod.KLinePeriod_5Minute); usedKLinePeriods.Add(KLinePeriod.KLinePeriod_15Minute); usedKLinePeriods.Add(KLinePeriod.KLinePeriod_1Hour); usedKLinePeriods.Add(KLinePeriod.KLinePeriod_1Day); ForwardReferedPeriods referedPeriods = new ForwardReferedPeriods(usedKLinePeriods, true, true); DataForForward_Code dataForForward = new DataForForward_Code(dataPackage, referedPeriods); List <int> tradingDays = dataForForward.TradingDayReader.GetAllTradingDays(); dataForForward.TradingDay = tradingDays[0]; ForwardDataIndeier indeier = new ForwardDataIndeier(dataForForward); IKLineData_Extend klineData = dataForForward.MainKLine; int currentBarPos = klineData.BarPos; for (int i = 0; i < tradingDays.Count; i++) { int tradingDay = tradingDays[i]; dataForForward.TradingDay = tradingDay; currentBarPos = Forward(dataForForward, indeier, tradingDay, currentBarPos, list_OnBar); } }
private void AssertText(string code, int start, int end, string fileName) { List <string> list_OnBar = new List <string>(); IDataPackage_Code datapackage = DataCenter.Default.DataPackageFactory.CreateDataPackage_Code(code, start, end, 0, 0); IKLineData_Extend klineData = datapackage.GetKLineData(KLinePeriod.KLinePeriod_1Minute); ITickData tickData = datapackage.GetTickData(start); KLineToTickIndeier indeier = new KLineToTickIndeier(tickData, klineData); int lastBarPos; for (int i = 0; i < tickData.Length; i++) { list_OnBar.Add("tick:" + tickData.GetBar(i)); Console.WriteLine("tick:" + tickData.GetBar(i)); int pos = indeier.GetKLineBarPosIfFinished(i, out lastBarPos); if (pos >= 0) { list_OnBar.Add(klineData.Period + ":" + klineData.GetBar(pos)); Console.WriteLine(klineData.Period + ":" + klineData.GetBar(pos)); for (int m = pos + 1; m <= lastBarPos; m++) { list_OnBar.Add(klineData.Period + ":" + klineData.GetBar(m)); Console.WriteLine(klineData.Period + ":" + klineData.GetBar(m)); //lastBarPos = 1; } } } AssertUtils.AssertEqual_List(fileName, GetType(), list_OnBar); }
private int Forward(DataForForward_Code dataForForward, ForwardDataIndeier indeier, int tradingDay, int klineIndex, List <string> list_OnBar) { IKLineData_Extend klineData = dataForForward.GetMainKLineData(); ITickData_Extend tickData = dataForForward.CurrentTickData; int lastMainKLineBarPos; int mainBarPos = 0; KLinePeriod mainPeriod = dataForForward.MainKLinePeriod; for (int i = 0; i < tickData.Length; i++) { tickData.BarPos = i; Console.WriteLine("tick:" + tickData); list_OnBar.Add("tick:" + tickData); mainBarPos = indeier.GetMainKLineBarPosIfFinished(i, out lastMainKLineBarPos); if (mainBarPos < 0) { continue; } PrintData(dataForForward, indeier, klineData, mainBarPos, mainPeriod, list_OnBar); if (lastMainKLineBarPos >= 0 && lastMainKLineBarPos != mainBarPos) { for (int m = mainBarPos + 1; m <= lastMainKLineBarPos; m++) { PrintData(dataForForward, indeier, klineData, m, mainPeriod, list_OnBar); } } } return(mainBarPos); }
private void DealEvent_OnBar() { if (isDayStart) { return; } if (OnBar != null && forwardPeriod.KlineForwardPeriod != null) { bool isForwardPeriodEnd = dic_KLinePeriod_IsEnd[forwardPeriod.KlineForwardPeriod]; if (isForwardPeriodEnd) { barFinishedInfos.Clear(); for (int i = 0; i < forwardData.ReferedKLinePeriods.Count; i++) { KLinePeriod period = forwardData.ReferedKLinePeriods[i]; bool isPeriodEnd = dic_KLinePeriod_IsEnd[period]; if (isPeriodEnd) { IKLineData_Extend klineData = forwardData.GetKLineData(period); int barPos = klineData.BarPos - 1; if (IsDayEnd) { barPos++; } barFinishedInfos.Add(new ForwardOnbar_Info(klineData, barPos)); } } //OnBar(this, mainKlineData, mainKlineData.BarPos); OnBar(this, onBarArgument); } } }
private void RealTimeReader_OnBar(object sender, IForwardOnBarArgument argument) { OnBar_ReferedStrategies(this.Strategy, argument); IKLineData_Extend mainKLineData = argument.MainBar.KLineData; if (this.strategyExecutorInfo != null) { this.strategyExecutorInfo.CurrentKLineData = mainKLineData; } if (HasBarFinishedEvent()) { if (tempBarFinishedArguments == null) { tempBarFinishedArguments = new StrategyBarFinishedArguments(this.strategyExecutorInfo); } DealBarFinishEvent(tempBarFinishedArguments); } if (HasDayFinishedEvent() && mainKLineData.IsDayEnd()) { if (tempDayFinishedArguments == null) { tempDayFinishedArguments = new StrategyDayFinishedArguments(this.strategyExecutorInfo); } DealDayFinishEvent(tempDayFinishedArguments); } this.strategyExecutorInfo.CurrentKLineData = mainKLineData; this.strategyExecutorInfo.CurrentDay = mainKLineData.GetTradingTime().TradingDay; if (mainKLineData.IsDayStart()) { this.strategyExecutorInfo.CurrentDayIndex++; //this.strategyExecutorInfo.CurrentDay = mainKLineData.GetTradingTime().TradingDay; } }
private void IndexKLineData(int mainIndex, double time) { foreach (KLinePeriod period in data.ReferedKLinePeriods) { if (period.Equals(data.MainKLinePeriod)) { continue; } if (period.PeriodType >= KLineTimeType.DAY) { if (period.Period == 1) { IKLineData_Extend mainKlineData = data.GetMainKLineData(); //if (mainKlineData.IsDayEnd(mainIndex)) if (mainKlineData.IsDayStart(mainIndex)) { int currentDayIndex = GetCurrentIndex(period); AddOnBarData(mainIndex - 1, period, currentDayIndex); dic_Period_CurrentIndex[period] = currentDayIndex + 1; } } continue; } IKLineData_RealTime klineData = data.GetKLineData(period); int barIndex = FindBarIndex(klineData, time, GetCurrentIndex(period)); if (barIndex >= klineData.BarPos) { int endBarMainKLineIndex = mainIndex - 1; AddOnBarData(endBarMainKLineIndex, period, barIndex); dic_Period_CurrentIndex[period] = barIndex; } } }
public StrategyDrawer(IDataPackage_Code dataPackage, StrategyReferedPeriods referPeriods) { this.dataPackage = dataPackage; foreach (KLinePeriod period in referPeriods.UsedKLinePeriods) { IKLineData_Extend klineData = dataPackage.GetKLineData(period); dic_KLinePeriod_Start.Add(period, klineData.BarPos); dic_KLinePeriod_DataKey.Add(period, new KLineKey(dataPackage.Code, dataPackage.StartDate, dataPackage.EndDate, period)); } }
/// <summary> /// 得到指定周期的K线 /// </summary> /// <param name="period"></param> /// <returns></returns> public IKLineData_Extend GetKLineData(KLinePeriod period) { if (dic_Period_KLineData.ContainsKey(period)) { return(dic_Period_KLineData[period]); } IKLineData_Extend klineData = dataReader.KLineDataReader.GetData_Extend(code, startDate, endDate, minBefore, minAfter, period); dic_Period_KLineData.Add(period, klineData); return(klineData); }
public void TestGetKLineExtend_Second() { IDataReader dataReader = DataCenter.Default.DataReader; IKLineData_Extend klineData = dataReader.KLineDataReader.GetData_Extend("rb1801", 20170801, KLinePeriod.KLinePeriod_5Second); //AssertUtils.PrintKLineData(klineData); AssertUtils.AssertEqual_KLineData("KLineData_RB1801_20170801_5Second", GetType(), klineData); klineData = dataReader.KLineDataReader.GetData_Extend("rb1801", 20170801, KLinePeriod.KLinePeriod_15Second); //AssertUtils.PrintKLineData(klineData); AssertUtils.AssertEqual_KLineData("KLineData_RB1801_20170801_15Second", GetType(), klineData); }
private static double GetEndTime(IKLineData_Extend klineData, int barPos) { if (klineData.Period.PeriodType >= KLineTimeType.DAY) { return(klineData.Time); } double endTime = klineData.GetKLinePeriodEndTime(barPos); if (barPos < klineData.Length - 1 && klineData.IsTradingPeriodEnd(barPos)) { endTime = (endTime + klineData.Arr_Time[barPos + 1]) / 2; } return(endTime); }
private void ForwardCurrentBar() { IKLineData_Extend mainKLineData = this.dataForForward.GetMainKLineData(); ITickBar tickBar = dataForForward.CurrentTickData.GetCurrentBar(); ForwardCurrentBar(mainKLineData, tickBar); foreach (KLinePeriod period in dataForForward.ReferedKLinePeriods) { if (dataForForward.MainKLinePeriod.Equals(period)) { continue; } ForwardCurrentBar(dataForForward.GetKLineData(period), tickBar); } }
private void Index() { IKLineData_RealTime mainKLineData = data.GetMainKLineData(); IKLineData_Extend klineData = mainKLineData.GetKLineData_Original(); for (int i = klineData.BarPos + 1; i < klineData.Length; i++) { if (i == klineData.Length - 1) { IndexEndBarPos(); continue; } double time = klineData.Arr_Time[i]; IndexKLineData(i, time); } }
public IKLineData_Extend GetKLineData_Second(int date, KLinePeriod period) { if (dic_Period_SecondKLineData.ContainsKey(period)) { KLineDataSecond klineData = dic_Period_SecondKLineData[period]; if (date == klineData.Date) { return(klineData.KlineData); } } IKLineData_Extend klineData_Extend = dataReader.KLineDataReader.GetData_Extend(code, date, period); KLineDataSecond klineDataSecond = new KLineDataSecond(); klineDataSecond.Date = date; klineDataSecond.KlineData = klineData_Extend; dic_Period_SecondKLineData[period] = klineDataSecond; return(klineData_Extend); }
public void TestTimeLineToKLine() { string code = "RB1710"; int start = 20170601; int end = 20170605; IDataPackage_Code datapackage = DataCenter.Default.DataPackageFactory.CreateDataPackage_Code(code, start, end, 0, 0); IKLineData_Extend klineData = datapackage.GetKLineData(KLinePeriod.KLinePeriod_1Minute); //IKLineData_Extend klineData = datapackage.GetKLineData(KLinePeriod.KLinePeriod_5Minute); IList <int> tradingDays = datapackage.GetTradingDays(); ITimeLineData timeLineData = datapackage.GetTimeLineData(tradingDays[0]); TimeLineToKLineIndeier indeier = new TimeLineToKLineIndeier(klineData, timeLineData); int tradingDayIndex = 0; bool isFirst = true; for (int i = klineData.BarPos; i < klineData.Length; i++) { if (!isFirst && klineData.IsDayStart(i)) { tradingDayIndex++; if (tradingDayIndex >= tradingDays.Count) { return; } timeLineData = datapackage.GetTimeLineData(tradingDays[tradingDayIndex]); indeier.ChangeTradingDay(timeLineData); } isFirst = false; klineData.BarPos = i; Console.WriteLine(klineData.Period + ":" + klineData.GetBar(i)); int barPos = indeier.GetTimeLineBarPosIfFinished(i); if (barPos >= 0) { timeLineData.BarPos = barPos; Console.WriteLine("分时线:" + timeLineData.GetBar(barPos)); } Assert.AreEqual(klineData.Time, timeLineData.Time); Assert.AreEqual(klineData.End, timeLineData.Price); } }
private static void DoIndex(List <string> list_OnBar, IKLineData_Extend klineData, ITickData tickData, KLineToTickIndeier indeier) { int lastBarPos; for (int i = 0; i < tickData.Length; i++) { list_OnBar.Add("tick:" + tickData.GetBar(i)); Console.WriteLine("tick:" + tickData.GetBar(i)); int pos = indeier.GetKLineBarPosIfFinished(i, out lastBarPos); if (pos >= 0) { list_OnBar.Add(klineData.Period + ":" + klineData.GetBar(pos)); Console.WriteLine(klineData.Period + ":" + klineData.GetBar(pos)); for (int m = pos + 1; m <= lastBarPos; m++) { list_OnBar.Add(klineData.Period + ":" + klineData.GetBar(m)); Console.WriteLine(klineData.Period + ":" + klineData.GetBar(m)); } } } }
private void DealEvent_OnBar() { if (OnBar != null && forwardPeriod.KlineForwardPeriod != null) { bool isForwardPeriodEnd = IsPeriodEnd(forwardPeriod.KlineForwardPeriod); if (isForwardPeriodEnd) { barFinishedInfos.Clear(); for (int i = 0; i < dataForForward_Code.ReferedKLinePeriods.Count; i++) { KLinePeriod period = dataForForward_Code.ReferedKLinePeriods[i]; bool isPeriodEnd = IsPeriodEnd(period); if (isPeriodEnd) { IKLineData_Extend klineData = dataForForward_Code.GetKLineData(period); barFinishedInfos.Add(new ForwardOnbar_Info(klineData, klineData.BarPos)); } } OnBar(this, onBarArgument); } } }
private void AssertKLineToKLine(string code, int start, int end, List <string> list_OnBar) { IDataPackage_Code datapackage = DataCenter.Default.DataPackageFactory.CreateDataPackage_Code(code, start, end); IKLineData_Extend mainKLine = datapackage.GetKLineData(KLinePeriod.KLinePeriod_1Minute); IList <IKLineData_Extend> indexKLines = new List <IKLineData_Extend>(); indexKLines.Add(datapackage.GetKLineData(KLinePeriod.KLinePeriod_5Minute)); indexKLines.Add(datapackage.GetKLineData(KLinePeriod.KLinePeriod_15Minute)); indexKLines.Add(datapackage.GetKLineData(KLinePeriod.KLinePeriod_1Hour)); indexKLines.Add(datapackage.GetKLineData(KLinePeriod.KLinePeriod_1Day)); KLineToKLineIndeier indeier = new KLineToKLineIndeier(mainKLine, indexKLines); int startMainPos = mainKLine.BarPos; int endMainPos = mainKLine.Length - 1; for (int i = startMainPos; i <= endMainPos; i++) { Console.WriteLine(mainKLine.Period + ":" + mainKLine.GetBar(i)); list_OnBar.Add(mainKLine.Period + ":" + mainKLine.GetBar(i)); PrintKLines(i, indeier, indexKLines, list_OnBar); } }
public void TestKLineDataExtendDayStart() { string code = "RB1710"; int start = 20170601; int end = 20170603; IKLineData_Extend klineData = DataCenter.Default.DataReader.KLineDataReader.GetData_Extend(code, start, end, KLinePeriod.KLinePeriod_1Minute); int barPos = klineData.BarPos; for (int i = 0; i < klineData.Length; i++) { Console.WriteLine(i + ":" + klineData.GetBar(i).ToString()); } Assert.IsTrue(klineData.IsDayStart()); klineData.BarPos += 1; Assert.IsFalse(klineData.IsDayStart()); Assert.IsFalse(klineData.IsDayStart(barPos + 1)); Assert.IsFalse(klineData.IsDayEnd(12)); Assert.IsTrue(klineData.IsDayEnd(344)); Assert.IsTrue(klineData.IsDayStart(345)); }
public void TestExecuteStrategy_MA() { string code = "rb1710"; int start = 20170601; int end = 20170603; IStrategyExecutor_Single executor = StrategyTestUtils.CreateExecutor_CodePeriod(code, start, end); MockStrategy_Ma strategy = new MockStrategy_Ma(); executor.Strategy = strategy; executor.Run(); List <float> floats = strategy.MAList; IDataPackage_Code dataPackage = DataCenter.Default.DataPackageFactory.CreateDataPackage_Code(code, start, end); IKLineData_Extend klineData = dataPackage.GetKLineData(KLinePeriod.KLinePeriod_1Minute); List <float> floats2 = KLineDataUtils.MaList(klineData, klineData.BarPos, klineData.Length - 1, 5); for (int i = 0; i < floats.Count; i++) { Console.WriteLine(floats[i] + "," + floats2[i]); } AssertUtils.AssertEqual_List(floats2, floats); }
public void TestKLineToTick_Days() { string code = "RB1710"; int start = 20170601; int end = 20170605; List <string> list_OnBar = new List <string>(); IDataPackage_Code datapackage = DataCenter.Default.DataPackageFactory.CreateDataPackage_Code(code, start, end, 0, 0); IKLineData_Extend klineData = datapackage.GetKLineData(KLinePeriod.KLinePeriod_1Minute); IList <int> tradingDays = datapackage.GetTradingDays(); ITickData tickData = datapackage.GetTickData(tradingDays[0]); KLineToTickIndeier indeier = new KLineToTickIndeier(tickData, klineData); DoIndex(list_OnBar, klineData, tickData, indeier); for (int i = 1; i < tradingDays.Count; i++) { tickData = datapackage.GetTickData(tradingDays[i]); indeier.ChangeTradingDay(tickData); DoIndex(list_OnBar, klineData, tickData, indeier); } }
public IKLineData_RealTime CreateKLineData_RealTime_Second(int date, KLinePeriod period) { IKLineData_Extend klineData = GetKLineData_Second(date, period); return(new KLineDataExtend_RealTime(klineData)); }
public ForwardOnbar_Info(IKLineData_Extend klineData, int finishedBarPos) { this.klineData = klineData; this.finishedBarPos = finishedBarPos; }
public StrategyOnBarInfo(IKLineData_Extend klineData, int finishedBarPos) : base(klineData, finishedBarPos) { }
public void ChangeTradingDay(ITickData tickData, IKLineData_Extend klineData) { this.tickData = tickData; this.klineData = klineData; Index(); }
public KLineToTickIndeier(ITickData tickData, IKLineData_Extend klineData) { this.tickData = tickData; this.klineData = klineData; Index(); }
public KLineToKLineIndeier(IKLineData_Extend mainKLine, IList <IKLineData_Extend> indexKLines) { this.mainKLine = mainKLine; this.indexKLines = indexKLines; this.Index(); }
public IKLineData_RealTime CreateKLineData_RealTime(KLinePeriod period) { IKLineData_Extend klineData = GetKLineData(period); return(new KLineDataExtend_RealTime(klineData)); }
private void ForwardNextBar(IKLineData_Extend mainKLineData) { }
public KLineDataExtend_RealTime(IKLineData_Extend klineData) : base(klineData) { //this.klineData_Extend = klineData; }
private static void PrintData(DataForForward_Code dataForForward, ForwardDataIndeier indeier, IKLineData_Extend klineData, int mainBarPos, KLinePeriod mainPeriod, List <string> list_OnBar) { Console.WriteLine(klineData.Period + ":" + klineData.GetBar(mainBarPos)); list_OnBar.Add(klineData.Period + ":" + klineData.GetBar(mainBarPos)); for (int m = 0; m < dataForForward.ReferedKLinePeriods.Count; m++) { KLinePeriod period = dataForForward.ReferedKLinePeriods[m]; if (mainPeriod.Equals(period)) { continue; } int barPos = indeier.GetOtherKLineBarPosIfFinished(mainBarPos, period); if (barPos >= 0) { IKLineData otherKLine = dataForForward.GetKLineData(period); Console.WriteLine(period + ":" + otherKLine.GetBar(barPos)); list_OnBar.Add(period + ":" + otherKLine.GetBar(barPos)); } } Console.WriteLine("分时线:" + dataForForward.CurrentTimeLineData.GetBar(mainBarPos)); list_OnBar.Add("分时线:" + dataForForward.CurrentTimeLineData.GetBar(mainBarPos)); }