Conversione CANALE DI REGRESSIONE POLINOMIALE

Forums ProRealTime forum Italiano Supporto ProBuilder Conversione CANALE DI REGRESSIONE POLINOMIALE

Viewing 2 posts - 1 through 2 (of 2 total)
  • #124306

    using System;

    using cAlgo.API;
    using cAlgo.API.Indicators;

    namespace cAlgo.Indicators
    {
    [Indicator(IsOverlay = true, AccessRights = AccessRights.None)]
    public class PRC : Indicator
    {
    [Parameter(DefaultValue = 3.0,MinValue = 1, MaxValue = 4)]
    public int degree { get; set; }

    [Parameter(DefaultValue = 120)]
    public int period { get; set; }

    [Parameter(DefaultValue = 1.62)]
    public double strdDev { get; set; }

    [Parameter(DefaultValue = 2)]
    public double strdDev2 { get; set; }

    [Output(“PRC”,Color=Colors.Gray)]
    public IndicatorDataSeries prc { get; set; }

    [Output(“SQH”,Color=Colors.Red)]
    public IndicatorDataSeries sqh { get; set; }

    [Output(“SQL”,Color=Colors.Blue)]
    public IndicatorDataSeries sql { get; set; }

    [Output(“SQL2”,Color=Colors.Blue)]
    public IndicatorDataSeries sql2 { get; set; }

    [Output(“SQH2”,Color=Colors.Red)]
    public IndicatorDataSeries sqh2 { get; set; }

    private double[,] ai = new double[10,10];
    private double[] b = new double[10];
    private double[] x = new double[10];
    private double[] sx = new double[10];
    private double sum;
    private int ip;
    private int p;
    private int n;
    private int f;
    private double qq;
    private double mm;
    private double tt;
    private int ii;
    private int jj;
    private int kk;
    private int ll;
    private int nn;
    private double sq;
    private double sq2;
    private int i0 = 0;
    private int mi;

    public override void Calculate(int index)
    {
    ip = period;
    p = ip;
    sx[1] = p + 1;
    nn = degree + 1;
    //———————-sx——————————————————————-
    for(mi=1;mi<=nn*2-2;mi++) //
    {
    sum=0;
    for(n=i0;n<=i0+p;n++)
    {
    sum+=Math.Pow(n,mi);
    }
    sx[mi+1]=sum;
    }
    //———————-syx———–
    for(mi=1;mi<=nn;mi++)
    {
    sum=0.00000;
    for(n=i0;n<=i0+p;n++)
    {
    if(mi==1) sum+=MarketSeries.Close[index-n];
    else sum+=MarketSeries.Close[index-n]*Math.Pow(n,mi-1);
    }
    b[mi]=sum;
    }
    //===============Matrix=======================================================================================================
    for(jj=1;jj<=nn;jj++)
    {
    for(ii=1; ii<=nn; ii++)
    {
    kk=ii+jj-1;
    ai[ii,jj]=sx[kk];
    }
    }
    //===============Gauss========================================================================================================
    for(kk=1; kk<=nn-1; kk++)
    {
    ll=0;
    mm=0;
    for(ii=kk; ii<=nn; ii++) { if(Math.Abs(ai[ii,kk])>mm)
    {
    mm=Math.Abs(ai[ii,kk]);
    ll=ii;
    }
    }
    if(ll==0) return;
    if (ll!=kk)
    {
    for(jj=1; jj<=nn; jj++)
    {
    tt=ai[kk,jj];
    ai[kk,jj]=ai[ll,jj];
    ai[ll,jj]=tt;
    }
    tt=b[kk];
    b[kk]=b[ll];
    b[ll]=tt;
    }
    for(ii=kk+1;ii<=nn;ii++)
    {
    qq=ai[ii,kk]/ai[kk,kk];
    for(jj=1;jj<=nn;jj++) { if(jj==kk) ai[ii,jj]=0; else ai[ii,jj]=ai[ii,jj]-qq*ai[kk,jj]; } b[ii]=b[ii]-qq*b[kk]; } } x[nn]=b[nn]/ai[nn,nn]; for(ii=nn-1;ii>=1;ii–)
    {
    tt=0;
    for(jj=1;jj<=nn-ii;jj++)
    {
    tt=tt+ai[ii,ii+jj]*x[ii+jj];
    x[ii]=(1/ai[ii,ii])*(b[ii]-tt);
    }
    }
    sq=0.0;
    sq2=0.0;
    for(n=i0;n<=i0+p;n++)
    {
    sum=0;
    for(kk=1;kk<=degree;kk++)
    {
    sum+=x[kk+1]*Math.Pow(n,kk);
    }
    prc[index-n]=(x[1]+sum);
    sq+=Math.Pow(MarketSeries.Close[index-n]-prc[index-n],2);
    sq2+=Math.Pow(MarketSeries.Close[index-n]-prc[index-n],2);
    }
    sq=Math.Sqrt(sq/(p+1))*strdDev;
    sq2=Math.Sqrt(sq2/(p+1))*strdDev2;
    for(n=i0;n<=i0+p;n++)
    {
    sqh[index-n]=(prc[index-n]+sq);
    sql[index-n]=(prc[index-n]-sq);
    sqh2[index-n]=(prc[index-n]+sq2);
    sql2[index-n]=(prc[index-n]-sq2);
    }
    }
    }
    }

    #124311

    Il titolo è sufficiente?

    Non credi sarebbe opportuno chiedere per favore?

    Non hai notato oltre 160 righe inutili numerate, non potevi toglierle?

    Serve anche una spiegazione e delle foto dell’indicatore.

    Fai la richiesta seguendo il link dal menu di aiuto, alla voce “Ask for free code conversions”.

     

Viewing 2 posts - 1 through 2 (of 2 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login