"'ElliotWaveOscilator' tried to load additional data. All data must first be loaded by the hosting NinjaScript in its configure state. Attempted to load HBars Default: 600 Tick Heiken-Ashi"
itried doing extra data series and all kinds of weird stuff. this code does not even have the drop down menu working in the strategy builder, but is the cleanest version I have working on a chart. For the life of me, I cannot figure out where to pull the plot values form. I even tried doing a transparent plot like another post here said, but still couldnt get those to show up in the drop down menus of the strategy builder so i could use them.
This is the cleanest version of code that works perfectly on my chart as an indicator. thank you for any help I am exhausted and I am sure I am missing something basic. Feel free to use if useful to you.
Here is a pic of it working on chart...
Elliot Wave Oscillator Code
#region Using declarations
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Xml.Serialization;
using NinjaTrader.Cbi;
using NinjaTrader.Gui;
using NinjaTrader.Gui.Chart;
using NinjaTrader.Gui.SuperDom;
using NinjaTrader.Gui.Tools;
using NinjaTrader.Data;
using NinjaTrader.NinjaScript;
using NinjaTrader.Core.FloatingPoint;
using NinjaTrader.NinjaScript.DrawingTools;
#endregion
//This namespace holds Indicators in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.Indicators
{
public class ElliotWaveOscilator : Indicator
{
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"";
Name = "ElliotWaveOscilator";
Calculate = Calculate.OnEachTick;
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;
FastSMA = 5;
SlowSMA = 35;
DownColor =Brushes.IndianRed;
AddLine(Brushes.White, 0, NinjaTrader.Custom.Resource.NinjaScriptIndicatorZe roLine);
AddLine(Brushes.White, 5, NinjaTrader.Custom.Resource.NinjaScriptIndicatorOv erBoughtLine);
AddLine(Brushes.White, -5, NinjaTrader.Custom.Resource.NinjaScriptIndicatorOv erSoldLine);
AddPlot(new Stroke(Brushes.SpringGreen, 2), PlotStyle.Bar, "HBars");
//bar widths on histogram
Plots[0].AutoWidth = true;
}
else if (State == State.Configure)
{
AddDataSeries("HBars");
}
}
protected override void OnBarUpdate()
{
Value[0] = (SMA(FastSMA)[0]-SMA(SlowSMA)[0]);
if (Value[0] < 0)
PlotBrushes[0][0] = DownColor;
}
#region Properties
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="FastSMA", Order=1, GroupName="Parameters")]
public int FastSMA
{ get; set; }
[NinjaScriptProperty]
[Range(1, int.MaxValue)]
[Display(Name="SlowSMA", Order=2, GroupName="Parameters")]
public int SlowSMA
{ get; set; }
[XmlIgnore]
[Display(ResourceType = typeof(Custom.Resource), Name = "DownColor", GroupName = "NinjaScriptIndicatorVisualGroup", Order = 1800)]
public Brush DownColor { get; set; }
[Browsable(false)]
[XmlIgnore]
public Series<double> HBars
{
get { return Values[0]; }
}
#endregion
}
}
#region NinjaScript generated code. Neither change nor remove.
namespace NinjaTrader.NinjaScript.Indicators
{
public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
{
private ElliotWaveOscilator[] cacheElliotWaveOscilator;
public ElliotWaveOscilator ElliotWaveOscilator(int fastSMA, int slowSMA)
{
return ElliotWaveOscilator(Input, fastSMA, slowSMA);
}
public ElliotWaveOscilator ElliotWaveOscilator(ISeries<double> input, int fastSMA, int slowSMA)
{
if (cacheElliotWaveOscilator != null)
for (int idx = 0; idx < cacheElliotWaveOscilator.Length; idx++)
if (cacheElliotWaveOscilator[idx] != null && cacheElliotWaveOscilator[idx].FastSMA == fastSMA && cacheElliotWaveOscilator[idx].SlowSMA == slowSMA && cacheElliotWaveOscilator[idx].EqualsInput(input))
return cacheElliotWaveOscilator[idx];
return CacheIndicator<ElliotWaveOscilator>(new ElliotWaveOscilator(){ FastSMA = fastSMA, SlowSMA = slowSMA }, input, ref cacheElliotWaveOscilator);
}
}
}
namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
{
public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
{
public Indicators.ElliotWaveOscilator ElliotWaveOscilator(int fastSMA, int slowSMA)
{
return indicator.ElliotWaveOscilator(Input, fastSMA, slowSMA);
}
public Indicators.ElliotWaveOscilator ElliotWaveOscilator(ISeries<double> input , int fastSMA, int slowSMA)
{
return indicator.ElliotWaveOscilator(input, fastSMA, slowSMA);
}
}
}
namespace NinjaTrader.NinjaScript.Strategies
{
public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
{
public Indicators.ElliotWaveOscilator ElliotWaveOscilator(int fastSMA, int slowSMA)
{
return indicator.ElliotWaveOscilator(Input, fastSMA, slowSMA);
}
public Indicators.ElliotWaveOscilator ElliotWaveOscilator(ISeries<double> input , int fastSMA, int slowSMA)
{
return indicator.ElliotWaveOscilator(input, fastSMA, slowSMA);
}
}
}
#endregion
Comment