IsLastBar of Indicator A not return correct value when called by indicator B

Created at 03 Mar 2016, 19:07
How’s your experience with the cTrader Platform?
Your feedback is crucial to cTrader's development. Please take a few seconds to share your opinion and help us improve your trading experience. Thanks!
JO

jonnylee.mc

Joined 03.03.2016

IsLastBar of Indicator A not return correct value when called by indicator B
03 Mar 2016, 19:07


Dear cAlgo,

I have a simple Indicator  IsLastBar_Ind, in which I check the IsLastBar and then assign a value to Result.

using System;
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.API.Indicators;
using cAlgo.Indicators;

namespace cAlgo
{
    [Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class IsLastBar_Ind : Indicator
    {
        [Parameter(DefaultValue = 0.0)]
        public double Parameter { get; set; }

        [Output("Main")]
        public IndicatorDataSeries Result { get; set; }


        protected override void Initialize()
        {
            // Initialize and create nested indicators
        }

        public override void Calculate(int index)
        {
            // Calculate value at specified index
            // Result[index] = ...
            if (IsLastBar)
            {
                Result[index] = 1;
            }
            else
            {
                Result[index] = 0;
            }

        }
    }
}

When this indicator is called within another Indicator, the Result value is not what I expected. I got nothing printed in the Indicator log.

using System;
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.API.Indicators;
using cAlgo.Indicators;

namespace cAlgo
{
    [Indicator(IsOverlay = false, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class CheckIsLastBar : Indicator
    {
        [Parameter(DefaultValue = 0.0)]
        public double Parameter { get; set; }

        [Output("Main")]
        public IndicatorDataSeries Result { get; set; }

        private IsLastBar_Ind lastbar;


        protected override void Initialize()
        {
            // Initialize and create nested indicators
            lastbar = Indicators.GetIndicator<IsLastBar_Ind>(10);
        }

        public override void Calculate(int index)
        {
            // Calculate value at specified index
            // Result[index] = ...
            if (lastbar.Result.Last(0) == 1)
            {
                Print("IsLastBar is true");
            }
        }
    }
}

When I use cBot to check  IsLastBar_Ind, I got "IsLastBar is true" printed in the cBot log.

using System;
using System.Linq;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class Test_IsLastBar : Robot
    {
        [Parameter(DefaultValue = 0.0)]
        public double Parameter { get; set; }

        private IsLastBar_Ind lastbar;

        protected override void OnStart()
        {
            // Put your initialization logic here
            lastbar = Indicators.GetIndicator<IsLastBar_Ind>(10);

        }

        protected override void OnTick()
        {
            // Put your core logic here
            if (lastbar.Result.Last(0) == 1)
            {
                Print("IsLastBar is true");
            }
        }

        protected override void OnStop()
        {
            // Put your deinitialization logic here
        }
    }
}

Could you let me know why the result is different?

And I have some questions regarding the IsLastBar.

1> Do we have different IsLastBar on different Indicators? Or just one IsLastBar for all Indicators.

2> Do we have Different IsLastBar on different TimeFrame? Or just one IsLastBar for all TimeFrame

Thanks & Regards,

jonny


@jonnylee.mc
Replies

Spotware
04 Mar 2016, 11:49

Dear Trader,

The IsLastBar method returns true, if Calculate is invoked for the last bar.

In addition, we invite you to have a look at the API Reference section of cTDN.


@Spotware