private static Duration CalculateDuration(int barPeriod, BarStructure barStructure) { Debug.PositiveInt32(barPeriod, nameof(barPeriod)); switch (barStructure) { case BarStructure.Tick: return(Duration.Zero); case BarStructure.Second: return(Duration.FromSeconds(barPeriod)); case BarStructure.Minute: return(Duration.FromMinutes(barPeriod)); case BarStructure.Hour: return(Duration.FromHours(barPeriod)); case BarStructure.Day: return(Duration.FromDays(barPeriod)); case BarStructure.TickImbalance: case BarStructure.Undefined: case BarStructure.Volume: case BarStructure.VolumeImbalance: case BarStructure.Dollar: case BarStructure.DollarImbalance: goto default; default: throw ExceptionFactory.InvalidSwitchArgument(barStructure, nameof(barStructure)); } }
/// <summary> /// Initializes a new instance of the <see cref="BarSpecification"/> class. /// </summary> /// <param name="period">The specification period.</param> /// <param name="barStructure">The specification resolution.</param> /// <param name="priceType">The specification quote type.</param> /// <exception cref="ArgumentOutOfRangeException">If the period is not positive (> 0).</exception> public BarSpecification( int period, BarStructure barStructure, PriceType priceType) { Debug.PositiveInt32(period, nameof(period)); this.Period = period; this.BarStructure = barStructure; this.PriceType = priceType; this.Duration = CalculateDuration(period, barStructure); }
/// <summary> /// Returns a bar volumes key from the given arguments. /// </summary> /// <param name="symbol">The symbol for the key.</param> /// <param name="barStructure">The bar structure for the key.</param> /// <param name="priceType">The price type for the key.</param> /// <returns>A key string.</returns> internal static string GetBarVolumesKey(Symbol symbol, BarStructure barStructure, PriceType priceType) { return($"{BarsNamespace}:{symbol.Venue.Value}:{symbol.Code}:{barStructure.ToString()}:{priceType.ToString()}:Volumes"); }