OnCalculate method returning different values in real time and historic

Created at 10 Jul 2024, 10:42
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!
yohtza's avatar

yohtza

Joined 20.09.2023

OnCalculate method returning different values in real time and historic
10 Jul 2024, 10:42


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

namespace cAlgo
{
    [Indicator(AccessRights = AccessRights.None, IsOverlay = true)]
    public class OnCalculateIssue : Indicator
    {
       

        protected override void Initialize()
        {
           
        }

        public override void Calculate(int index)
        {
            if(index == 0) return;
            double val = Math.Abs(Bars.ClosePrices[index] - Bars.ClosePrices[index-1]);
            var txt = Chart.DrawText(index.ToString(), val.ToString("N2"), Bars.OpenTimes[index], Bars.LowPrices[index] - Symbol.PipValue*5, Color.Black);
            txt.HorizontalAlignment = HorizontalAlignment.Center;
            txt.VerticalAlignment = VerticalAlignment.Center;

        }
    }
}

@yohtza
Replies

PanagiotisCharalampous
11 Jul 2024, 06:34

Hi there,

This is by design. Calculate() method is executed once for each historical bar and then for each tick during real time operations.

Best regards,

Panagiotis


@PanagiotisCharalampous