protected override void OnBarUpdate() { DateTime dtBegin = DateTime.MaxValue; switch (IntervalType) { case EnumIntervalType.Sec: dtBegin = MinBar.D.Date.AddHours(MinBar.D.Hour).AddMinutes(MinBar.D.Minute).AddSeconds(MinBar.D.Second / Interval * Interval); break; case EnumIntervalType.Min: dtBegin = MinBar.D.Date.AddHours(MinBar.D.Hour).AddMinutes(MinBar.D.Minute / Interval * Interval); break; case EnumIntervalType.Hour: dtBegin = MinBar.D.Date.AddHours(MinBar.D.Hour / Interval * Interval); break; case EnumIntervalType.Day: dtBegin = DateTime.ParseExact(MinBar.TradingDay.ToString(), "yyyyMMdd", null); break; case EnumIntervalType.Week: dtBegin = DateTime.ParseExact(MinBar.TradingDay.ToString(), "yyyyMMdd", null); dtBegin = dtBegin.Date.AddDays(1 - (byte)dtBegin.DayOfWeek); break; case EnumIntervalType.Month: dtBegin = DateTime.ParseExact(MinBar.TradingDay.ToString(), "yyyyMMdd", null); dtBegin = new DateTime(dtBegin.Year, dtBegin.Month, 1); break; case EnumIntervalType.Year: dtBegin = DateTime.ParseExact(MinBar.TradingDay.ToString(), "yyyyMMdd", null); dtBegin = new DateTime(dtBegin.Year, 1, 1); break; default: throw new Exception("参数错误"); } if (bar == null) //首次调用 { bar = new Bar { D = dtBegin, I = MinBar.I, V = MinBar.V, // kOld.preVol == 0 ? 0 : _tick.Volume - kOld.preVol; }; bar.H = MinBar.H; bar.L = MinBar.L; bar.O = MinBar.O; bar.C = MinBar.C; newbar = true; } else { if (bar.D == dtBegin) //在当前K线范围内 { newbar = false; bar.H = Math.Max(bar.H, MinBar.H); bar.L = Math.Min(bar.L, MinBar.L); bar.C = MinBar.C; bar.V = bar.V + MinBar.V; bar.I = MinBar.I; } else if (dtBegin > bar.D) { newbar = true; bar.D = dtBegin; bar.V = MinBar.V; bar.I = MinBar.I; bar.O = MinBar.O; bar.H = MinBar.H; bar.L = MinBar.L; bar.C = MinBar.C; } } if (newbar) { Date.Add(double.Parse(bar.D.ToString("yyyyMMdd"))); Time.Add(double.Parse(bar.D.ToString("0.HHmmss"))); Open.Add(bar.O); High.Add(bar.H); Low.Add(bar.L); Close.Add(bar.C); Volume.Add(bar.V); OpenInterest.Add(bar.I); } else { High[0] = bar.H; Low[0] = bar.L; Close[0] = bar.C; Volume[0] = bar.V; OpenInterest[0] = bar.I; } }