PDA

View Full Version : Data Series question


NinjaTrader_Josh
05-24-2007, 07:08 PM
For one of my indicators I am trying to access information from previous bars, but can't find a readily available way to do so. In strategies I could just go Close[5] but from what I can tell only Close[0] works in indicators. Currently I am just passing the value along a 5-variable daisy chain so I can have access to Close[5]. There has to be a better way of doing this. Any suggestions?

I think I am using the data series thing wrong. Here is my awkward code


protected override void Initialize()
{
Add(new Plot(Color.Empty, PlotStyle.Hash, "RegCh[1]"));
Add(new Plot(Color.Empty, PlotStyle.Hash, "RegCh[2]"));
Add(new Plot(Color.Empty, PlotStyle.Hash, "RegCh[3]"));
Add(new Plot(Color.Empty, PlotStyle.Hash, "RegCh[4]"));
Add(new Plot(Color.Empty, PlotStyle.Hash, "RegCh[5]"));
}

protected override void OnBarUpdate()
{
PriorRegCh.Set(currentRegCh);
PriorRegCh2.Set(RegCh1);
PriorRegCh3.Set(RegCh2);
PriorRegCh4.Set(RegCh3);
PriorRegCh5.Set(RegCh4);
currentRegCh = RegressionChannel(60, 2).Middle[0];
RegCh1 = PriorRegCh[0];
RegCh2 = PriorRegCh2[0];
RegCh3 = PriorRegCh3[0];
RegCh4 = PriorRegCh4[0];

#region Properties
[Browsable(false)]
[XmlIgnore()]
public DataSeries PriorRegCh
{
get { return Values[0]; }
}

[Browsable(false)]
[XmlIgnore()]
public DataSeries PriorRegCh2
{
get { return Values[1]; }
}

[Browsable(false)]
[XmlIgnore()]
public DataSeries PriorRegCh3
{
get { return Values[2]; }
}

[Browsable(false)]
[XmlIgnore()]
public DataSeries PriorRegCh4
{
get { return Values[3]; }
}

[Browsable(false)]
[XmlIgnore()]
public DataSeries PriorRegCh5
{
get { return Values[4]; }
}


For some reason I ended up with many plots for my Regression Channel. I was only aiming for one, but it seemed to want a plot for every dataseries I had. What I did was copy the way the PriorDayOHLC indicator stored values. It seems very inefficient.

NinjaTrader_Dierk
05-24-2007, 11:51 PM
The "barsAgo" logic like in Close[5] (meaning 5 bars ago) works in indicators as well as in strategies.

NinjaTrader_Josh
05-25-2007, 12:08 AM
Hmm. When I put a very simple test it breaks my indicator for no apparent reason.

if (Close[1] != Close[0]) Print("Test Success");

If that line is in there my indicator is completely broken. The indicator fails to load or something. It also doesn't print my message in my Output Window. Furthermore, in my Log I also get "Error on calling the 'OnBarUpdate' method for indicator 'BlackBelt90' on bar 0: Index was out of range. Must be non-negative and less than the size of the collection."

I can't make any sense as to why this is happening.

NinjaTrader_Dierk
05-25-2007, 12:19 AM
Close[1] references one bar back, On bar 0 there is no such bar -> crash

You need to put in something like:
if (CurrentBar < 1)
return;

NinjaTrader_Josh
05-25-2007, 12:43 AM
Genius! Thanks. Before I had the BarsRequired setting thinking it would do the job of preventing referencing to nonexistent bars.