Category Trend  Published on 12/02/2024

Andrey4668

Description

Hgcfcgh


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo
{
    [Indicator(IsOverlay = false, AccessRights = AccessRights.None)]
    public class PVTTrendHunter : Indicator
    {
        [Parameter(DefaultValue = 34)]
        public int PeriodLookBack { get; set; }
        [Parameter(DefaultValue = 5)]
        public int PeriodSmooth { get; set; }
        [Parameter(DefaultValue = MovingAverageType.Weighted)]
        public MovingAverageType MaTypeSmooth { get; set; }

        [Parameter(DefaultValue = 100)]
        public double Range { get; set; }

        [Parameter(DefaultValue = 34)]
        public int PeriodSignal { get; set; }
        [Parameter(DefaultValue = MovingAverageType.Weighted)]
        public MovingAverageType MaTypeSignal { get; set; }

        [Parameter(DefaultValue = "true")]
        public bool ExtraRange { get; set; }

        [Output("High", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, LineColor = "B000FF00")]
        public IndicatorDataSeries High { get; set; }
        [Output("Mid", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, LineColor = "Gray")]
        public IndicatorDataSeries Mid { get; set; }
        [Output("Low", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, LineColor = "B3FF0000")]
        public IndicatorDataSeries Low { get; set; }

        [Output("UpZone", PlotType = PlotType.DiscontinuousLine, LineColor = "Lime")]
        public IndicatorDataSeries UpZone { get; set; }
        [Output("DownZone", PlotType = PlotType.DiscontinuousLine, LineColor = "Red")]
        public IndicatorDataSeries DownZone { get; set; }

        [Output("HighMid", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, LineColor = "AEFFD700")]
        public IndicatorDataSeries HighMid { get; set; }
        [Output("LowMid", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, LineColor = "AEFFD700")]
        public IndicatorDataSeries LowMid { get; set; }

        [Output("RangeSup", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, LineColor = "Gray")]
        public IndicatorDataSeries RangeSup { get; set; }
        [Output("RangeInf", PlotType = PlotType.Line, LineStyle = LineStyle.LinesDots, LineColor = "Gray")]
        public IndicatorDataSeries RangeInf { get; set; }

        [Output("Res", LineColor = "DeepSkyBlue")]
        public IndicatorDataSeries Res { get; set; }
        [Output("Signal", LineColor = "Magenta")]
        public IndicatorDataSeries Signal { get; set; }

        private IndicatorDataSeries high, low, range;
        private PriceVolumeTrend pvt;
        private MovingAverage ma, smoothPvt;
        private int direction;

        protected override void Initialize()
        {
            high = CreateDataSeries();
            low = CreateDataSeries();
            range = CreateDataSeries();
            pvt = Indicators.PriceVolumeTrend(Bars.ClosePrices);
            smoothPvt = Indicators.MovingAverage(pvt.Result, PeriodSmooth, MaTypeSmooth);
            ma = Indicators.MovingAverage(smoothPvt.Result, PeriodSignal, MaTypeSignal);
        }

        public override void Calculate(int index)
        {
            high[index] = smoothPvt.Result.Maximum(PeriodLookBack);
            low[index] = smoothPvt.Result.Minimum(PeriodLookBack);
            range[index] = Range;
            Res[index] = smoothPvt.Result.Last(0);
            Signal[index] = ma.Result.Last(0);

            if (smoothPvt.Result.Last(0) > (double.IsNaN(High[index - 1]) ? high[index - 1] : High[index - 1]))
            {
                High[index] = smoothPvt.Result.Last(0);
                Low[index] = smoothPvt.Result.Last(0) - range[index];
                Mid[index] = (High[index] - Low[index]) / 2 + Low[index];
                HighMid[index] = High[index] - ((High[index] - Mid[index]) / 4);
                LowMid[index] = ((Mid[index] - Low[index]) / 4) + Low[index];

                if (ExtraRange)
                {
                    RangeSup[index] = HighMid[index] + range[index];
                    RangeInf[index] = LowMid[index] - range[index];
                }
            }

            else if (smoothPvt.Result.Last(0) < (double.IsNaN(Low[index - 1]) ? low[index - 1] : Low[index - 1]))
            {
                Low[index] = smoothPvt.Result.Last(0);
                High[index] = smoothPvt.Result.Last(0) + range[index];
                Mid[index] = (High[index] - Low[index]) / 2 + Low[index];
                HighMid[index] = High[index] - ((High[index] - Mid[index]) / 4);
                LowMid[index] = ((Mid[index] - Low[index]) / 4) + Low[index];
                if (ExtraRange)
                {
                    RangeSup[index] = HighMid[index] + range[index];
                    RangeInf[index] = LowMid[index] - range[index];
                }
            }

            else
            {
                High[index] = High[index - 1];
                Low[index] = Low[index - 1];
                Mid[index] = Mid[index - 1];
                HighMid[index] = HighMid[index - 1];
                LowMid[index] = LowMid[index - 1];
                if (ExtraRange)
                {
                    RangeSup[index] = RangeSup[index - 1];
                    RangeInf[index] = RangeInf[index - 1];

                }
            }

            direction = Mid[index] > Mid[index - 1] ? 1 : Mid[index] < Mid[index - 1] ? -1 : direction;
            UpZone[index] = direction == 1 ? Mid[index] : double.NaN;
            DownZone[index] = direction == -1 ? Mid[index] : double.NaN;
        }
    }
}

SM
smalandrey63

Joined on 12.02.2024

  • Distribution: Free
  • Language: C#
  • Trading platform: cTrader Automate
  • File name: PVT Trend Hunter.algo
  • Rating: 0
  • Installs: 168
Comments
Log in to add a comment.
asc444555@gmail.com's avatar
asc444555@gmail.com · 4 months ago

COVES ANDREY.

TINT TO ADROLLA.

AFOLT EVZ RAMINER.

HTS.