public static SwingIndex Series(Bars bars, int limit) { string description = string.Concat(new object[] { "SwingIndex(", limit, ")" }); if (bars.Cache.ContainsKey(description)) { return((SwingIndex)bars.Cache[description]); } SwingIndex _SwingIndex = new SwingIndex(bars, limit, description); bars.Cache[description] = _SwingIndex; return(_SwingIndex); }
public AccumSwingIndex(Bars bars, int limit, string description) : base(bars, description) { base.FirstValidValue = 2; SwingIndex si = SwingIndex.Series(bars, limit); var rangePartitioner = Partitioner.Create(FirstValidValue, bars.Count); Parallel.ForEach(rangePartitioner, (range, loopState) => { for (int bar = range.Item1; bar < range.Item2; bar++) { //ASI(i) = SI(i-1) + SI(i) //base[bar] = si[bar - 1] + si[bar]; base[bar] = base[bar - 1] + si[bar]; } }); }