Suppose I have a strategy that I am developing on 30-minute bars, but I also include a daily bar in State.Configure . If I try to print the Times of both the bars together, I get an error, But if I only try to print the Times one at a time using BarsInProgress, then things work done.
The main chart has 30 minute data, and 365 days of data has been loaded.
I'm trying to understand why is this the case?
-------------------------------
THIS GIVES AN ERROR: Strategy 'MyTestStrategy': Error on calling 'OnBarUpdate' method on bar 0: You are accessing an index with a value that is invalid since it is out-of-range. I.E. accessing a series [barsAgo] with a value of 5 when there are only 4 bars on the chart.
public class MyTestStrategy : Strategy
{
protected override void OnStateChange()
{
....
else if (State == State.Configure)
{
AddDataSeries(Data.BarsPeriodType.Day, 1);
}
else if (State == State.DataLoaded)
{
ClearOutputWindow();
}
}
protected override void OnBarUpdate()
{
string line = BarsInProgress.ToString() + ", ";
if (Times[0].IsValidDataPoint(0))
line = line + Times[0][0] + ", ";
else
line = line + "Not Available, ";
if (Times[1].IsValidDataPoint(0))
line = line + Times[1][0];
else
line = line + "Not Available";
Print(line);
}
}
-------------------------------
THIS WORKS FINE
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
.....
}
else if (State == State.Configure)
{
AddDataSeries(Data.BarsPeriodType.Day, 1);
}
else if (State == State.DataLoaded)
{
ClearOutputWindow();
}
}
protected override void OnBarUpdate()
{
string line = BarsInProgress.ToString() + ", ";
if (BarsInProgress == 0)
{
if (Times[0].IsValidDataPoint(0))
line = line + Times[0][0] + ", ";
else
line = line + "Not Available, ";
}
if (BarsInProgress == 1)
{
if (Times[1].IsValidDataPoint(0))
line = line + Times[1][0];
else
line = line + "Not Available";
}
Print(line);
}
}
Comment