Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

multi-time frame error

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    multi-time frame error

    Hi

    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);

    }
    }

    #2
    Hello uday12,

    Thank you for your post.

    The first snippet does not work because you are trying to access the daily bar index before checking that a value exists at that index. IsValidDataPoint will not perform an index check before it accesses the series value. If you need to access the Daily bars value while OnBarUpdate is being called for the 30 minute series, add a check for CurrentBars[1] > 1 then access the Times[][] array if that is true.

    e.g

    Code:
    protected override void OnBarUpdate()
    {
        if(BarsInProgress == 0)
        {
             if(CurrentBars[1] > 1)
            {
                //We have at least 1 daily bar, Times[1][0] is safe to access. 
            }
                //Additional 30 minute logic.
        }
    }
    Please let me know if I can assist further.

    Comment

    Latest Posts

    Collapse

    Topics Statistics Last Post
    Started by CarlTrading, 03-31-2026, 09:41 PM
    1 response
    43 views
    0 likes
    Last Post NinjaTrader_ChelseaB  
    Started by CarlTrading, 04-01-2026, 02:41 AM
    0 responses
    21 views
    0 likes
    Last Post CarlTrading  
    Started by CaptainJack, 03-31-2026, 11:44 PM
    0 responses
    30 views
    1 like
    Last Post CaptainJack  
    Started by CarlTrading, 03-30-2026, 11:51 AM
    0 responses
    50 views
    0 likes
    Last Post CarlTrading  
    Started by CarlTrading, 03-30-2026, 11:48 AM
    0 responses
    40 views
    0 likes
    Last Post CarlTrading  
    Working...
    X