No Data NaN for M1 when using GetSeries(TimeFrame.Daily)

11 Sep 2019, 22:50No Data NaN for M1 when using GetSeries(TimeFrame.Daily)#1
radoslawkupisekposts: 4since: 05 Aug 2019

Hi, I am using  MarketData.GetSeries(TimeFrame.Daily) in my indicator to work on different time frame but also show levels from D1. It works on every time frame (D1,H1,m5, m2 etc ) but not on m1. What should I do to make it work (show/print daily levels) on 1 minute time frame?

 

 

PS How to get the Swap value of current position but in pips/points not currency? What method?

12 Sep 2019, 08:54#2
Panagiotis Charalampousposts: 3381since: 13 Jan 2017

Hi radoslawkupisek,

Thanks for posting in our forum. Please share the indicator code and exact steps to reproduce the problem. Regarding swaps, currently they are not available from the API.

Best Regards,

Panagiotis


Head of Community Management at cTrader
12 Sep 2019, 10:20#3
radoslawkupisekposts: 4since: 05 Aug 2019

There is PRC indicator which works fine, all I have changed is timeframe. I paste oryginal code below and I underline the part that has been changed by me. When I launch it on any time frame it works (shows correct D1 price levels) but not on m1.

 

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

namespace cAlgo.Indicators
{
    [Indicator(IsOverlay = true, AccessRights = AccessRights.None)]
    public class PRCD1 : Indicator
    {
        [Parameter(DefaultValue = 2.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 MarketSeries TF;
        public IndicatorDataSeries TFF;


        protected override void Initialize()
        {
            TF = MarketData.GetSeries(TimeFrame.Daily);
        }





        public override void Calculate(int index)
        {

            var index24h = GetIndexByDate(TF, MarketSeries.OpenTime[index]);
            if (index24h != -1)
            {


                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.0;
                    for (n = i0; n <= i0 + p; n++)
                    {
                        if (mi == 1)
                            sum += TF.Close[index24h - n];    // before   sum += MarketSeries.Close[index - n];
                        else
                            sum += TF.Close[index24h - n] * Math.Pow(n, mi - 1); // before  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(TF.Close[index24h - n] - prc[index - n], 2);     //before      sq += Math.Pow(MarketSeries.Close[index - n] - prc[index - n], 2);
                    sq2 += Math.Pow(TF.Close[index24h - n] - prc[index - n], 2);    //before    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);
                }
            }


        }
            

//just to check the price point
            double sqld1 = Convert.ToDouble(sql.LastValue);
            double sql2d1 = Convert.ToDouble(sql2.LastValue);
            double sqhd1 = Convert.ToDouble(sqh.LastValue);
            double sqh2d1 = Convert.ToDouble(sqh2.LastValue);
            double prclined1 = Convert.ToDouble(prc.LastValue);

            Print("d1 sql ", sqld1);
            Print("d1 sql2 ", sql2d1);
            Print("d1 sqh ", sqhd1);
            Print("d1 sqh2 ", sqh2d1);

            

                private int GetIndexByDate(MarketSeries series, DateTime time)
        {
            for (int i = series.Close.Count - 1; i > 0; i--)
            {
                if (time == series.OpenTime[i])
                    return i;
            }
            return -1;
        }

    }
}

12 Sep 2019, 11:04#4
Panagiotis Charalampousposts: 3381since: 13 Jan 2017

Hi radoslawkupisek,

Unfortunately the code you posted here does not build

Best Regards,

Panagiotis


Head of Community Management at cTrader
12 Sep 2019, 18:48#5
radoslawkupisekposts: 4since: 05 Aug 2019

cause of Print method. The right code below

 

 

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

namespace cAlgo.Indicators
{
    [Indicator(IsOverlay = true, AccessRights = AccessRights.None)]
    public class PRCD1 : Indicator
    {
        [Parameter(DefaultValue = 2.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 MarketSeries TF;
        public IndicatorDataSeries TFF;

        protected override void Initialize()
        {
            TF = MarketData.GetSeries(TimeFrame.Daily);
        }




        public override void Calculate(int index)
        {

            var index24h = GetIndexByDate(TF, MarketSeries.OpenTime[index]);
            if (index24h != -1)
            {

                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.0;
                    for (n = i0; n <= i0 + p; n++)
                    {
                        if (mi == 1)
                            sum += TF.Close[index24h - n];
                        else
                            // before   sum += MarketSeries.Close[index - n];
                            sum += TF.Close[index24h - n] * Math.Pow(n, mi - 1);
                        // before  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(TF.Close[index24h - n] - prc[index - n], 2);
                    //before      sq += Math.Pow(MarketSeries.Close[index - n] - prc[index - n], 2);
                    sq2 += Math.Pow(TF.Close[index24h - n] - prc[index - n], 2);
                    //before    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);
                }
            }


//just to check the price point
            Print("d1 sql ", sql);
            Print("d1 sql2 ", sql2);
            Print("d1 sqh ", sqh);
            Print("d1 sqh2 ", sqh2);
        }

        private int GetIndexByDate(MarketSeries series, DateTime time)
        {
            for (int i = series.Close.Count - 1; i > 0; i--)
            {
                if (time == series.OpenTime[i])
                    return i;
            }
            return -1;
        }
    }
}

13 Sep 2019, 09:01#6
Panagiotis Charalampousposts: 3381since: 13 Jan 2017

Hi radoslawkupisek,

The problem is with your GetIndexByDate() method. To fix it just replace line 74 with the one below

var index24h = TF.OpenTime.GetIndexByTime(MarketSeries.OpenTime[index]);

Best regards,

Panagiotis


Head of Community Management at cTrader