private void DataForward_OnTick(object sender, IForwardOnTickArgument argument) { double time = argument.Time; //if (time < 20170601.205900) // return; int tradingDay = argument.TickInfo.TickData.TradingDay; if (prevTime == time) { return; } this.prevTime = time; ITickData_Extend tickData = GetTickData(tradingDay); //Console.WriteLine(tickData); RealTimeDataPackageTimeChangeUtils.ChangeTime_TickData(tickData, time); Assert.AreEqual(argument.TickInfo.TickBar.ToString(), tickData.ToString()); IRealTimeDataReader_Code realTimeData = ((IRealTimeDataReader_Code)sender); RealTimeDataPackageTimeChangeUtils.ChangeTime_KLineData(klineData_1Minute, tradingDay, time, tickData); Assert.AreEqual(realTimeData.GetKLineData(KLinePeriod.KLinePeriod_1Minute).ToString(), klineData_1Minute.ToString()); RealTimeDataPackageTimeChangeUtils.ChangeTime_KLineData(klineData_5Minute, tradingDay, time, tickData); Assert.AreEqual(realTimeData.GetKLineData(KLinePeriod.KLinePeriod_5Minute).ToString(), klineData_5Minute.ToString()); RealTimeDataPackageTimeChangeUtils.ChangeTime_KLineData(klineData_15Minute, tradingDay, time, tickData); Assert.AreEqual(realTimeData.GetKLineData(KLinePeriod.KLinePeriod_15Minute).ToString(), klineData_15Minute.ToString()); RealTimeDataPackageTimeChangeUtils.ChangeTime_KLineData(klineData_1Day, tradingDay, time, tickData); Assert.AreEqual(realTimeData.GetKLineData(KLinePeriod.KLinePeriod_1Day).ToString(), klineData_1Day.ToString()); ITimeLineData_RealTime timeLineData = GetTimeLineData(tradingDay); RealTimeDataPackageTimeChangeUtils.ChangeTime_TimeLineData(timeLineData, time, tickData); Assert.AreEqual(realTimeData.GetTimeLineData().ToString(), timeLineData.ToString()); }
public StrategyOnBarArgument(IRealTimeDataReader_Code realTimeDataReader_Code, List <IForwardKLineBarInfo> onBarInfos) : base(realTimeDataReader_Code) { this.onBarInfos = onBarInfos; for (int i = 0; i < onBarInfos.Count; i++) { IForwardKLineBarInfo bar = onBarInfos[i]; this.dic_Period_Bar.Add(bar.KLinePeriod, bar); } }
/** * 综合算法: * 1.找到疑似的高点低点 * 2. */ private void initTurnPoint(IRealTimeDataReader_Code currentData) { IKLineData klineData = currentData.GetKLineData(klinePeriod); int barPos = klineData.BarPos; IList <float> arr_HighPrice = klineData.Arr_High; IList <float> arr_LowPrice = klineData.Arr_Low; int zzLen = ZZLen; int hlLen = HLLen; /** * 条件: * 1.向前第二个chart是最近9个chart里最低点 * 2.该点和该点之前的点都高于之前的低点 */ float refLow = GetRefData(arr_LowPrice, barPos, zzLen); bool con_dd = refLow == MathUtils.Lowest(arr_LowPrice, barPos, hlLen) && MathUtils.GetPreviousData(arr_LowPrice, barPos, 1) > refLow && arr_LowPrice[barPos] > refLow; float refHigh = MathUtils.GetPreviousData(arr_HighPrice, barPos, zzLen); bool con_gd = refHigh == MathUtils.Highest(arr_HighPrice, barPos, hlLen) && MathUtils.GetPreviousData(arr_HighPrice, barPos, 1) < refHigh && arr_HighPrice[barPos] < refHigh; if (!(con_gd || con_dd)) { return; } int lastType = getLastPointType(barPos); int pointPos = barPos - zzLen; //发生在chart刚开始,之前还没有低点高点 if (lastType == 0) { if (con_gd) { addRealGd(arr_HighPrice, pointPos); } else { addRealDd(arr_LowPrice, pointPos); } } //上一个是高点 else if (lastType == 1) { //又找到一个新高点 if (con_gd) { float currentHighPrice = arr_HighPrice[pointPos]; float lastHighPrice = MathUtils.GetPreviousData(Arr_RealGD, barPos, 0); if (currentHighPrice > lastHighPrice) { Arr_PosRealGD.RemoveAt(Arr_PosRealGD.Count - 1); Arr_RealGD.RemoveAt(Arr_RealGD.Count - 1); addRealGd(arr_HighPrice, pointPos); } } else if (con_dd) { addRealDd(arr_LowPrice, pointPos); } } else { if (con_dd) { float currentLowPrice = arr_LowPrice[pointPos]; float lastLowPrice = MathUtils.GetPreviousData(Arr_RealDD, barPos, 0); if (currentLowPrice < lastLowPrice) { Arr_PosRealDD.RemoveAt(Arr_PosRealDD.Count - 1); Arr_RealDD.RemoveAt(Arr_RealDD.Count - 1); addRealDd(arr_HighPrice, pointPos); } } else if (con_gd) { addRealGd(arr_HighPrice, pointPos); } } addPosPoint(zzLen, barPos, con_dd, con_gd); }
public StrategyOnTickArgument(IRealTimeDataReader_Code realTimeDataReader_Code) : base(realTimeDataReader_Code) { }