#region Using declarations
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Windows.Media;
using System.Xml.Serialization;
using NinjaTrader.Gui;
#endregion
using NinjaTrader.NinjaScript.DrawingTools;
//This namespace holds Indicators in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.Indicators
{
/// <summary>
/// The Moving Average Ribbon is a series of incrementing moving averages.
/// </summary>
public class MovingAverageRibbonStacked : Indicator
{
private bool stackedUp, stackedDown;
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = NinjaTrader.Custom.Resource.NinjaScriptIndicatorDescriptionMovingAverageRibbon;
Name = "MovingAverageRibbon STACKED";
Calculate = Calculate.OnBarClose;
IsOverlay = true;
DrawOnPricePanel = true;
IsSuspendedWhileInactive = true;
MovingAverage = RibbonMAType.Exponential;
BasePeriod = 10;
IncrementalPeriod = 10;
AddPlot(new Stroke(Brushes.Yellow, DashStyleHelper.Solid, 1), PlotStyle.Line, NinjaTrader.Custom.Resource.MovingAverageRibbonPlot1);
AddPlot(new Stroke(Brushes.Gold, DashStyleHelper.Solid, 1), PlotStyle.Line, NinjaTrader.Custom.Resource.MovingAverageRibbonPlot2);
AddPlot(new Stroke(Brushes.Goldenrod, DashStyleHelper.Solid, 1), PlotStyle.Line, NinjaTrader.Custom.Resource.MovingAverageRibbonPlot3);
AddPlot(new Stroke(Brushes.Orange, DashStyleHelper.Solid, 1), PlotStyle.Line, NinjaTrader.Custom.Resource.MovingAverageRibbonPlot4);
AddPlot(new Stroke(Brushes.DarkOrange, DashStyleHelper.Solid, 1), PlotStyle.Line, NinjaTrader.Custom.Resource.MovingAverageRibbonPlot5);
AddPlot(new Stroke(Brushes.Chocolate, DashStyleHelper.Solid, 1), PlotStyle.Line, NinjaTrader.Custom.Resource.MovingAverageRibbonPlot6);
AddPlot(new Stroke(Brushes.OrangeRed, DashStyleHelper.Solid, 1), PlotStyle.Line, NinjaTrader.Custom.Resource.MovingAverageRibbonPlot7);
AddPlot(new Stroke(Brushes.Red, DashStyleHelper.Solid, 1), PlotStyle.Line, NinjaTrader.Custom.Resource.MovingAverageRibbonPlot8);
}
}
protected override void OnBarUpdate()
{
for (int i = 0; i < 8; i++)
{
switch (MovingAverage)
{
case RibbonMAType.Exponential:
Values[i][0] = EMA(Input, BasePeriod + IncrementalPeriod * i)[0];
break;
case RibbonMAType.Hull:
Values[i][0] = HMA(Input, BasePeriod + IncrementalPeriod * i)[0];
break;
case RibbonMAType.Simple:
Values[i][0] = SMA(Input, BasePeriod + IncrementalPeriod * i)[0];
break;
case RibbonMAType.Weighted:
Values[i][0] = WMA(Input, BasePeriod + IncrementalPeriod * i)[0];
break;
}
}
stackedDown = true;
for (int i = 0; i < 8-1; i++)
{
stackedDown = stackedDown & (Values[i][0] < Values[i + 1][0]);
}
if (stackedDown)
{
var tf = Draw.TextFixed(this, "stacked", "Stacked Down", TextPosition.TopRight);
tf.AreaBrush = Brushes.Red;
}
stackedUp = true;
for (int i = 0; i < 8-1; i++)
{
stackedUp = stackedUp & (Values[i][0] > Values[i + 1][0]);
}
if (stackedUp)
{
var tf = Draw.TextFixed(this, "stacked", "Stacked Up", TextPosition.TopRight);
tf.AreaBrush = Brushes.Green;
}
}
#region Properties
[XmlIgnore]
[Browsable(false)]
public Series<double> MovingAverage1 { get { return Values[0]; } }
[XmlIgnore]
[Browsable(false)]
public Series<double> MovingAverage2 { get { return Values[1]; } }
[XmlIgnore]
[Browsable(false)]
public Series<double> MovingAverage3 { get { return Values[2]; } }
[XmlIgnore]
[Browsable(false)]
public Series<double> MovingAverage4 { get { return Values[3]; } }
[XmlIgnore]
[Browsable(false)]
public Series<double> MovingAverage5 { get { return Values[4]; } }
[XmlIgnore]
[Browsable(false)]
public Series<double> MovingAverage6 { get { return Values[5]; } }
[XmlIgnore]
[Browsable(false)]
public Series<double> MovingAverage7 { get { return Values[6]; } }
[XmlIgnore]
[Browsable(false)]
public Series<double> MovingAverage8 { get { return Values[7]; } }
[NinjaScriptProperty]
[Display(ResourceType = typeof(Custom.Resource), Name = "MovingAverage", GroupName = "NinjaScriptParameters", Order = 0)]
public RibbonMAType MovingAverage { get; set; }
[Range(1, int.MaxValue), NinjaScriptProperty]
[Display(ResourceType = typeof(Custom.Resource), Name = "BasePeriod", GroupName = "NinjaScriptParameters", Order = 1)]
public int BasePeriod { get; set; }
[Range(1, int.MaxValue), NinjaScriptProperty]
[Display(ResourceType = typeof(Custom.Resource), Name = "IncrementalPeriod", GroupName = "NinjaScriptParameters", Order = 2)]
public int IncrementalPeriod { get; set; }
#endregion
}
}
|