Saltar a contenido

Gestión programática de indicadores técnicos

Los operadores a menudo confían en alguna combinación de operación manual y asistentes de operación automatizados, especialmente indicadores personalizados. Sin embargo, en muchos casos, estos asistentes son completamente ajenos entre sí y no pueden reaccionar a las acciones y resultados de los demás.

Afortunadamente, cTrader ofrece un medio conveniente para gestionar los indicadores del gráfico de forma programática. Utilizando esta función, puede crear asistentes dinámicos que lean datos de los indicadores que los usuarios añaden a un gráfico.

También puede hacer que un algoritmo añada, elimine o cambie la configuración de los indicadores basándose en algunas condiciones, lo que le permite ofrecer más valor a sus usuarios y abrir nuevas vías de monetización.

Esta guía de API explica cómo puede gestionar los indicadores del gráfico de forma programática en diferentes condiciones.

¡Gestión de indicadores del gráfico en un minuto!

  • Al gestionar los indicadores del gráfico de forma programática, puede ajustar la configuración de los indicadores (por ejemplo, el grosor de la línea) dependiendo de ciertas condiciones.
  • Los cBots pueden acceder a cualquier indicador que usted adjunte manualmente a un gráfico, leer sus datos y operar en consecuencia.
  • Sus algoritmos pueden añadir indicadores a los gráficos o eliminarlos de ellos automáticamente, ahorrándole tiempo.
  • La gestión programática de los indicadores del gráfico es posible para todos los indicadores personalizados.

Añadir y eliminar indicadores de forma programática

Puede añadir fácilmente cualquier indicador al que tenga acceso llamando al siguiente método.

1
ChartIndicator ChartIndicators.Add(string name, params object[] parameterValues)

El método toma el nombre del indicador como primer parámetro y luego toma todos los parámetros de ese indicador en secuencia (por ejemplo, "Simple Moving Average", "High", 25).

Nota

El método aceptará el nombre de cualquier indicador al que tenga acceso.

Nota

Cualquier parámetro DataSeries debe especificarse como cadenas en los argumentos del método.

Nota

Si no se especifican algunos parámetros, el método utilizará valores predeterminados. Si algunos parámetros no son válidos, el método invocará el controlador OnException para su algoritmo.

Después de que se ejecute el método, el indicador solicitado se añadirá inmediatamente a un gráfico y podrá gestionarlo utilizando el valor devuelto por el método. Por ejemplo, puede eliminarlo llamando al método ChartIndicators.Remove().

1
2
3
var newIndicator = ChartIndicators.Add("Simple Moving Average", "High", 25);
...
ChartIndicators.Remove(newIndicator);

Aquí tiene un cBot simple que utiliza ambos métodos para añadir un indicador personalizado de Bandas de Bollinger a un gráfico cada vez que el valor del Average True Range (ATR) cruza un umbral específico. Si el valor del ATR cae por debajo del umbral, el indicador se elimina.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class ChartIndicatorsTest : Robot
    {

        private AverageTrueRange _aTR;
        private ChartIndicator _customBollingerBands;

        protected override void OnStart()
        {
            _aTR = Indicators.AverageTrueRange(14, MovingAverageType.Exponential);
            ChartIndicators.Add("Average True Range");
        }

        protected override void OnBar()
        {
            if (_aTR.Result[Bars.Count - 1] >= 0.0002) 
            {
                _bollingerBands = ChartIndicators.Add("Custom BB");
            } else if (_bollingerBands != null)
            {
                ChartIndicators.Remove(_bollingerBands);
            }
        }

    }
}

Modificar la configuración de los indicadores

La interfaz ChartIndicator proporciona acceso directo a todas las configuraciones principales de los indicadores a través de las siguientes propiedades:

  • ChartIndicator.Type, que obtiene el tipo de un indicador.
  • ChartIndicator.Parameters, que obtiene una lista de todos los parámetros del indicador.
  • Lines, que obtiene una lista de todas las líneas generadas por un indicador.

Como los indicadores son ayudas visuales, puede mejorarlos modificando su configuración dependiendo de las condiciones del mercado. El siguiente indicador intenta hacer exactamente eso.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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(AccessRights = AccessRights.None, IsOverlay = true)]
    public class ColourMovingAverage : Indicator
    {

        private MovingAverage _fastMA;
        private ChartIndicator _chartMA;
        private const int __lineThickness = 4;


        protected override void Initialize()
        {
            _fastMA = Indicators.MovingAverage(Bars.OpenPrices, 10, MovingAverageType.Exponential);
            _chartMA = ChartIndicators.Add("Exponential Moving Average", "Open", 10);
        }

        public override void Calculate(int index)
        {
            var line = _chartMA.Lines[0];

            if (Symbol.Bid > _fastMA.Result[index]) 
            {
                line.Color = Color.Green;
                line.Thickness = __lineThickness;
            } else 
            {
                line.Color = Color.Red;
                line.Thickness = __lineThickness;
            }
        }
    }
}

Dependiendo de si el precio actual de un símbolo está por encima o por debajo de la media móvil exponencial, la línea del indicador cambia de color y grosor. En algunos casos (por ejemplo, reaccionar rápidamente a las tendencias cambiantes), una ayuda visual adicional puede marcar la diferencia.

Manejar eventos adicionales

La interfaz ChartsIndicators también expone varios eventos que puede manejar para gestionar de forma programática los indicadores del gráfico:

  • IndicatorAdded, que se activa cada vez que se añade un nuevo indicador a un gráfico.
  • IndicatorRemoved, que se activa cada vez que se elimina un indicador de un gráfico.
  • IndicatorModified, que se activa cada vez que se ajusta la configuración de un indicador.

Estos eventos son valiosos para los desarrolladores de plugins. A través de los plugins, puede crear nuevos elementos de la interfaz de usuario de cTrader que cambien su contenido dependiendo de si un usuario añade, elimina o modifica indicadores.

Gestión de indicadores en diferentes modos

Así es como funciona la gestión de indicadores en diferentes modos y herramientas de cTrader.

Modo/herramienta Cómo funciona
Backtesting no visual Todos los indicadores añadidos a través de ChartIndicators se mostrarán en el gráfico cuando finalice el backtesting.
Backtesting visual y Market Replay Todo funciona en tiempo real como está previsto.
Optimización Todas las operaciones funcionarán pero no se realizarán cambios en el gráfico cuando finalice el backtesting.
cTrader CLI Todas las operaciones funcionan como está previsto, pero no se realizan cambios en ningún gráfico.

La gestión programática de los indicadores del gráfico es ideal para cualquier desarrollador que quiera ofrecer algoritmos que mejoren o simplifiquen el trabajo con indicadores. Al aprovechar esta función, puede ofrecer productos de alta calidad y valiosos a sus usuarios.

Image title