using System; using System.Collections.Generic; using TSLab.Script; using TSLab.Script.Handlers; using TSLab.Script.Helpers; namespace Number { public class NumberHigh : IBar2DoubleHandler { [HandlerParameter(true, "1", Min = "0", Max = "10", Step = "1")] public int Session { get; set; } public IList Execute(ISecurity source) { var bars = source.Bars; var high = source.HighPrices; var res = new double[bars.Count]; var aa = new double[bars.Count]; var nn = new double[bars.Count]; if (res.Length > 0) { var curRes = new List(); for (int i = 0; i <= Session; i++) { curRes.Add(bars[0].High); } var a = 0; var n = 1; for (int i = 10; i < res.Length; i++) { if (bars[i - 1].Date.Day != bars[i].Date.Day) { a=0; n=1; curRes.RemoveAt(0); curRes.Add(bars[i].High); } else {n=n+1;} curRes[Session] = Math.Max(curRes[Session], bars[i].High); if (high[i]==curRes[0]) {a=0;res[i]= a;} else {a=a+1;} aa[i]=a; nn[i]=n; res[i]=nn[i-n]-aa[i-n]; } } return res; } } public class NumberLow : IBar2DoubleHandler { [HandlerParameter(true, "1", Min = "0", Max = "10", Step = "1")] public int Session { get; set; } public IList Execute(ISecurity source) { var bars = source.Bars; var low = source.LowPrices; var res = new double[bars.Count]; var aa = new double[bars.Count]; var nn = new double[bars.Count]; if (res.Length > 0) { var curRes = new List(); for (int i = 0; i <= Session; i++) { curRes.Add(bars[0].Low); } var a = 0; var n = 1; for (int i = 10; i < res.Length; i++) { if (bars[i - 1].Date.Day != bars[i].Date.Day) { a=0; n=1; curRes.RemoveAt(0); curRes.Add(bars[i].Low); } else {n=n+1;} curRes[Session] = Math.Min(curRes[Session], bars[i].Low); if (low[i]==curRes[0]) {a=0;res[i]= a;} else {a=a+1;} aa[i]=a; nn[i]=n; res[i]=nn[i-n]-aa[i-n]; } } return res; } } public class NumberClose : IBar2DoubleHandler {public IList Execute(ISecurity source) { var bars = source.Bars; var closes = source.ClosePrices; var n = new double[bars.Count]; var list = new double[closes.Count]; var x = 0; for (int i = 1;i < closes.Count; i++) { var curD = source.Bars[i].Date; var curD1 = source.Bars[i-1].Date; if (curD.Day == curD1.Day) { x = x+1; n[i]=x; list[i] = n[i-x]; } else { x = 1; n[i]=x; list[i] = n[i-x]; } } return list; } } }