Ir para o conteúdo

Como desenhar retrações de Fibonacci

As retrações de Fibonacci são uma ferramenta de análise técnica popular utilizada para identificar potenciais níveis de suporte e resistência no preço de um ativo. Ao identificar níveis de suporte e resistência, os traders ganham uma vantagem estratégica na cronometragem das suas negociações, na gestão do risco, no alinhamento com as tendências do mercado e, em última análise, na melhoria das suas hipóteses de rentabilidade.

Neste artigo e no vídeo correspondente, aprenderá a criar um cBot que desenha retrações de Fibonacci num gráfico e abre posições com base nas retrações.

Desenhar retração de Fibonacci num gráfico

As retrações de Fibonacci implementam a sequência de Fibonacci, uma série de números em que cada número é a soma dos dois anteriores.

Exemplo

Este é um exemplo de sequência de Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …

Os níveis de retração de Fibonacci são rácios de números sucessivos derivados da sequência de Fibonacci. Estes são os rácios populares utilizados na análise técnica e na negociação: 0,236, 0,382, 0,5, 0,618 e por vezes 0,786.

Vamos criar um cBot que desenha retrações de Fibonacci num gráfico. Quatro parâmetros que representam o preço inicial, o tempo inicial, o preço final e o tempo final serão fornecidos no código do cBot.

No cTrader Algo, clique no botão Novo para criar um cBot e introduza um nome como "Estratégia de Retração de Fibonacci".

Declare as quatro variáveis importantes.

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

private int _highIndex;
private int _lowIndex;

Programe o cBot para detetar os preços mínimo e máximo das últimas 50 barras.

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

O cTrader Algo permite aos utilizadores definir a localização temporal através do tempo absoluto ou do índice de barra relativo. Utilizaremos o índice de barra relativo para desenhar a retração de Fibonacci e escrever o código para detetar o índice dos preços máximo e mínimo.

 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, pode ser escrito o código que desenha as retrações de Fibonacci no gráfico. A ordem dos preços máximo e mínimo determina a direção da retração 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);

Pode copiar o código completo abaixo:

 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 criar o cBot, utilize o atalho Ctrl+B ou clique em Criar.

Adicione uma instância local do cBot: clique em Adicionar instância, selecione a opção Localmente e depois clique em Adicionar instância.

Clique na instância e navegue até ao separador Testes de verificação. Escolha um período para os testes de verificação e depois clique no ícone de reprodução.

Deverá ver as Retrações de Fibonacci desenhadas no gráfico.

Negociar a retração de Fibonacci

Volte ao editor de código para implementar uma estratégia simples baseada nas retrações de Fibonacci. A estratégia gira em torno de entrar numa posição de compra sempre que o preço cruza o nível de Fibonacci de 0,618 e se espera um ressalto.

Escreva o código que executa a estratégia no 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);
}

Pode copiar o código completo abaixo:

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

Crie o cBot novamente e depois teste-o.

Deverá ver posições a serem abertas sempre que o nível de retração é cruzado.

Resumo

Este artigo explicou como desenhar retrações de Fibonacci num gráfico de símbolo e implementar uma estratégia de negociação que depende das retrações.