using System; using System.Collections.Generic; using System.Linq; using TSLab.Script; using TSLab.Script.Handlers; namespace Kom.Handlers { [HandlerCategory("Kom.")] [HandlerName("AnalizVolumInBar1")] public class AnalizVolumeInBar : IBar2DoubleHandler { [HandlerParameter(Name = "Step", Default = "1", NotOptimized = true)] public int Step { get; set; } [HandlerParameter(Name = "Price? Price:Volume", Default = "true", NotOptimized = true)] public bool IsPrice { get; set; } public IList Execute(ISecurity sec) { var fprt = new VolumeMarketPosition { CombineSteps = Step }.Execute(sec); IList priceMaxVolumInBar = new List(); IList maxVolumInBar = new List(); for (var bar = 0; bar < sec.Bars.Count; bar++) { var lines = fprt[bar].Lines.Cast().ToList(); if (lines.Count == 0) { priceMaxVolumInBar.Add(0); maxVolumInBar.Add(0); continue; } // ищем индекс кластера с макс объемом var clasterMax = 0; // инициализация индекса кластера с макс объемом var maxLine = lines[clasterMax]; // инициализация кластера с макс объемом for (var i = 0; i < lines.Count; i++) { var line = lines[i]; if (!(line.Volume > maxLine.Volume)) continue; maxLine = line; clasterMax = i; } priceMaxVolumInBar.Add(lines[clasterMax].Price); maxVolumInBar.Add(lines[clasterMax].Volume); } return IsPrice ? priceMaxVolumInBar : maxVolumInBar; } } }