/// <summary> /// Суммарный объем покупок, который прошел ниже <see cref="POC"/>. /// </summary> /// <param name="volumeProfile">Профиль объема.</param> /// <returns>Суммарный объем покупок.</returns> public static decimal BuyVolBelowPOC(this VolumeProfile volumeProfile) { var poc = volumeProfile.POC(); return(volumeProfile.PriceLevels.Where(p => p.Price < poc.Price).Select(p => p.BuyVolume).Sum()); }
/// <summary> /// Суммарный объем продаж, который прошел выше <see cref="POC"/>. /// </summary> /// <param name="volumeProfile">Профиль объема.</param> /// <returns>Суммарный объем продаж.</returns> public static decimal SellVolAbovePOC(this VolumeProfile volumeProfile) { var poc = volumeProfile.POC(); return(volumeProfile.PriceLevels.Where(p => p.Price > poc.Price).Select(p => p.SellVolume).Sum()); }
/// <summary> /// Суммарное количество продаж в <see cref="VolumeProfile"/>. /// </summary> /// <param name="volumeProfile">Профиль объема.</param> /// <returns>Суммарное количество продаж.</returns> public static decimal TotalSellCount(this VolumeProfile volumeProfile) { return(volumeProfile.PriceLevels.Select(p => p.SellCount).Sum()); }
/// <summary> /// POC (Point Of Control) возвращает <see cref="PriceLevel"/>, по которому прошел максимальный объем. /// </summary> /// <param name="volumeProfile">Профиль объема.</param> /// <returns><see cref="PriceLevel"/>, по которому прошел максимальный объем.</returns> public static PriceLevel POC(this VolumeProfile volumeProfile) { var max = volumeProfile.PriceLevels.Select(p => (p.BuyVolume + p.SellVolume)).Max(); return(volumeProfile.PriceLevels.FirstOrDefault(p => p.BuyVolume + p.SellVolume == max)); }
/// <summary> /// Суммарная Дельта, которая прошла ниже <see cref="POC"/>. /// </summary> /// <param name="volumeProfile">Профиль объема.</param> /// <returns>Дельта.</returns> public static decimal DeltaBelowPOC(this VolumeProfile volumeProfile) { return(volumeProfile.BuyVolBelowPOC() - volumeProfile.SellVolBelowPOC()); }
/// <summary> /// Возвращает ценовой уровень, по которому прошла минимальная <see cref="Delta"/>. /// </summary> /// <param name="volumeProfile">Профиль объема</param> /// <returns>Ценовой уровень.</returns> public static PriceLevel PriceLevelOfMinDelta(this VolumeProfile volumeProfile) { var delta = volumeProfile.PriceLevels.Select(p => p.BuyVolume - p.SellVolume).Min(); return(volumeProfile.PriceLevels.FirstOrDefault(p => p.BuyVolume - p.SellVolume == delta)); }
/// <summary> /// Суммарный объем покупок в <see cref="VolumeProfile"/>. /// </summary> /// <param name="volumeProfile">Профиль объема.</param> /// <returns>Суммарный объем покупок.</returns> public static decimal TotalBuyVolume(this VolumeProfile volumeProfile) { return(volumeProfile.PriceLevels.Select(p => p.BuyVolume).Sum()); }
/// <summary> /// Разница между <see cref="TotalBuyVolume"/> и <see cref="TotalSellVolume"/>. /// </summary> /// <param name="volumeProfile">Профиль объема.</param> /// <returns>Дельта.</returns> public static decimal Delta(this VolumeProfile volumeProfile) { return(volumeProfile.TotalBuyVolume() - volumeProfile.TotalSellVolume()); }
/// <summary> /// Суммарный объем, который прошел выше <see cref="POC"/>. /// </summary> /// <param name="volumeProfile">Профиль объема.</param> /// <returns>Суммарный объем.</returns> public static decimal VolumeAbovePOC(this VolumeProfile volumeProfile) { return(volumeProfile.BuyVolAbovePOC() + volumeProfile.SellVolAbovePOC()); }