Category Oscilators  Published on 30/11/2020

FiftyFifty

Description

Buenas tardes amig@s:

Hoy les propongo a ustedes un estudio de la reversión del cincuenta por ciento de la tendencia.

En mi opinión, es un nivel a considerar aunque hay otros niveles naturalmente, como el cien por cien. Pero a veces queda cerca y a veces queda lejos, muy lejos.

Nos vemos en el cielo.

Adios,

 


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

namespace cAlgo
{
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class FiftyFiftyOverlay : Indicator
    {

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

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

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

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

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

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

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

        private Bars tf;

        private int idx;
        private int previousIdx;
        private int buyPeriod;
        private int sellPeriod;

        private double buyAverage, sellAverage;
        private int savedbp, savedsp;
        private double maxbp, minbp, maxsp, minsp;

        protected override void Initialize()
        {
            tf = MarketData.GetBars(Bars.TimeFrame);
        }

        public override void Calculate(int index)
        {
            idx = tf.OpenTimes.GetIndexByTime(Bars.OpenTimes[index]);
            if (idx > previousIdx)
            {
                buyPeriod++;
                savedbp = buyPeriod;
                sellPeriod++;
                savedsp = sellPeriod;
            }

            if (buyPeriod == 0)
                buyPeriod = savedbp;

            if (sellPeriod == 0)
                sellPeriod = savedsp;

            buyAverage = (Bars.OpenPrices.Maximum(buyPeriod + 1) + Bars.ClosePrices.Minimum(buyPeriod + 1)) / 2;

            sellAverage = (Bars.ClosePrices.Maximum(sellPeriod + 1) + Bars.OpenPrices.Minimum(sellPeriod + 1)) / 2;

            if (Bars.ClosePrices[index] > buyAverage)
            {
                buyAverage = Bars.ClosePrices[index];
                buyPeriod = 0;
            }

            if (Bars.ClosePrices[index] < sellAverage)
            {
                sellAverage = Bars.ClosePrices[index];
                sellPeriod = 0;
            }

            //--------------------------------------------------------------------------------------------------------------------------------------------------------

            if (buyPeriod > 0)
            {
                maxbp = Bars.OpenPrices.Maximum(buyPeriod + 1);
                minbp = Bars.ClosePrices.Minimum(buyPeriod + 1);
            }

            if (buyPeriod == 0)
            {
                maxbp = Bars.ClosePrices[index];
                minbp = Bars.OpenPrices[index];
            }

            //--------------------------------------------------------------------------------------------------------------------------------------------------------

            if (sellPeriod > 0)
            {
                maxsp = Bars.ClosePrices.Maximum(sellPeriod + 1);
                minsp = Bars.OpenPrices.Minimum(sellPeriod + 1);
            }

            if (sellPeriod == 0)
            {
                maxsp = Bars.OpenPrices[index];
                minsp = Bars.ClosePrices[index];
            }

            //--------------------------------------------------------------------------------------------------------------------------------------------------------

            //Result1[index] = maxsp;
            //Result2[index] = minsp;
            Result3[index] = sellAverage;

            //Result4[index] = maxbp;
            //Result5[index] = minbp;
            Result6[index] = buyAverage;

            Result7[index] = (buyAverage + sellAverage) / 2;

            previousIdx = idx;
        }
    }
}


srm_bcn's avatar
srm_bcn

Joined on 01.09.2019

  • Distribution: Free
  • Language: C#
  • Trading platform: cTrader Automate
  • File name: FiftyFiftyOverlay.algo
  • Rating: 0
  • Installs: 1168
Comments
Log in to add a comment.
No comments found.