Two-EMA NinjaScript Indicator
A bounded single-file example with parameter attributes, two plots, and an explicit lookback guard.
using System;
using System.ComponentModel.DataAnnotations;
using System.Windows.Media;
using NinjaTrader.NinjaScript;
using NinjaTrader.NinjaScript.Indicators;
namespace NinjaTrader.NinjaScript.Indicators
{
public class FastSlowTrendIndicator : Indicator
{
[NinjaScriptProperty]
[Range(1, 200)]
[Display(Name = "Fast period", GroupName = "Parameters", Order = 0)]
public int FastPeriod { get; set; }
[NinjaScriptProperty]
[Range(2, 400)]
[Display(Name = "Slow period", GroupName = "Parameters", Order = 1)]
public int SlowPeriod { get; set; }
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Name = "FastSlowTrendIndicator";
Calculate = Calculate.OnBarClose;
IsOverlay = true;
BarsRequiredToPlot = 20;
FastPeriod = 10;
SlowPeriod = 30;
AddPlot(Brushes.DodgerBlue, "Fast");
AddPlot(Brushes.OrangeRed, "Slow");
}
}
protected override void OnBarUpdate()
{
if (CurrentBar < Math.Max(FastPeriod, SlowPeriod) - 1)
return;
Values[0][0] = EMA(FastPeriod)[0];
Values[1][0] = EMA(SlowPeriod)[0];
}
}
}