Перейти к содержанию

Как рисовать уровни коррекции Фибоначчи

Уровни коррекции Фибоначчи — это популярный инструмент технического анализа, используемый для определения потенциальных уровней поддержки и сопротивления в цене актива. Определяя уровни поддержки и сопротивления, трейдеры получают стратегическое преимущество в выборе времени для сделок, управлении рисками, следовании рыночным трендам и, в конечном счете, повышении своих шансов на прибыль.

В этой статье и соответствующем видео вы узнаете, как создать сиБота, который рисует уровни коррекции Фибоначчи на графике и открывает позиции на основе коррекций.

Рисование уровней коррекции Фибоначчи на графике

Уровни коррекции Фибоначчи используют последовательность Фибоначчи — ряд чисел, в котором каждое число является суммой двух предыдущих.

Пример

Это пример последовательности Фибоначчи: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …

Уровни коррекции Фибоначчи — это соотношения последовательных чисел, полученные из последовательности Фибоначчи. Вот популярные соотношения, используемые в техническом анализе и торговле: 0,236, 0,382, 0,5, 0,618 и иногда 0,786.

Мы создадим сиБота, который рисует уровни коррекции Фибоначчи на графике. В коде сиБота будут предоставлены четыре параметра, представляющие начальную цену, время начала, конечную цену и время окончания.

В cTrader Algo нажмите кнопку Создать, чтобы создать сиБота, и введите имя, например "Fibonaci Retracement Strategy".

Объявите четыре важные переменные.

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

private int _highIndex;
private int _lowIndex;

Напишите код сиБота для определения минимальной и максимальной цен за последние 50 баров.

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

cTrader Algo позволяет пользователям определять временное расположение через абсолютное время или относительный индекс бара. Мы будем использовать относительный индекс бара для рисования уровней коррекции Фибоначчи и напишем код для определения индекса максимальных и минимальных цен.

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

Наконец, можно написать код, который рисует уровни коррекции Фибоначчи на графике. Порядок максимальных и минимальных цен определяет направление уровней коррекции Фибоначчи.

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

Вы можете скопировать полный код ниже:

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

Чтобы собрать сиБота, используйте горячую клавишу Ctrl+B или нажмите Собрать.

Добавьте локальный экземпляр сиБота: нажмите Добавить экземпляр, выберите опцию Локально, затем нажмите Добавить экземпляр.

Нажмите на экземпляр и перейдите на вкладку Бэктестинг. Выберите период для бэктестинга, а затем нажмите на значок воспроизведения.

Вы должны увидеть Уровни коррекции Фибоначчи, нарисованные на графике.

Торговля по уровням коррекции Фибоначчи

Вернитесь в редактор кода, чтобы реализовать простую стратегию на основе уровней коррекции Фибоначчи. Стратегия заключается в открытии позиции на покупку всякий раз, когда цена пересекает уровень Фибоначчи 0,618 и ожидается отскок.

Напишите код, который выполняет стратегию в методе 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);
}

Вы можете скопировать полный код ниже:

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

Снова соберите сиБота и протестируйте его.

Вы должны увидеть, как позиции открываются всякий раз, когда пересекается уровень коррекции.

Обзор

В этой статье объяснено, как рисовать уровни коррекции Фибоначчи на графике инструмента и реализовать торговую стратегию, основанную на коррекциях.