Beispiel #1
0
        private void ForwardKLineData(IKLineData_RealTime klineData)
        {
            IKLineBar nextMainBar   = mainKLineData.GetBar(mainKLineData.BarPos + 1);
            int       currentBarPos = klineData.BarPos;
            int       nextBarPos    = currentBarPos + 1;

            if (nextBarPos >= klineData.Length)
            {
                ForwardBar_CurrentPeriod(klineData, nextMainBar);
            }
            else
            {
                double nextTime     = klineData.Arr_Time[nextBarPos];
                double nextMainTime = mainKLineData.Arr_Time[mainKLineData.BarPos + 1];
                if (nextMainTime >= nextTime)
                {
                    ForwardBar_NextPeriod(klineData, nextMainBar);
                }
                else
                {
                    ForwardBar_CurrentPeriod(klineData, nextMainBar);
                }

                /*
                 * 20171021 ww
                 * 处理回测时非主K线要onbar时时间不对,如下5分钟线
                 *
                 * 1分钟:20170531.21,3102,3106,3095,3101,135598,0,3992164
                 * 1分钟:20170531.2101,3102,3103,3096,3096,58762,0,4008012
                 * 1分钟:20170531.2102,3095,3102,3094,3100,35524,0,4013054
                 * 1分钟:20170531.2103,3101,3101,3093,3094,35276,0,4023900
                 * 1分钟:20170531.2104,3094,3102,3094,3101,34660,0,4029194
                 * 5分钟:20170531.2104,3102,3106,3093,3101,299820,0,402919
                 *
                 * 正确5分钟线
                 * 5分钟:20170531.21,3102,3106,3093,3101,299820,0,4029194
                 */
                if (klineData.Period.Equals(KLinePeriod.KLinePeriod_1Day))
                {
                    if (mainKLineData.IsDayEnd(mainKLineData.BarPos + 1))
                    {
                        klineData.ResetCurrentBar();
                    }
                }
                else if (mainKLineData.BarPos < mainKLineData.Length - 2)
                {
                    double nextMainTime2 = mainKLineData.Arr_Time[mainKLineData.BarPos + 2];
                    if (nextMainTime2 >= nextTime)
                    {
                        klineData.ResetCurrentBar();
                        return;
                    }
                }
            }
        }
Beispiel #2
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);
        }
Beispiel #3
0
        private void ForwardKLineData(IKLineData_RealTime klineData)
        {
            IKLineBar nextMainBar   = mainKLineData.GetBar(mainKLineData.BarPos + 1);
            int       currentBarPos = klineData.BarPos;
            int       nextBarPos    = currentBarPos + 1;

            if (nextBarPos >= klineData.Length)
            {
                ForwardBar_CurrentPeriod(klineData, nextMainBar);
            }
            else
            {
                double nextTime     = klineData.Arr_Time[nextBarPos];
                double nextMainTime = mainKLineData.Arr_Time[mainKLineData.BarPos + 1];
                if (nextMainTime >= nextTime)
                {
                    ForwardBar_NextPeriod(klineData, nextMainBar);
                }
                else
                {
                    ForwardBar_CurrentPeriod(klineData, nextMainBar);
                }
            }
        }