KF_Mtf_Channels_v5 free

by gmkenneyy in category Trend at 09/11/2022
Description

For those of us who utilise price channels on our charts, this indicator makes life easier 

You can add up to 4 moving average channels of (different timeframes) super-imposed onto the current chart 

Notification Publishing copyrighted material is strictly prohibited. If you believe there is copyrighted material in this section you may use the Copyright Infringement Notification form to submit a claim.
Formula / Source Code
Language: C#
Trading Platform: cAlgocTrader
using cAlgo.API;
using cAlgo.API.Indicators;

namespace cAlgo
{
    public enum TimeFrameE
    {
        Current_Chart,
        M1,
        M2,
        M3,
        M4,
        M5,
        M6,
        M7,
        M8,
        M9,
        M10,
        M15,
        M20,
        M30,
        M45,

        H1,
        H2,
        H3,
        H4,
        H6,
        H8,
        H12,

        D1,
        D2,
        D3,

        W1,

        MN1
    }

    [Cloud("C1Top", "C1Btm")]
    [Cloud("C2Top", "C2Btm")]
    [Cloud("C3Top", "C3Btm")]
    [Cloud("C4Top", "C4Btm")]
    [Indicator(IsOverlay = true, AccessRights = AccessRights.None)]
    public class KF_Mtf_Channels_v5 : Indicator
    {
        #region Settings

        [Parameter("C1_Enabled", DefaultValue = true, Group = "Channel 1")]
        public bool C1_Enabled { get; set; }

        [Parameter("C1_Period", DefaultValue = 200, Group = "Channel 1")]
        public int C1_Period { get; set; }

        [Parameter("C1_MaType", DefaultValue = MovingAverageType.Exponential, Group = "Channel 1")]
        public MovingAverageType C1_MaType { get; set; }

        [Parameter("C1_TimeFrame", DefaultValue = TimeFrameE.Current_Chart, Group = "Channel 1")]
        public TimeFrameE C1_TimeFrame { get; set; }




        [Parameter("C2_Enabled", DefaultValue = true, Group = "Channel 2")]
        public bool C2_Enabled { get; set; }

        [Parameter("C2_Period", DefaultValue = 480, Group = "Channel 2")]
        public int C2_Period { get; set; }

        [Parameter("C2_MaType", DefaultValue = MovingAverageType.WilderSmoothing, Group = "Channel 2")]
        public MovingAverageType C2_MaType { get; set; }

        [Parameter("C2_TimeFrame", DefaultValue = TimeFrameE.Current_Chart, Group = "Channel 2")]
        public TimeFrameE C2_TimeFrame { get; set; }





        [Parameter("C3_Enabled", DefaultValue = true, Group = "Channel 3")]
        public bool C3_Enabled { get; set; }

        [Parameter("C3_Period", DefaultValue = 20, Group = "Channel 3")]
        public int C3_Period { get; set; }

        [Parameter("C3_MaType", DefaultValue = MovingAverageType.Simple, Group = "Channel 3")]
        public MovingAverageType C3_MaType { get; set; }

        [Parameter("C3_TimeFrame", DefaultValue = TimeFrameE.H4, Group = "Channel 3")]
        public TimeFrameE C3_TimeFrame { get; set; }





        [Parameter("C4_Enabled", DefaultValue = false, Group = "Channel 4")]
        public bool C4_Enabled { get; set; }

        [Parameter("C4_Period", DefaultValue = 10, Group = "Channel 4")]
        public int C4_Period { get; set; }

        [Parameter("C4_MaType", DefaultValue = MovingAverageType.WilderSmoothing, Group = "Channel 4")]
        public MovingAverageType C4_MaType { get; set; }

        [Parameter("C4_TimeFrame", DefaultValue = TimeFrameE.H4, Group = "Channel 4")]
        public TimeFrameE C4_TimeFrame { get; set; }

        #endregion

        #region Lines & Styles

        [Output("C1Top", LineColor = "Aqua")]
        public IndicatorDataSeries C1Top { get; set; }

        [Output("C1Btm", LineColor = "Aqua")]
        public IndicatorDataSeries C1Btm { get; set; }

        [Output("C1Mid", LineColor = "Aqua", Thickness = 5, LineStyle = LineStyle.Lines)]
        public IndicatorDataSeries C1Mid { get; set; }



        [Output("C2Top", LineColor = "Chartreuse")]
        public IndicatorDataSeries C2Top { get; set; }

        [Output("C2Btm", LineColor = "Chartreuse")]
        public IndicatorDataSeries C2Btm { get; set; }

        [Output("C2Mid", LineColor = "Chartreuse", Thickness = 4, LineStyle = LineStyle.Lines)]
        public IndicatorDataSeries C2Mid { get; set; }



        [Output("C3Top", LineColor = "Red")]
        public IndicatorDataSeries C3Top { get; set; }

        [Output("C3Btm", LineColor = "Red")]
        public IndicatorDataSeries C3Btm { get; set; }

        [Output("C3Mid", LineColor = "Red", Thickness = 4, LineStyle = LineStyle.Lines)]
        public IndicatorDataSeries C3Mid { get; set; }



        [Output("C4Top", LineColor = "Indigo")]
        public IndicatorDataSeries C4Top { get; set; }

        [Output("C4Btm", LineColor = "Indigo")]
        public IndicatorDataSeries C4Btm { get; set; }

        [Output("C4Mid", LineColor = "Indigo", Thickness = 4, LineStyle = LineStyle.Lines)]
        public IndicatorDataSeries C4Mid { get; set; }

        #endregion

        private MovingAverage _c1T, _c1B, _c1M, _c2T, _c2B, _c2M, _c3T, _c3B, _c3M, _c4T,
        _c4B, _c4M;

        private Bars _c1, _c2, _c3, _c4;

        private TimeFrame ToTimeFrame(TimeFrameE tfe)
        {
            TimeFrame tmp = Chart.TimeFrame;

            switch (tfe)
            {
                case TimeFrameE.Current_Chart:
                    tmp = Chart.TimeFrame;
                    break;
                case TimeFrameE.D1:
                    tmp = TimeFrame.Daily;
                    break;
                case TimeFrameE.D2:
                    tmp = TimeFrame.Day2;
                    break;
                case TimeFrameE.D3:
                    tmp = TimeFrame.Day3;
                    break;
                case TimeFrameE.H1:
                    tmp = TimeFrame.Hour;
                    break;
                case TimeFrameE.H12:
                    tmp = TimeFrame.Hour12;
                    break;
                case TimeFrameE.H2:
                    tmp = TimeFrame.Hour2;
                    break;
                case TimeFrameE.H3:
                    tmp = TimeFrame.Hour3;
                    break;
                case TimeFrameE.H4:
                    tmp = TimeFrame.Hour4;
                    break;
                case TimeFrameE.H6:
                    tmp = TimeFrame.Hour6;
                    break;
                case TimeFrameE.H8:
                    tmp = TimeFrame.Hour8;
                    break;
                case TimeFrameE.M1:
                    tmp = TimeFrame.Minute;
                    break;
                case TimeFrameE.M10:
                    tmp = TimeFrame.Minute10;
                    break;
                case TimeFrameE.M15:
                    tmp = TimeFrame.Minute15;
                    break;
                case TimeFrameE.M2:
                    tmp = TimeFrame.Minute2;
                    break;
                case TimeFrameE.M20:
                    tmp = TimeFrame.Minute20;
                    break;
                case TimeFrameE.M3:
                    tmp = TimeFrame.Minute3;
                    break;
                case TimeFrameE.M30:
                    tmp = TimeFrame.Minute30;
                    break;
                case TimeFrameE.M4:
                    tmp = TimeFrame.Minute4;
                    break;
                case TimeFrameE.M45:
                    tmp = TimeFrame.Minute45;
                    break;
                case TimeFrameE.M5:
                    tmp = TimeFrame.Minute5;
                    break;
                case TimeFrameE.M6:
                    tmp = TimeFrame.Minute6;
                    break;
                case TimeFrameE.M7:
                    tmp = TimeFrame.Minute7;
                    break;
                case TimeFrameE.M8:
                    tmp = TimeFrame.Minute8;
                    break;
                case TimeFrameE.M9:
                    tmp = TimeFrame.Minute9;
                    break;
                case TimeFrameE.MN1:
                    tmp = TimeFrame.Monthly;
                    break;
                case TimeFrameE.W1:
                    tmp = TimeFrame.Weekly;
                    break;
            }

            return tmp;
            ;
        }


        protected override void Initialize()
        {
            if (C1_Enabled)
            {
                var c1_Tf = ToTimeFrame(C1_TimeFrame);

                _c1 = c1_Tf == Chart.TimeFrame ? Bars : MarketData.GetBars(c1_Tf);

                _c1T = Indicators.MovingAverage(_c1.HighPrices, C1_Period, C1_MaType);
                _c1B = Indicators.MovingAverage(_c1.LowPrices, C1_Period, C1_MaType);
                _c1M = Indicators.MovingAverage(_c1.ClosePrices, C1_Period, C1_MaType);
            }

            if (C2_Enabled)
            {
                var c2_Tf = ToTimeFrame(C2_TimeFrame);

                _c2 = c2_Tf == Chart.TimeFrame ? Bars : MarketData.GetBars(c2_Tf);

                _c2T = Indicators.MovingAverage(_c2.HighPrices, C2_Period, C2_MaType);
                _c2B = Indicators.MovingAverage(_c2.LowPrices, C2_Period, C2_MaType);
                _c2M = Indicators.MovingAverage(_c2.ClosePrices, C2_Period, C2_MaType);
            }

            if (C3_Enabled)
            {
                var c3_Tf = ToTimeFrame(C3_TimeFrame);

                _c3 = c3_Tf == Chart.TimeFrame ? Bars : MarketData.GetBars(c3_Tf);

                _c3T = Indicators.MovingAverage(_c3.HighPrices, C3_Period, C3_MaType);
                _c3B = Indicators.MovingAverage(_c3.LowPrices, C3_Period, C3_MaType);
                _c3M = Indicators.MovingAverage(_c3.ClosePrices, C3_Period, C3_MaType);
            }

            if (C4_Enabled)
            {
                var c4_Tf = ToTimeFrame(C4_TimeFrame);

                _c4 = c4_Tf == Chart.TimeFrame ? Bars : MarketData.GetBars(c4_Tf);

                _c4T = Indicators.MovingAverage(_c4.HighPrices, C4_Period, C4_MaType);
                _c4B = Indicators.MovingAverage(_c4.LowPrices, C4_Period, C4_MaType);
                _c4M = Indicators.MovingAverage(_c4.ClosePrices, C4_Period, C4_MaType);
            }
        }


        public override void Calculate(int index)
        {
            if (C1_Enabled)
            {
                var index1 = _c1.TimeFrame == Chart.TimeFrame ? index : _c1.OpenTimes.GetIndexByTime(Bars.OpenTimes[index]);
                if (index1 < 0)
                {
                    return;
                }

                _c1T.Calculate(index1);
                _c1B.Calculate(index1);
                _c1M.Calculate(index1);

                C1Top[index] = _c1T.Result[index1];
                C1Btm[index] = _c1B.Result[index1];
                C1Mid[index] = _c1M.Result[index1];

                var tmp1 = _c1.TimeFrame == Chart.TimeFrame ? index - 1 : _c1.OpenTimes.GetIndexByTime(Bars.OpenTimes[index - 1]);

                int lastIdx1 = Bars.OpenTimes.GetIndexByTime(_c1.OpenTimes[index1]);
                int lastIdx2 = Bars.OpenTimes.GetIndexByTime(_c1.OpenTimes[tmp1]);
                if (lastIdx1 == lastIdx2 && _c1.TimeFrame != Chart.TimeFrame)
                {
                    C1Top[index - 1] = double.NaN;
                    C1Btm[index - 1] = double.NaN;
                    C1Mid[index - 1] = double.NaN;
                }
            }

            if (C2_Enabled)
            {
                var index2 = _c2.TimeFrame == Chart.TimeFrame ? index : _c2.OpenTimes.GetIndexByTime(Bars.OpenTimes[index]);
                if (index2 < 0)
                {
                    return;
                }

                _c2T.Calculate(index2);
                _c2B.Calculate(index2);
                _c2M.Calculate(index2);

                C2Top[index] = _c2T.Result[index2];
                C2Btm[index] = _c2B.Result[index2];
                C2Mid[index] = _c2M.Result[index2];

                var tmp2 = _c2.TimeFrame == Chart.TimeFrame ? index - 1 : _c2.OpenTimes.GetIndexByTime(Bars.OpenTimes[index - 1]);

                int lastIdx1 = Bars.OpenTimes.GetIndexByTime(_c2.OpenTimes[index2]);
                int lastIdx2 = Bars.OpenTimes.GetIndexByTime(_c2.OpenTimes[tmp2]);
                if (lastIdx1 == lastIdx2 && _c2.TimeFrame != Chart.TimeFrame)
                {
                    C2Top[index - 1] = double.NaN;
                    C2Btm[index - 1] = double.NaN;
                    C2Mid[index - 1] = double.NaN;
                }
            }

            if (C3_Enabled)
            {
                var index3 = _c3.TimeFrame == Chart.TimeFrame ? index : _c3.OpenTimes.GetIndexByTime(Bars.OpenTimes[index]);
                if (index3 < 0)
                {
                    return;
                }

                _c3T.Calculate(index3);
                _c3B.Calculate(index3);
                _c3M.Calculate(index3);

                C3Top[index] = _c3T.Result[index3];
                C3Btm[index] = _c3B.Result[index3];
                C3Mid[index] = _c3M.Result[index3];

                var tmp3 = _c3.TimeFrame == Chart.TimeFrame ? index - 1 : _c3.OpenTimes.GetIndexByTime(Bars.OpenTimes[index - 1]);

                int lastIdx1 = Bars.OpenTimes.GetIndexByTime(_c3.OpenTimes[index3]);
                int lastIdx2 = Bars.OpenTimes.GetIndexByTime(_c3.OpenTimes[tmp3]);
                if (lastIdx1 == lastIdx2 && _c3.TimeFrame != Chart.TimeFrame)
                {
                    C3Top[index - 1] = double.NaN;
                    C3Btm[index - 1] = double.NaN;
                    C3Mid[index - 1] = double.NaN;
                }
            }

            if (C4_Enabled)
            {
                var index4 = _c4.TimeFrame == Chart.TimeFrame ? index : _c4.OpenTimes.GetIndexByTime(Bars.OpenTimes[index]);
                if (index4 < 0)
                {
                    return;
                }

                _c4T.Calculate(index4);
                _c4B.Calculate(index4);
                _c4M.Calculate(index4);

                C4Top[index] = _c4T.Result[index4];
                C4Btm[index] = _c4B.Result[index4];
                C4Mid[index] = _c4M.Result[index4];

                var tmp4 = _c4.TimeFrame == Chart.TimeFrame ? index - 1 : _c4.OpenTimes.GetIndexByTime(Bars.OpenTimes[index - 1]);

                int lastIdx1 = Bars.OpenTimes.GetIndexByTime(_c4.OpenTimes[index4]);
                int lastIdx2 = Bars.OpenTimes.GetIndexByTime(_c4.OpenTimes[tmp4]);
                if (lastIdx1 == lastIdx2 && _c4.TimeFrame != Chart.TimeFrame)
                {
                    C4Top[index - 1] = double.NaN;
                    C4Btm[index - 1] = double.NaN;
                    C4Mid[index - 1] = double.NaN;
                }
            }
        }
    }
}
Comments

mohsinkhatri652 - November 10, 2022 @ 16:10

Awesome article, it was exceptionally helpful! I simply began in this and I'm becoming more acquainted with it better! Cheers, keep doing awesome! 스포츠토토

bibohaha18 - November 11, 2022 @ 18:05

I think you should have a more specific plan word counter

mohsinkhatri652 - November 14, 2022 @ 14:13

I admire this article for the well-researched content and excellent wording. I got so involved in this material that I couldn’t stop reading. I am impressed with your work and skill. Thank you so much. 온라인카지노추천

gemma140622 - November 16, 2022 @ 09:54

I'm glad I came across your blog because I was confused when I did while looking for something else on Google. Anyway, I'm here now and I only have nice things to say about your wonderful post and comprehensive amusement website mapquest driving directions.

0