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; } } } }
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); }
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); } } }