Saltar a contenido

Cómo dibujar retrocesos de Fibonacci

Los Retrocesos de Fibonacci son una herramienta popular de análisis técnico utilizada para identificar posibles niveles de soporte y resistencia en el precio de un activo. Al identificar niveles de soporte y resistencia, los operadores obtienen una ventaja estratégica para cronometrar sus operaciones, gestionar el riesgo, alinearse con las tendencias del mercado y, en última instancia, mejorar sus posibilidades de rentabilidad.

En este artículo y su video correspondiente, aprenderá cómo crear un cBot que dibuja Retrocesos de Fibonacci en un gráfico y abre posiciones basadas en retrocesos.

Dibujar retroceso de Fibonacci en un gráfico

Los Retrocesos de Fibonacci implementan la secuencia de Fibonacci, una serie de números donde cada número es la suma de los dos anteriores.

Ejemplo

Este es un ejemplo de secuencia de Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …

Los niveles de Retroceso de Fibonacci son ratios de números sucesivos derivados de la secuencia de Fibonacci. Estos son los ratios populares utilizados en análisis técnico y trading: 0.236, 0.382, 0.5, 0.618 y a veces 0.786.

Crearemos un cBot que dibuja Retrocesos de Fibonacci en un gráfico. Se proporcionarán cuatro parámetros que representan el precio inicial, el tiempo inicial, el precio final y el tiempo final en el código del cBot.

En cTrader Algo, haga clic en el botón Nuevo para crear un cBot e introduzca un nombre como "Estrategia de Retroceso de Fibonacci".

Declare las cuatro variables importantes.

1
2
3
4
5
private double _max;
private double _min;

private int _highIndex;
private int _lowIndex;

Codifique el cBot para detectar los precios mínimos y máximos de las últimas 50 barras.

1
2
_max = Bars.HighPrices.Maximum(50);
_min = Bars.LowPrices.Minimum(50);

cTrader Algo permite a los usuarios definir la ubicación temporal a través del tiempo absoluto o el índice de barra relativo. Usaremos el índice de barra relativo para dibujar el retroceso de Fibonacci y escribiremos el código para detectar el índice de los precios máximos y mínimos.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
for (int i = 0; i <= 50; i++)
{
     if (Bars.HighPrices.Last(i) == _max)
          _highIndex = Bars.Count - i - 1;
}

for (int i = 0; i <= 50; i++)
{
     if (Bars.LowPrices.Last(i) == _min)
          _lowIndex = Bars.Count - i - 1;
}

Finalmente, se puede escribir el código que dibuja los Retrocesos de Fibonacci en el gráfico. El orden de los precios máximos y mínimos determina la dirección del retroceso de Fibonacci.

1
2
3
4
if (_highIndex > _lowIndex)
     Chart.DrawFibonacciRetracement("fibo", _lowIndex, _min, _highIndex, _max, Color.Yellow);
else
     Chart.DrawFibonacciRetracement("fibo", _highIndex, _max, _lowIndex, _min, Color.Yellow);

Puede copiar el código completo a continuación:

 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
43
44
45
46
47
48
49
50
51
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None, AddIndicators = true)]
    public class FibonacciRetracementStrategy : Robot
    {
        private double _max;
        private double _min;

        private int _highIndex;
        private int _lowIndex;

        protected override void OnStart()
        {
            _max = Bars.HighPrices.Maximum(50);
            _min = Bars.LowPrices.Minimum(50);

            for (int i = 0; i <= 50; i++)
            {
                if (Bars.HighPrices.Last(i) == _max)
                    _highIndex = Bars.Count - i - 1;
            }

            for (int i = 0; i <= 50; i++)
            {
                if (Bars.LowPrices.Last(i) == _min)
                    _lowIndex = Bars.Count - i - 1;
            }

            if (_highIndex > _lowIndex)
                Chart.DrawFibonacciRetracement("fibo", _lowIndex, _min, _highIndex, _max, Color.Yellow);
            else
                Chart.DrawFibonacciRetracement("fibo", _highIndex, _max, _lowIndex, _min, Color.Yellow);
        }

        protected override void OnTick()
        {
            // Handle price updates here
        }

        protected override void OnStop()
        {
            // Handle cBot stop here
        }
    }
}

Para construir el cBot, use el atajo Ctrl+B o haga clic en Construir.

Añada una instancia local del cBot: haga clic en Añadir instancia, seleccione la opción Localmente y luego haga clic en Añadir instancia.

Haga clic en la instancia y navegue a la pestaña Backtesting. Elija un período para el backtesting y luego haga clic en el icono de reproducción.

Debería ver los Retrocesos de Fibonacci dibujados en el gráfico.

Operar el retroceso de Fibonacci

Vuelva al editor de código para implementar una estrategia simple basada en los retrocesos de Fibonacci. La estrategia gira en torno a entrar en una posición de compra cada vez que el precio cruza el nivel de Fibonacci de 0.618 y se espera un rebote.

Escriba el código que ejecuta la estrategia en el método OnTick().

1
2
3
4
5
protected override void OnTick()
{
     if (Positions.Count == 0 && Bid < _min + ((_max - _min) * 0.618))
          ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000);
}

Puede copiar el código completo a continuación:

 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
43
44
45
46
47
48
49
50
51
52
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None, AddIndicators = true)]
    public class FibonacciRetracementStrategy : Robot
    {
        private double _max;
        private double _min;

        private int _highIndex;
        private int _lowIndex;

        protected override void OnStart()
        {
            _max = Bars.HighPrices.Maximum(50);
            _min = Bars.LowPrices.Minimum(50);

            for (int i = 0; i <= 50; i++)
            {
                if (Bars.HighPrices.Last(i) == _max)
                    _highIndex = Bars.Count - i - 1;
            }

            for (int i = 0; i <= 50; i++)
            {
                if (Bars.LowPrices.Last(i) == _min)
                    _lowIndex = Bars.Count - i - 1;
            }

            if (_highIndex > _lowIndex)
                Chart.DrawFibonacciRetracement("fibo", _lowIndex, _min, _highIndex, _max, Color.Yellow);
            else
                Chart.DrawFibonacciRetracement("fibo", _highIndex, _max, _lowIndex, _min, Color.Yellow);
        }

        protected override void OnTick()
        {
            if (Positions.Count == 0 && Bid < _min + ((_max - _min) * 0.618))
                ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000);
        }

        protected override void OnStop()
        {
            // Handle cBot stop here
        }
    }
}

Construya el cBot de nuevo y luego haga un backtesting.

Debería ver posiciones abiertas cada vez que se cruza el nivel de retroceso.

Resumen

Este artículo ha explicado cómo dibujar retrocesos de Fibonacci en un gráfico de símbolo e implementar una estrategia de trading que se basa en los retrocesos.