namespace NinjaTrader.NinjaScript.Indicators
{
public class StrengthTrend : Indicator
{
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"";
Name = "Strength Trend";
Calculate = Calculate.OnBarClose;
IsOverlay = false;
DisplayInDataBox = true;
DrawOnPricePanel = true;
DrawHorizontalGridLines = true;
DrawVerticalGridLines = true;
PaintPriceMarkers = true;
ScaleJustification = NinjaTrader.Gui.Chart.ScaleJustification.Right;
//Disable this property if your indicator requires custom values that cumulate with each new market data event.
//See Help Guide for additional information.
IsSuspendedWhileInactive = true;
Period = 55;
AddPlot(Brushes.Green, "UpLine");
AddPlot(Brushes.Red, "DownLine");
AddPlot(Brushes.Orange, "Difference");
AddLine(Brushes.DarkGray, 0, "ZeroLine");
}
else if (State == State.Configure)
{
}
}
protected override void OnBarUpdate()
{
if (CurrentBar == 0)
{
UpLine[0] = 0;
DownLine[0] = 0;
}
double up = 0;
double down = 0;
for(int i = 0; i < Period; i++)
{
if(Close[i] > Open[i])
{
up = up + (Close[i] - Open[i])/(High[i] - Low[i]);
}
if(Close[i] < Open[i])
{
down = down + (Close[i] - Open[i])/(High[i] - Low[i]);
}
}
UpLine[0] = up;
DownLine[0] = down;
Difference[0] = up + down;
}
region Properties
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="Period", Order=1, GroupName="Parameters")]
public int Period
{ get; set; }
[Browsable(false)]
[XmlIgnore]
public Series<double> UpLine
{
get { return Values[0]; }
}
[Browsable(false)]
[XmlIgnore]
public Series<double> DownLine
{
get { return Values[1]; }
}
[Browsable(false)]
[XmlIgnore]
public Series<double> Difference
{
get { return Values[2]; }
}
#endregion
}
}

Comment