콘텐츠로 이동

피보나치 되돌림을 그리는 방법

피보나치 되돌림은 자산 가격에서 잠재적인 지지 및 저항 수준을 식별하는 데 사용되는 인기 있는 기술 분석 도구입니다. 지지 및 저항 수준을 식별함으로써 트레이더는 거래 타이밍, 위험 관리, 시장 추세와의 일치 및 궁극적으로 수익 가능성을 높이는 전략적 이점을 얻습니다.

이 글과 해당 동영상에서는 차트에 피보나치 되돌림을 그리고 되돌림을 기반으로 포지션을 여는 cBot을 만드는 방법을 배우게 됩니다.

차트에 피보나치 되돌림 그리기

피보나치 되돌림은 피보나치 수열을 구현하며, 피보나치 수열은 각 숫자가 앞의 두 숫자의 합인 일련의 숫자입니다.

예시

다음은 피보나치 수열의 예입니다: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …

피보나치 되돌림 수준은 피보나치 수열에서 파생된 연속된 숫자의 비율입니다. 기술 분석 및 트레이딩에서 사용되는 인기 있는 비율은 다음과 같습니다: 0.236, 0.382, 0.5, 0.618 및 때로는 0.786.

우리는 차트에 피보나치 되돌림을 그리는 cBot을 만들 것입니다. cBot 코드에는 시작 가격, 시작 시간, 종료 가격 및 종료 시간을 나타내는 네 가지 매개변수가 제공됩니다.

cTrader Algo에서 새로 만들기 버튼을 클릭하여 "피보나치 되돌림 전략"과 같은 이름으로 cBot을 생성하세요.

네 가지 중요한 변수를 선언하세요.

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

private int _highIndex;
private int _lowIndex;

cBot을 코딩하여 지난 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
        }
    }
}

cBot을 빌드하려면 Ctrl+B 단축키를 사용하거나 빌드를 클릭하세요.

cBot의 로컬 인스턴스를 추가하세요: 인스턴스 추가를 클릭하고, 로컬 옵션을 선택한 다음, 인스턴스 추가를 클릭하세요.

인스턴스를 클릭하고 백테스트 탭으로 이동하세요. 백테스트를 위한 기간을 선택한 다음 재생 아이콘을 클릭하세요.

차트에 피보나치 되돌림이 그려진 것을 볼 수 있어야 합니다.

피보나치 되돌림 거래

코드 편집기로 돌아가서 피보나치 되돌림을 기반으로 한 간단한 전략을 구현하세요. 이 전략은 가격이 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
        }
    }
}

cBot을 다시 빌드하고 백테스트를 실행하세요.

되돌림 수준이 교차될 때마다 포지션이 열리는 것을 볼 수 있어야 합니다.

요약

이 글은 심볼 차트에 피보나치 되돌림을 그리고 되돌림에 의존하는 트레이딩 전략을 구현하는 방법을 설명했습니다.