Beispiel #1
0
        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());
        }
Beispiel #2
0
 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);
     }
 }
Beispiel #3
0
        /**
         * 综合算法:
         * 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);
        }
Beispiel #4
0
 public StrategyOnTickArgument(IRealTimeDataReader_Code realTimeDataReader_Code) : base(realTimeDataReader_Code)
 {
 }