I'm new to NT 8 and I have some issues abot coloring a region between some horizontal lines.
Recently, I found the included indicator somewhere else and I just wanted to highlight the regions between the standard deviation levels.
The original code used lines to plot these levels, I changed them into plots in order to use the Draw.Region() function with two series.but still the region is not drawn.
I will appreciate any help.
namespace NinjaTrader.NinjaScript.Indicators { /// <summary> /// Displays Z Score for the selected instrument. /// </summary> [Description("Displays Z Score for the selected instrument. Optional Smoothings.")] public class TCZScore : Indicator { public enum MovingAverageTypes { SMA = 1, WMA = 2, EMA = 3, LinReg = 4 } #region Variables // internal program variables double calculation = 0; #endregion protected override void OnStateChange() { if (State == State.SetDefaults) { Initialize(); // call the original NT7 Initialize() // DrawOnPricePanel = false; } } public override string DisplayName { get { return Name+"("+averagePeriod.ToString()+","+stDevPeriod.ToString()+")"; } } /// <summary> /// This method is used to configure the indicator and is called once before any bar data is loaded. /// </summary> protected void Initialize() { Name = "TC_ZScore: TradingCoders.com"; AddPlot(new Stroke(Brushes.DarkOrange,1), PlotStyle.Line, "Z"); AddPlot(new Stroke(Brushes.Red), PlotStyle.Line, "ZSmooth"); AddPlot(new Stroke(Brushes.DimGray), PlotStyle.Line, "U2"); AddPlot(new Stroke(Brushes.DimGray), PlotStyle.Line, "U1"); AddPlot(new Stroke(Brushes.DimGray), PlotStyle.Line, "L1"); AddPlot(new Stroke(Brushes.DimGray), PlotStyle.Line, "L2"); AddLine(new Stroke(Brushes.DimGray,1), 0, "ZeroLine"); Calculate = Calculate.OnPriceChange; DrawOnPricePanel = false; IsOverlay = false; //PriceType = PriceType.Typical; // cannot be set by code as any default in NT8 MaximumBarsLookBack = MaximumBarsLookBack.Infinite; averagePeriod = 100; // Default setting for AveragePeriod stDevPeriod = 100; // Default setting for StDevPeriod mAType = MovingAverageTypes.SMA; // 1=SMA, 2=EMA, 3=LinReg smoothingPeriod = 5; // Smoothing of principle Z (1=no smoothing) doubleSmoothingPeriod = 10; // period of Double Smoothed Z. } /// <summary> /// Called on each bar update event (incoming tick) /// </summary> protected override void OnBarUpdate() { if (CurrentBar < 5) { Z[0] = (0); return; } // off and running ----> switch (mAType) { case MovingAverageTypes.SMA: calculation = SMA(Input,averagePeriod)[0]; break; case MovingAverageTypes.WMA: calculation = WMA(Input,averagePeriod)[0]; break; case MovingAverageTypes.EMA: calculation = EMA(Input,averagePeriod)[0]; break; case MovingAverageTypes.LinReg: calculation = LinReg(Input,averagePeriod)[0]; break; default: calculation = SMA(Input,averagePeriod)[0]; break; } if (smoothingPeriod > 1) // smooths price series going into the calculation calculation = (EMA(Input,smoothingPeriod)[0]-calculation)/StdDev(Input,stDevPeriod)[0]; else calculation = (Input[0]-calculation)/StdDev(Input,stDevPeriod)[0]; Z[0] = (calculation); if (doubleSmoothingPeriod > 1) { ZSmooth[0] = (EMA(Z,Math.Min(doubleSmoothingPeriod,CurrentBar))[0]); } else ZSmooth.Reset(); U2[0] = 2.0; U1[0] = 1.0; L1[0] = -1.0; L2[0] = -2.0; Region myReg = Draw.Region(this, "tag1", CurrentBar, 0, L1, U1, Brushes.Transparent, Brushes.Blue,10); // Change the object's opacity myReg.AreaOpacity = 25; } #region Properties [Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove [XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove public Series<double> Z { get { return Values[0]; } } [Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove [XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove public Series<double> ZSmooth { get { return Values[1]; } } [Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove [XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove public Series<double> U2 { get { return Values[2]; } } [Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove [XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove public Series<double> U1 { get { return Values[3]; } } [Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove [XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove public Series<double> L1 { get { return Values[4]; } } [Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove [XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove public Series<double> L2 { get { return Values[5]; } } // -------------------------- [Range(1, int.MaxValue), NinjaScriptProperty] [Display(Description = "Length of averaged price", ResourceType = typeof(Custom.Resource), Name = "Average Period", GroupName = "NinjaScriptParameters", Order = 0)] public int averagePeriod { get; set; } [Range(1, int.MaxValue), NinjaScriptProperty] [Display(Description = "Length of standard deviation of price", ResourceType = typeof(Custom.Resource), Name = "StdDev Period", GroupName = "NinjaScriptParameters", Order = 1)] public int stDevPeriod { get; set; } [NinjaScriptProperty] [Display(Description = "Type of moving average", ResourceType = typeof(Custom.Resource), Name = "MA Type", GroupName = "NinjaScriptParameters", Order = 2)] public NinjaTrader.NinjaScript.Indicators.TCZScore.MovingAverageTypes mAType { get; set; } [Range(1, int.MaxValue), NinjaScriptProperty] [Display(Description = "Smoothing period for Z", ResourceType = typeof(Custom.Resource), Name = "Smoothing Period", GroupName = "NinjaScriptParameters", Order = 3)] public int smoothingPeriod { get; set; } [Range(1, int.MaxValue), NinjaScriptProperty] [Display(Description = "Double Smoothing period", ResourceType = typeof(Custom.Resource), Name = "DoubleSmoothing Period", GroupName = "NinjaScriptParameters", Order = 4)] public int doubleSmoothingPeriod { get; set; } #endregion } }
Comment