Przejdź do treści

Jak narysować zniesienia Fibonacciego

Zniesienia Fibonacciego to popularne narzędzie analizy technicznej używane do identyfikacji potencjalnych poziomów wsparcia i oporu w cenie aktywów. Identyfikując poziomy wsparcia i oporu, traderzy zyskują strategiczną przewagę w określaniu czasu swoich transakcji, zarządzaniu ryzykiem, dostosowywaniu się do trendów rynkowych i ostatecznie poprawianiu swoich szans na zyskowność.

W tym artykule i odpowiadającym mu wideo dowiesz się, jak stworzyć cBota, który rysuje zniesienia Fibonacciego na wykresie i otwiera pozycje w oparciu o zniesienia.

Narysuj zniesienie Fibonacciego na wykresie

Zniesienia Fibonacciego wykorzystują ciąg Fibonacciego, serię liczb, w której każda liczba jest sumą dwóch poprzednich.

Przykład

To jest przykład ciągu Fibonacciego: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …

Poziomy zniesienia Fibonacciego to stosunki kolejnych liczb pochodzących z ciągu Fibonacciego. Oto popularne stosunki używane w analizie technicznej i handlu: 0,236, 0,382, 0,5, 0,618, a czasami 0,786.

Stworzymy cBota, który rysuje zniesienia Fibonacciego na wykresie. W kodzie cBota zostaną podane cztery parametry reprezentujące cenę początkową, czas początkowy, cenę końcową i czas końcowy.

W cTrader Algo kliknij przycisk Nowy, aby utworzyć cBota i wprowadź nazwę, taką jak „Strategia zniesień Fibonacciego".

Zadeklaruj cztery ważne zmienne.

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

private int _highIndex;
private int _lowIndex;

Zakoduj cBota, aby wykrywał minimalne i maksymalne ceny dla ostatnich 50 słupków.

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

cTrader Algo umożliwia użytkownikom zdefiniowanie lokalizacji czasowej za pomocą czasu bezwzględnego lub względnego indeksu słupka. Użyjemy względnego indeksu słupka, aby narysować zniesienia Fibonacciego i napisać kod wykrywający indeks wysokich i niskich cen.

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

Na koniec można napisać kod rysujący zniesienia Fibonacciego na wykresie. Kolejność wysokich i niskich cen określa kierunek zniesienia Fibonacciego.

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

Możesz skopiować pełny kod poniżej:

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

Aby zbudować cBota, użyj skrótu klawiszowego Ctrl+B lub kliknij Zbuduj.

Dodaj lokalną instancję cBota: kliknij Dodaj instancję, wybierz opcję Lokalnie, a następnie kliknij Dodaj instancję.

Kliknij wystąpienie i przejdź do zakładki Backtesting. Wybierz okres dla backtestingu, a następnie kliknij ikonę odtwarzania.

Powinieneś zobaczyć Zniesienia Fibonacciego narysowane na wykresie.

Handluj zniesieniami Fibonacciego

Wróć do edytora kodu, aby wdrożyć prostą strategię opartą na zniesieniach Fibonacciego. Strategia polega na otwieraniu pozycji kupna za każdym razem, gdy cena przekroczy poziom Fibonacciego 0,618 i oczekiwane jest odbicie.

Napisz kod, który wykonuje strategię w metodzie 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);
}

Możesz skopiować pełny kod poniżej:

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

Zbuduj cBota ponownie, a następnie przetestuj go.

Powinieneś zobaczyć pozycje otwierane za każdym razem, gdy poziom zniesienia zostanie przekroczony.

Podsumowanie

Ten artykuł wyjaśnił, jak rysować zniesienia Fibonacciego na wykresie symbolu i wdrażać strategię handlową opartą na zniesieniach.