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 NullPointStrategies, Yesterday, 05:17 AM
    0 responses
    66 views
    0 likes
    Last Post NullPointStrategies  
    Started by argusthome, 03-08-2026, 10:06 AM
    0 responses
    141 views
    0 likes
    Last Post argusthome  
    Started by NabilKhattabi, 03-06-2026, 11:18 AM
    0 responses
    76 views
    0 likes
    Last Post NabilKhattabi  
    Started by Deep42, 03-06-2026, 12:28 AM
    0 responses
    47 views
    0 likes
    Last Post Deep42
    by Deep42
     
    Started by TheRealMorford, 03-05-2026, 06:15 PM
    0 responses
    51 views
    0 likes
    Last Post TheRealMorford  
    Working...
    X