Vai al contenuto

Come disegnare i ritracciamenti di Fibonacci

I ritracciamenti di Fibonacci sono un popolare strumento di analisi tecnica utilizzato per identificare potenziali livelli di supporto e resistenza nel prezzo di un asset. Identificando i livelli di supporto e resistenza, i trader ottengono un vantaggio strategico nel temporizzare le loro operazioni, gestire il rischio, allinearsi con i trend di mercato e, in definitiva, migliorare le loro possibilità di profitto.

In questo articolo e nel video corrispondente, imparerai come creare un cBot che disegna i ritracciamenti di Fibonacci su un grafico e apre posizioni in base ai ritracciamenti.

Disegnare un ritracciamento di Fibonacci su un grafico

I ritracciamenti di Fibonacci implementano la sequenza di Fibonacci, una serie di numeri in cui ogni numero è la somma dei due precedenti.

Esempio

Questo è un esempio di sequenza di Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …

I livelli di ritracciamento di Fibonacci sono rapporti di numeri successivi derivati dalla sequenza di Fibonacci. Questi sono i rapporti più utilizzati nell'analisi tecnica e nel trading: 0,236, 0,382, 0,5, 0,618 e talvolta 0,786.

Creeremo un cBot che disegna i ritracciamenti di Fibonacci su un grafico. Nel codice del cBot verranno forniti quattro parametri che rappresentano il prezzo iniziale, l'ora iniziale, il prezzo finale e l'ora finale.

In cTrader Algo, clicca sul pulsante Nuovo per creare un cBot e inserisci un nome come "Strategia di ritracciamento di Fibonacci".

Dichiara le quattro variabili importanti.

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

private int _highIndex;
private int _lowIndex;

Codifica il cBot per rilevare i prezzi minimi e massimi delle ultime 50 barre.

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

cTrader Algo permette agli utenti di definire la posizione temporale attraverso il tempo assoluto o l'indice relativo della barra. Utilizzeremo l'indice relativo della barra per disegnare il ritracciamento di Fibonacci e scriveremo il codice per rilevare l'indice dei prezzi alti e bassi.

 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;
}

Infine, è possibile scrivere il codice che disegna i ritracciamenti di Fibonacci sul grafico. L'ordine dei prezzi alti e bassi determina la direzione del ritracciamento di 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);

Puoi copiare il codice completo qui sotto:

 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
        }
    }
}

Per compilare il cBot, usa la scorciatoia Ctrl+B o clicca su Compila.

Aggiungi un'istanza locale del cBot: clicca su Aggiungi istanza, seleziona l'opzione Localmente, quindi clicca su Aggiungi istanza.

Clicca sull'istanza e vai alla scheda Backtesting. Scegli un periodo per il backtesting e poi clicca sull'icona play.

Dovresti vedere i ritracciamenti di Fibonacci disegnati sul grafico.

Fare trading con il ritracciamento di Fibonacci

Torna all'editor di codice per implementare una strategia semplice basata sui ritracciamenti di Fibonacci. La strategia si basa sull'apertura di una posizione di acquisto ogni volta che il prezzo incrocia il livello di Fibonacci 0,618 e ci si aspetta un rimbalzo.

Scrivi il codice che esegue la strategia nel metodo 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);
}

Puoi copiare il codice completo qui sotto:

 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
        }
    }
}

Compila nuovamente il cBot e poi esegui il backtesting.

Dovresti vedere le posizioni aperte ogni volta che viene superato il livello di ritracciamento.

Questo articolo ha spiegato come disegnare i ritracciamenti di Fibonacci su un grafico di simboli e implementare una strategia di trading che si basa sui ritracciamenti.