Extracción de datos de un indicador

Created at 07 Mar 2022, 13:59
How’s your experience with the cTrader Platform?
Your feedback is crucial to cTrader's development. Please take a few seconds to share your opinion and help us improve your trading experience. Thanks!
CU

cuervo53

Joined 07.03.2022

Extracción de datos de un indicador
07 Mar 2022, 13:59


Buenos días.

Estoy utilizando el indicador SwingHighLow y no logro extraer los datos que calcula para imprimirlos en el registro de mi CBot.

Codigo del indicador:

========================================================

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

namespace cAlgo.Indicators
{
    [Indicator(IsOverlay = true, AutoRescale = false, AccessRights = AccessRights.None)]
    public class SwingHigh : Indicator
    {
        [Parameter("Fuente")]
        public DataSeries Source { get; set; }

        [Parameter("Periodo", DefaultValue = 13, MinValue = 3)]
        public int Period { get; set; }

        [Parameter("Escala de Precision", DefaultValue = 5)]
        public int ScalePrecision { get; set; }

        [Parameter("Color del Texto", DefaultValue = "Pink")]
        public string TextColor { get; set; }

        private Colors color = Colors.White;
        private Colors colorSell = Colors.Red;
        private Colors colorBuy = Colors.Green;
        private string format;

        protected override void Initialize()
        {
            // Parse color from string, e.g. "Yellow", "Green", "Red". string must start with large letter, "Red" is valid, "red" - not.
            Enum.TryParse(TextColor, out color);

            // create string format based on scale precision, e.g "0.000" for scale precision = 3
            format = "0." + new string('0', ScalePrecision);

            UpdateLabels(true);
        }

        public override void Calculate(int index)
        {
            if (IsRealTime)
                UpdateLabels(false);
        }

        private void UpdateLabels(bool fastUpdate)
        {
            ChartObjects.RemoveAllObjects();

            int startIndex = fastUpdate ? Source.Count - 350 : 0;
            int index;
            int index2;

            index = Source.Count - 2;

            while (index >= startIndex)
            {
                if (IsLocalExtremum(index, true))
                {
                    ChartObjects.DrawText("max_" + index, Source[index].ToString(format), index, Source[index], VerticalAlignment.Top, HorizontalAlignment.Center, colorSell);
                    index = index - Period;
                }
                else
                    index--;
            }
            index2 = Source.Count - 2;
            while (index2 >= startIndex)
            {
                if (IsLocalExtremumM(index2, true))
                {
                    ChartObjects.DrawText("min_" + index2, Source[index2].ToString(format), index2, Source[index2], VerticalAlignment.Bottom, HorizontalAlignment.Center, colorBuy);
                    index2 = index2 - Period;
                }
                else

                    index2--;
            }
            var lastIndex = Source.Count - 1;

        }

        private bool IsLocalExtremum(int index, bool findMax)
        {
            int end = Math.Min(index + Period, Source.Count - 1);
            int start = Math.Max(index - Period, 0);

            double value = Source[index];

            for (int i = start; i <= end; i++)
            {
                if (findMax && value < Source[i])
                    return false;

                if (!findMax && value > Source[i])
                    return false;
            }
            return true;
        }
        private bool IsLocalExtremumM(int index2, bool findMin)
        {
            int start = Math.Min(index2 + Period, Source.Count - 1);
            int end = Math.Max(index2 - Period, 0);

            double value = Source[index2];

            for (int i = start; i <= end; i++)
            {
                if (findMin && value < Source[i])
                    return false;

                if (!findMin && value > Source[i])
                    return false;
            }
            return true;
        }
    }
}

============================================================

En mi CBot agregué

PARAMETROS 

...

 protected override void OnStart()
        {
                   Swing = Indicators.GetIndicator<SwingHighLow>(Source, Period, ScalePrecision, TextColor);

...

protected override void OnBar()
        {

  Print("SWING= " + cAlgo.Indicators.SwingHighLow.Result);

================================================================

No logro que imprima en el registro.

Alguna ayuda ?


@cuervo53
Replies

amusleh
08 Mar 2022, 09:06

Hola,

Solo brindamos soporte en inglés, el indicador que está utilizando no tiene la propiedad "Output", por lo que no hay datos que se puedan usar en su cBot.


@amusleh