using System;
namespace NinjaTrader.NinjaScript.Indicators
{
public class CustomChoppinessIndex : Indicator
{
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = "Custom Choppiness Index with -10 offset";
Name = "CustomChoppinessIndex";
IsOverlay = false;
Period = 14;
AddPlot(Brushes.DodgerBlue, "ChoppinessIndex");
AddLine(Brushes.DarkCyan, 38.2, "Lower");
AddLine(Brushes.DarkCyan, 62.8, "Upper");
}
}
protected override void OnBarUpdate()
{
double chopIndex = (MAX(High, Period)[0] - MIN(Low, Period)[0]).ApproxCompare(0) == 0 || SUM(ATR(1), Period)[0].ApproxCompare(0) == 0 ? 0 : 100 * Math.Log10(SUM(ATR(1), Period)[0] / (MAX(High, Period)[0] - MIN(Low, Period)[0])) / Math.Log10(Period);
// Apply the offset of -10 to the Choppiness Index values
Value[0] = chopIndex - 10;
}
region Properties
[Range(2, int.MaxValue), NinjaScriptProperty]
[Display(ResourceType = typeof(Custom.Resource), Name = "Period", GroupName = "NinjaScriptParameters", Order = 0)]
public int Period
{ get; set; }
#endregion
}
}
region NinjaScript generated code. Neither change nor remove.
namespace NinjaTrader.NinjaScript.Indicators
{
public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
{
private CustomChoppinessIndex[] cacheCustomChoppinessIndex;
public CustomChoppinessIndex CustomChoppinessIndex(int period)
{
return CustomChoppinessIndex(Input, period);
}
public CustomChoppinessIndex CustomChoppinessIndex(ISeries<double> input, int period)
{
if (cacheCustomChoppinessIndex != null)
for (int idx = 0; idx < cacheCustomChoppinessIndex.Length; idx++)
if (cacheCustomChoppinessIndex[idx] != null && cacheCustomChoppinessIndex[idx].Period == period && cacheCustomChoppinessIndex[idx].EqualsInput(input))
return cacheCustomChoppinessIndex[idx];
return CacheIndicator<CustomChoppinessIndex>(new CustomChoppinessIndex(){ Period = period }, input, ref cacheCustomChoppinessIndex);
}
}
}
namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
{
public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
{
public Indicators.CustomChoppinessIndex CustomChoppinessIndex(int period)
{
return indicator.CustomChoppinessIndex(Input, period);
}
public Indicators.CustomChoppinessIndex CustomChoppinessIndex(ISeries<double> input , int period)
{
return indicator.CustomChoppinessIndex(input, period);
}
}
}
namespace NinjaTrader.NinjaScript.Strategies
{
public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
{
public Indicators.CustomChoppinessIndex CustomChoppinessIndex(int period)
{
return indicator.CustomChoppinessIndex(Input, period);
}
public Indicators.CustomChoppinessIndex CustomChoppinessIndex(ISeries<double> input , int period)
{
return indicator.CustomChoppinessIndex(input, period);
}
}
}
#endregion
Comment