Linear regression forecast and intercept

Created at 29 Sep 2016, 18:28
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!
SO

Someone123

Joined 01.09.2016

Linear regression forecast and intercept
29 Sep 2016, 18:28


Hi Does anyone have the exact code for the linear regression forecast and linear regression intercept indicators used in ctrader?


@Someone123
Replies

... Deleted by UFO ...

galafrin
30 Sep 2016, 16:42

RE:

lucian said:

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

namespace cAlgo.Indicators
{
    [Indicator(IsOverlay = true, AccessRights = AccessRights.None)]
    public class Linearregressionintercept : Indicator
    {
        [Parameter(DefaultValue = 30)]
        public int Period { get; set; }

        [Output("Main", Color = Colors.Yellow, PlotType = PlotType.Line)]
        public IndicatorDataSeries Result { get; set; }


        public override void Calculate(int index)
        {


            double sumx = 0, sumx2 = 0, sumy = 0, sumxy = 0;

            int start = (index + 1) - Period;
            int end = index;

            for (int i = start; i <= end; i++)
            {
                sumx += i;
                sumx2 += i * i;
                sumy += MarketSeries.Close[i];
                sumxy += MarketSeries.Close[i] * i;
            }

            double m = (Period * sumxy - sumx * sumy) / (Period * sumx2 - sumx * sumx);
            double b = (sumy - m * sumx) / Period;
            Result[index] = start * m + b;

        }

    }
}

 

Nice try Lucian , a correct solution would be this :

using System;
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.API.Indicators;
 
namespace cAlgo.Indicators
{
    [Indicator(IsOverlay = true, AccessRights = AccessRights.None)]
    public class Linearregressionintercept : Indicator
    {
        [Parameter(DefaultValue = 30)]
        public int Period { get; set; }
 
        [Output("LF", Color = Colors.Yellow, PlotType = PlotType.Line)]
        public IndicatorDataSeries LF { get; set; }
 
        [Output("LFI", Color = Colors.Orange, PlotType = PlotType.Line)]
        public IndicatorDataSeries LFI { get; set; }
 
  
        public override void Calculate(int index)
        {
 
 
            double sumx = 0, sumx2 = 0, sumy = 0, sumxy = 0;
 
            for (int i = 1; i <= Period; i++)
            {
                sumx += i;
                sumx2 += i * i;
                sumy += MarketSeries.Close [ index - Period + i  ] ;
                sumxy += MarketSeries.Close[ index - Period + i  ] * i ;
            }
 
            double m = (Period * sumxy - sumx * sumy) / (Period * sumx2 - sumx * sumx);
            double b = (sumy - m * sumx) / Period;
            LF[index] = Period * m + b;
            LFI[index] = b;
 
        }
 
    }
}

Btw be aware that corresponding builtin indicators are flawed from period 283 upward. I alerted Spotware to no avail yet : TimeSeries MA , LRF , LRFI , LR slope.


@galafrin

Someone123
30 Sep 2016, 19:01

Thanks guys!!!


@Someone123