using System; using System.Collections.Generic; using System.Text; using System.Drawing; using WealthLab;namespace WealthLab.Strategies { public class SwamiStochastics : WealthScript { StrategyParameter _plotWidth; public SwamiStochastics() { _plotWidth = CreateParameter("Plot Width", 6, 2, 10, 1); } public class ArrayHolder { internal double Stoc, Num, Denom; } public void SwamiStochHeatMap(DataSeries ds, int plotThickness) { int r = 0; int g = 0; int b = 0; string s = ds.Description + ")"; DataSeries swStoch = new DataSeries(ds, "SwamiStoch(" + s); DataSeries">49"> swamistoch = new DataSeries[49; // Initialize array ArrayHolder">49"> ah = new ArrayHolder[49; for( int n = 4; n < 49; n++ ) ahn = new ArrayHolder(); // Create and plot the heatmap series (change bar colors later) HideVolume(); HidePaneLines(); ChartPane swPane = CreatePane(50, false, false ); for( int n = 4; n < 49; n++ ) { swamistochn = swStoch + n; swamistochn.Description = "SwamiSto." + n.ToString(); PlotSeries(swPane, swamistochn, Color.LightGray, LineStyle.Solid, plotThickness); } for(int bar = 48; bar < Bars.Count; bar++) { double num2, denom2, stoch2; for (int n = 4; n < 49; n++) { num2 = ahn.Num; denom2 = ahn.Denom; stoch2 = ahn.Stoc; double hh = 0; double ll = 1e10; for (int j = 0; j < n; j++) { if (dsbar - j > hh) hh = dsbar - j; if (dsbar - j < ll) ll = dsbar - j; } ahn.Num = 0.5 * (dsbar - ll) + 0.5 * num2; ahn.Denom = 0.5 * (hh - ll) + 0.5 * denom2; if (ahn.Denom != 0) { ahn.Stoc = 0.2 * (ahn.Num / ahn.Denom) + 0.8 * stoch2; } if (ahn.Stoc >= 0.5) { r = Convert.ToInt32(255 * (2 - 2 * ahn.Stoc)); g = 255; } else { r = 255; g = Convert.ToInt32(255 * 2 * ahn.Stoc); } SetSeriesBarColor(bar, swamistochn, Color.FromArgb(r, g, b)); } } } protected override void Execute() { SwamiStochHeatMap(Close, _plotWidth.ValueInt); } } }