using System; using System.Collections.Generic; using TSLab.Script; using TSLab.Script.Handlers; using TSLab.Script.Optimization; using TSLab.Script.Helpers; namespace TSLab.Renko { public class RenkoH : IBar2DoubleHandler, IContextUses { // Параметры оптимизации [HandlerParameter(true, "500", Min = "1", Max = "10000", Step = "500")] public double Range { get; set; } public IList Execute(ISecurity source) { //int StartBar = 1; var high = source.HighPrices; var low = source.LowPrices; var closes = source.ClosePrices; double HighRange; IList nHighRange = new List(closes.Count); // значение верхней границы для текущего бара //HighRange = source.HighPrices[1]; HighRange = source.ClosePrices[1] + 0.5 * Range; for (int i = 0; i < closes.Count; i++) { if ((closes[i] - HighRange) > Range) { HighRange = HighRange + Range; } if ((HighRange - closes[i]) > 2*Range) { HighRange = HighRange - Range; } nHighRange.Add(HighRange); } return nHighRange; } public IContext Context { get; set; } } public class RenkoL : IBar2DoubleHandler, IContextUses { [HandlerParameter(true, "500", Min = "1", Max = "10000", Step = "500")] public double Range { get; set; } public IList Execute(ISecurity source) { var high = source.HighPrices; var low = source.LowPrices; var closes = source.ClosePrices; double LowRange; IList nLowRange = new List(closes.Count); // значение нижней границы для текущего бара //LowRange = source.LowPrices[1]; LowRange = source.ClosePrices[1] - 0.5 * Range; for (int i = 0; i < closes.Count; i++) { if ((closes[i] - LowRange) > 2*Range) { LowRange = LowRange + Range; } if ((LowRange - closes[i]) > Range) { LowRange = LowRange - Range; } nLowRange.Add(LowRange); } return nLowRange; } public IContext Context { get; set; } } }