Bỏ qua

Cách vẽ Fibonacci thoái lui

Fibonacci thoái lui là một công cụ phân tích kỹ thuật phổ biến được sử dụng để xác định các mức hỗ trợ và kháng cự tiềm năng trong giá của một tài sản. Bằng cách xác định các mức hỗ trợ và kháng cự, các nhà giao dịch có được lợi thế chiến lược trong việc định thời điểm giao dịch, quản lý rủi ro, phù hợp với xu hướng thị trường và cuối cùng là cải thiện cơ hội sinh lời.

Trong bài viết này và video tương ứng, bạn sẽ học cách tạo một cBot vẽ Fibonacci thoái lui trên biểu đồ và mở các vị thế dựa trên các mức thoái lui.

Vẽ Fibonacci thoái lui trên biểu đồ

Fibonacci thoái lui thực hiện dãy Fibonacci, một chuỗi số mà mỗi số là tổng của hai số trước đó.

Ví dụ

Đây là một ví dụ về dãy Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …

Các mức Fibonacci thoái lui là tỷ lệ của các số liên tiếp được lấy từ dãy Fibonacci. Đây là các tỷ lệ phổ biến được sử dụng trong phân tích kỹ thuật và giao dịch: 0.236, 0.382, 0.5, 0.618 và đôi khi là 0.786.

Chúng ta sẽ tạo một cBot vẽ Fibonacci thoái lui trên biểu đồ. Bốn tham số đại diện cho giá bắt đầu, thời gian bắt đầu, giá kết thúc và thời gian kết thúc sẽ được cung cấp trong mã cBot.

Trong cTrader Algo, nhấp vào nút New để tạo một cBot và nhập tên như "Fibonaci Retracement Strategy".

Khai báo bốn biến quan trọng.

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

private int _highIndex;
private int _lowIndex;

Lập trình cBot để phát hiện giá tối thiểu và tối đa cho 50 thanh cuối cùng.

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

cTrader Algo cho phép người dùng xác định vị trí thời gian thông qua thời gian tuyệt đối hoặc chỉ số thanh tương đối. Chúng ta sẽ sử dụng chỉ số thanh tương đối để vẽ Fibonacci thoái lui và viết mã để phát hiện chỉ số của giá cao và giá thấp.

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

Cuối cùng, có thể viết mã vẽ Fibonacci thoái lui trên biểu đồ. Thứ tự của giá cao và giá thấp xác định hướng của Fibonacci thoái lui.

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

Bạn có thể sao chép toàn bộ mã bên dưới:

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

Để xây dựng cBot, sử dụng phím tắt Ctrl+B hoặc nhấp vào Build.

Thêm một phiên bản cục bộ của cBot: nhấp vào Add instance, chọn tùy chọn Locally, sau đó nhấp vào Add instance.

Nhấp vào phiên bản và điều hướng đến tab Backtesting. Chọn một giai đoạn cho backtesting và sau đó nhấp vào biểu tượng play.

Bạn sẽ thấy Fibonacci thoái lui được vẽ trên biểu đồ.

Giao dịch Fibonacci thoái lui

Quay lại trình chỉnh sửa mã để triển khai một chiến lược đơn giản dựa trên Fibonacci thoái lui. Chiến lược xoay quanh việc mở vị thế mua bất cứ khi nào giá vượt qua mức Fibonacci 0.618 và dự kiến sẽ có sự phục hồi.

Viết mã thực hiện chiến lược trong phương thức 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);
}

Bạn có thể sao chép toàn bộ mã bên dưới:

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

Xây dựng lại cBot và sau đó chạy backtest.

Bạn sẽ thấy các vị thế được mở bất cứ khi nào mức thoái lui bị vượt qua.

Tóm tắt

Bài viết này đã giải thích cách vẽ Fibonacci thoái lui trên biểu đồ ký hiệu và triển khai một chiến lược giao dịch dựa trên các mức thoái lui.