Exemplo n.º 1
0
		public virtual BarSeries Compress(long newBarSize, TimeSpan sessionStart, TimeSpan sessionEnd, BarSlycing mode, bool weeklySlicingEnabled, bool clubWithPrevBar)
		{
			BarSeries barSeries = this.GetType().GetConstructor(new Type[0]).Invoke(new object[0]) as BarSeries;
			if (this.Count <= 0)
				return barSeries;
			long size = this[0].Size;
			if (newBarSize < size)
				throw new ArgumentException("newBarSize < size");
			if (sessionStart >= sessionEnd)
				throw new ArgumentException("sessionStart >= sessionEnd");
			long result;
			Math.DivRem(newBarSize, size, out result);
//      if (result != 0L)
//        throw new ArgumentException(oK6F3TB73XXXGhdieP.wF6SgrNUO(12074));
			if (newBarSize == size)
				return this;
			double num1 = 0.0;
			double num2 = 0.0;
			double open = 0.0;
			double close = 0.0;
			long volume = 0L;
			long num3 = 0L;
			bool flag1 = true;
			DateTime datetime = this[0].DateTime.Date.Add(sessionStart);
			DateTime index1 = DateTime.MaxValue;
			long ticks1 = (sessionEnd - sessionStart).Ticks;
			int num4 = 0;
			bool flag2 = false;
			while (flag1)
			{
				if (flag2)
				{
					datetime = index1.AddDays(2.0).Date.Add(sessionStart);
					flag2 = false;
				}
				index1 = datetime.AddSeconds((double)newBarSize);
				DateTime dateTime = datetime.Date.Add(sessionEnd);
				if (index1 > dateTime)
				{
					long ticks2 = (index1 - dateTime).Ticks;
					index1 = datetime.Date.AddDays(1.0).Add(sessionStart);
					if (mode == BarSlycing.Equally)
					{
						index1 = index1.AddDays((double)(ticks2 / ticks1));
						index1 = index1.AddTicks(ticks2 % ticks1);
					}
					if (this.LastDateTime > index1)
					{
						DateTime date = this[index1, EIndexOption.Next].DateTime.Date;
						while (index1 < date && (index1.DayOfWeek != DayOfWeek.Saturday || !weeklySlicingEnabled))
							index1 = index1.AddDays(1.0);
						if (index1.DayOfWeek == DayOfWeek.Saturday && weeklySlicingEnabled)
							flag2 = true;
					}
				}
				int index2 = this.GetIndex(index1.AddTicks(-1L), EIndexOption.Prev);
				Bar bar1 = (Bar)null;
				for (int index3 = num4; index3 <= index2; ++index3)
				{
					bar1 = this[index3];
					if (index3 == num4)
					{
						num1 = bar1.High;
						num2 = bar1.Low;
						open = bar1.Open;
						close = bar1.Close;
						volume = bar1.Volume;
						num3 = bar1.OpenInt;
					}
					else
					{
						num1 = Math.Max(num1, bar1.High);
						num2 = Math.Min(num2, bar1.Low);
						close = bar1.Close;
						volume += bar1.Volume;
						num3 += bar1.OpenInt;
					}
				}
				if (bar1 != null)
				{
					Bar bar2 = new Bar(datetime, open, num1, num2, close, volume, newBarSize);
					bar2.EndTime = !flag2 ? index1 : index1.Date.AddDays(-1.0).Add(sessionEnd);
					if (mode == BarSlycing.Normal && index1 > dateTime)
						bar2.EndTime = dateTime;
					bar2.OpenInt = num3;
					if (flag2 && clubWithPrevBar && (bar2.Duration.TotalSeconds * 2.0 < (double)newBarSize && barSeries.Count > 0))
					{
						Bar last = barSeries.Last;
						bar2.Open = last.Open;
						bar2.High = Math.Max(bar2.High, last.High);
						bar2.Low = Math.Min(bar2.Low, last.Low);
						bar2.Volume += last.Volume;
						bar2.OpenInt += last.OpenInt;
						bar2.DateTime = last.BeginTime;
					}
					barSeries.Add(bar2);
				}
				num4 = index2 + 1;
				if (num4 > this.Count - 1)
					flag1 = false;
				datetime = index1;
			}
			return barSeries;
		}
Exemplo n.º 2
0
		public virtual BarSeries Compress(long newBarSize, TimeSpan sessionStart, TimeSpan sessionEnd, BarSlycing mode)
		{
			return this.Compress(newBarSize, sessionStart, sessionEnd, mode, true, true);
		}