Bỏ qua

Breakout cBot

Tổng quan chiến lược

Breakout cBot tận dụng các khoảnh khắc khi giá của một cặp tiền tệ vượt qua mức hỗ trợ hoặc kháng cự được xác định trước.

cBot này theo dõi sự hợp nhất giá bằng cách so sánh khoảng cách giữa Bollinger Bands trên và dưới với ngưỡng do người dùng xác định và sau đó thực hiện các hành động sau:

  • Nếu giá của cặp tiền tệ vẫn nằm trong phạm vi hợp nhất trong một số chu kỳ nhất định, cBot sẽ xác định thị trường đang trong giai đoạn hợp nhất.
  • Nếu giá phá vỡ trên dải trên, cBot sẽ mở một vị thế mua. Nếu giá phá vỡ dưới dải dưới, cBot sẽ mở một vị thế bán.
  • Khi mở một vị thế, cBot sẽ áp dụng các giá trị cắt lỗ và chốt lời do người dùng xác định.

cBot khai thác các chuyển động phá vỡ sau giai đoạn hợp nhất, làm cho nó phù hợp với các thị trường hoặc cặp tiền tệ có các giai đoạn hợp nhất rõ ràng và các chuyển động theo hướng mạnh.

Tạo cBot

Tìm hiểu cách tạo cBot, sử dụng C# hoặc Python, trong các hướng dẫn từng bước của chúng tôi.

Mã Breakout cBot có sẵn trong kho lưu trữ công khai C#Python của chúng tôi. Mã tương tự được cung cấp dưới dạng mẫu trong trình hướng dẫn tạo thuật toán trong cTrader Windows hoặc Mac, hoặc bạn có thể đơn giản sao chép và sử dụng đoạn 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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None, AddIndicators = true)]
    public class SampleBreakoutcBot : Robot
    {
        [Parameter("Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double Quantity { get; set; }

        [Parameter("Stop Loss (pips)", Group = "Protection", DefaultValue = 20, MinValue = 1)]
        public int StopLossInPips { get; set; }

        [Parameter("Take Profit (pips)", Group = "Protection", DefaultValue = 40, MinValue = 1)]
        public int TakeProfitInPips { get; set; }

        [Parameter("Source", Group = "Bollinger Bands")]
        public DataSeries Source { get; set; }

        [Parameter("Band Height (pips)", Group = "Bollinger Bands", DefaultValue = 40.0, MinValue = 0)]
        public double BandHeightPips { get; set; }

        [Parameter("Bollinger Bands Deviations", Group = "Bollinger Bands", DefaultValue = 2)]
        public double Deviations { get; set; }

        [Parameter("Bollinger Bands Periods", Group = "Bollinger Bands", DefaultValue = 20)]
        public int Periods { get; set; }

        [Parameter("Bollinger Bands MA Type", Group = "Bollinger Bands")]
        public MovingAverageType MAType { get; set; }

        [Parameter("Consolidation Periods", Group = "Bollinger Bands", DefaultValue = 2)]
        public int ConsolidationPeriods { get; set; }

        BollingerBands bollingerBands;
        string label = "Sample Breakout cBot";
        int consolidation;

        protected override void OnStart()
        {
            bollingerBands = Indicators.BollingerBands(Source, Periods, Deviations, MAType);
        }

        protected override void OnBar()
        {
            var top = bollingerBands.Top.Last(1);
            var bottom = bollingerBands.Bottom.Last(1);

            if (top - bottom <= BandHeightPips * Symbol.PipSize)
            {
                consolidation = consolidation + 1;
            }
            else
            {
                consolidation = 0;
            }

            if (consolidation >= ConsolidationPeriods)
            {
                var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);
                if (Ask > top)
                {
                    ExecuteMarketOrder(TradeType.Buy, SymbolName, volumeInUnits, label, StopLossInPips, TakeProfitInPips);
                    consolidation = 0;
                }
                else if (Bid < bottom)
                {
                    ExecuteMarketOrder(TradeType.Sell, SymbolName, volumeInUnits, label, StopLossInPips, TakeProfitInPips);
                    consolidation = 0;
                }
            }
        }
    }
}
 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
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class SampleBreakoutcBot():
    Label = "Sample Breakout cBot"
    def on_start(self):
        self.bollingerBands = api.Indicators.BollingerBands(api.Source, api.Periods, api.Deviations, api.MAType)

    def on_bar(self):
        top = self.bollingerBands.Top.Last(1)
        bottom = self.bollingerBands.Bottom.Last(1)

        if top - bottom <= api.BandHeightPips * api.Symbol.PipSize:
            self.consolidation += 1
        else:
            self.consolidation = 0

        if self.consolidation >= api.ConsolidationPeriods:
            volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.Quantity)
            if api.Ask > top:
                api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, volumeInUnits, self.Label, api.StopLossInPips, api.TakeProfitInPips)
                self.consolidation = 0 
            elif api.Bid < bottom:
                api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, volumeInUnits, self.Label, api.StopLossInPips, api.TakeProfitInPips)
                self.consolidation = 0 

Tích hợp chỉ báo

Chỉ báo Bollinger Bands là trung tâm của chiến lược được sử dụng bởi Breakout cBot.

cBot sử dụng độ rộng của Bollinger Bands (khoảng cách giữa dải trên và dải dưới) để xác định các giai đoạn hợp nhất. Khi các dải hẹp (cho thấy biến động thấp), cBot coi đây là giai đoạn hợp nhất.

Nếu chênh lệch giữa dải trên và dải dưới nhỏ hơn hoặc bằng một ngưỡng nhất định (BandHeightPips), bộ đếm hợp nhất (consolidation) sẽ tăng lên. cBot cần một số chu kỳ hợp nhất liên tiếp nhất định (ConsolidationPeriods) trước khi nó xem xét một sự phá vỡ tiềm năng.

cBot theo dõi và diễn giải giá cho một sự phá vỡ theo cách sau:

  • Phá vỡ giá tăng - nếu giá ask vượt quá Bollinger Band trên, cBot sẽ hiểu đây là phá vỡ giá tăng và thực hiện lệnh mua.
  • Phá vỡ giá giảm - nếu giá bid giảm xuống dưới Bollinger Band dưới, cBot sẽ hiểu đây là phá vỡ giá giảm và thực hiện lệnh bán.

Sau khi thực hiện một giao dịch, bộ đếm hợp nhất sẽ được đặt lại về không.

Tính toán và logic

Thiết lập Bollinger Bands

\[ B_{\text{top}} = MA + (D \times \sigma), \quad B_{\text{bottom}} = MA - (D \times \sigma) \]

\(B_{\text{top}}\) – dải trên

\(B_{\text{bottom}}\) – dải dưới

\(MA\) – đường trung bình động

\(D\) – số độ lệch

\(\sigma\) – độ lệch chuẩn

Điều kiện hợp nhất

\[ \text{Nếu } (B_{\text{top}} - B_{\text{bottom}}) \leq (H \times P), \text{ thì } C_{\text{counter}} = C_{\text{counter}} + 1 \]

Nếu không,

\[ C_{\text{counter}} = 0 \]

\(H\) – chiều cao dải theo pip

\(P\) – kích thước pip

\(C_{\text{Counter}}\) – bộ đếm hợp nhất

Kiểm tra chu kỳ hợp nhất

Nếu bộ đếm hợp nhất lớn hơn chu kỳ hợp nhất, thực thi logic đột phá.

Logic đột phá

Nếu giá ask lớn hơn dải trên, đặt lệnh mua. Nếu giá bid nhỏ hơn dải dưới, đặt lệnh bán.

Tham số

Thông số Đơn vị Định nghĩa Mẹo
Số lượng Lot Khối lượng của mỗi giao dịch. Nhà giao dịch có khẩu vị rủi ro thấp có thể bắt đầu với số lượng nhỏ để giảm thiểu mức lỗ tiềm ẩn.

Người dùng có khả năng chịu rủi ro cao hơn có thể đặt mức cao hơn để nhắm đến lợi nhuận lớn hơn.
Cắt lỗ Pip Số pip mà tại đó một giao dịch sẽ tự động đóng để ngăn chặn thêm lỗ. Nhà giao dịch ngại rủi ro có thể đặt giá trị cắt lỗ chặt chẽ để giới hạn mức lỗ tiềm ẩn.

Người dùng có khả năng chịu đựng biến động thị trường có thể đặt giá trị cắt lỗ rộng hơn, cho phép giao dịch của họ có thêm không gian trước khi đóng.
Chốt lời Pip Số pip mà tại đó một giao dịch sẽ tự động đóng để ngăn chặn thêm lỗ. Nhà giao dịch thích thoát nhanh có thể sử dụng giá trị chốt lời thấp hơn để tận dụng các biến động ngắn hạn.

Người dùng nhắm đến các xu hướng dài hơn có thể đặt giá trị chốt lời cao để giao dịch của họ có thể chạy lâu hơn.
Chiều cao dải Pip Chiều rộng tối đa của Bollinger Bands trong giai đoạn hợp nhất cho phép cBot xác định các giai đoạn biến động thấp. Các nhà giao dịch tập trung vào các hợp nhất chặt chẽ có thể sử dụng các giá trị chiều cao dải thấp để nhắm mục tiêu các phá vỡ giá (breakout) lớn từ các giai đoạn biến động thấp.

Người dùng thoải mái với các phạm vi rộng hơn có thể sử dụng các giá trị chiều cao dải tăng lên, cho phép cBot xem xét các hợp nhất hơi rộng hơn như các thiết lập tiềm năng.
Độ lệch Bollinger Bands Giá trị độ lệch chuẩn được sử dụng để tính toán chiều rộng của Bollinger Bands. Các nhà giao dịch tập trung vào các hợp nhất chặt chẽ có thể sử dụng các giá trị chiều cao dải thấp để nhắm mục tiêu các phá vỡ giá (breakout) lớn từ các giai đoạn biến động thấp.

Người dùng thoải mái với các phạm vi rộng hơn có thể sử dụng các giá trị chiều cao dải tăng lên, cho phép cBot xem xét các hợp nhất hơi rộng hơn như các thiết lập tiềm năng.
Chu kỳ Bollinger Bands Số chu kỳ được sử dụng để tính toán Bollinger Bands. Các nhà giao dịch tập trung vào các biến động thị trường ngắn hạn có thể sử dụng các chu kỳ nhỏ, làm cho Bollinger Bands nhạy cảm hơn với các thay đổi giá gần đây.

Người dùng quan tâm đến các xu hướng dài hạn nên xem xét các chu kỳ lớn, làm mịn Bollinger Bands và giảm độ nhạy cảm với các biến động ngắn hạn.
Chu kỳ hợp nhất Số lượng các thanh liên tiếp phải đáp ứng tiêu chí hợp nhất trước khi một giao dịch phá vỡ giá (breakout) được xem xét. Các nhà giao dịch tìm kiếm các giao dịch thường xuyên hơn có thể giảm các chu kỳ hợp nhất, cho phép cBot tham gia giao dịch sớm hơn.

Người dùng thích các phá vỡ giá (breakout) được xác nhận có thể tăng các chu kỳ hợp nhất để đảm bảo rằng giá duy trì trong phạm vi hợp nhất lâu hơn trước khi hành động được thực hiện.

Sự ứng dụng

Thị trường có xu hướng

Breakout cBot hoạt động tốt trong các thị trường có xu hướng (tăng hoặc giảm). Trong các thị trường như vậy, các phá vỡ giá (breakout) thường đi cùng với xu hướng tổng thể sau một giai đoạn hợp nhất, dẫn đến các biến động giá đáng kể.

Trường hợp sử dụng

Hãy xem xét một kịch bản trong đó EURUSD đang trong một xu hướng tăng mạnh nhưng tạm thời hợp nhất trong một phạm vi hẹp. Bollinger Bands thu hẹp, cho thấy biến động giảm. cBot phát hiện sự hợp nhất này và chờ đợi một phá vỡ giá (breakout). Khi xu hướng tiếp tục, giá phá vỡ trên dải Bollinger Bands trên cùng. cBot thực hiện một lệnh mua, tận dụng sự tiếp tục của xu hướng.

Các phương pháp tốt nhất

  • Sử dụng các chu kỳ lớn hơn. cBot đặc biệt hiệu quả trên các chu kỳ lớn hơn (1 giờ, 4 giờ, v.v.) trong các thị trường có xu hướng. Thiết lập này giúp nắm bắt các biến động giá đáng kể mang lại lợi nhuận cao hơn.
  • Tránh các chu kỳ hợp nhất ngắn. Trong các thị trường có xu hướng mạnh, bạn có thể muốn tránh các cài đặt gây ra các chu kỳ hợp nhất ngắn vì chúng có thể dẫn đến các phá vỡ giá (breakout) giả.

Phá vỡ giá sau các mẫu hình

cBot có thể được sử dụng để giao dịch các phá vỡ giá từ các mẫu hình biểu đồ thường dẫn đến các biến động giá mạnh, chẳng hạn như tam giác, cờ hoặc cờ đuôi nheo. Những mẫu hình này thường dẫn đến một giai đoạn củng cố tiếp theo là một phá vỡ giá.

Trường hợp sử dụng

Hãy xem xét một kịch bản trong đó cặp EURGBP hình thành một mẫu hình tam giác cân trên biểu đồ h1. Khi tam giác thu hẹp, Bollinger Bands cũng thu hẹp lại, cho thấy sự giảm biến động. cBot xác định giai đoạn củng cố trong mẫu hình tam giác. Khi giá phá vỡ trên dải Bollinger Band trên khi thoát khỏi mẫu hình tam giác, cBot sẽ thực hiện một lệnh mua để nắm bắt phá vỡ giá.

Các phương pháp tốt nhất

  • Kết hợp cBot với các mẫu hình khác. Xác định các mẫu hình biểu đồ quan trọng một cách thủ công và sau đó sử dụng cBot để tự động hóa các giao dịch phá vỡ giá một khi mẫu hình hoàn thành.
  • Kéo dài thời gian củng cố. Đối với các mẫu hình hình thành trong thời gian dài hơn, hãy cân nhắc tăng thời gian củng cố để đảm bảo cBot chỉ kích hoạt sau khi mẫu hình được hình thành đầy đủ.

Giao dịch sau tin tức

cBot có thể hiệu quả vào những ngày có tin tức kinh tế lớn, sự kiện hoặc thông báo. Sau một số tin tức, một số thị trường cần thời gian để củng cố khi các nhà giao dịch tiêu hóa thông tin. Khi hướng đi của thị trường trở nên rõ ràng, một phá vỡ giá có thể xảy ra.

Trường hợp sử dụng

Hãy xem xét một kịch bản sau khi dữ liệu Non-Farm Payrolls của Mỹ được công bố, cặp JPYUSD củng cố khi các nhà giao dịch đánh giá tác động của báo cáo. Bollinger Bands thu hẹp, cho thấy biến động thấp. cBot xác định giai đoạn củng cố này và chờ đợi một phá vỡ giá. Khi thị trường đi đến một hướng đi cụ thể (ví dụ, USD mạnh hơn do dữ liệu tốt hơn dự kiến), giá phá vỡ dưới dải Bollinger Band dưới. cBot thực hiện một lệnh bán để nắm bắt biến động này.

Các phương pháp tốt nhất

  • Theo dõi lịch kinh tế. Cấu hình cBot để chạy xung quanh các thông báo kinh tế lớn. Đảm bảo các cài đặt thời gian củng cố được điều chỉnh để nắm bắt giai đoạn củng cố sau tin tức trước khi phá vỡ giá xảy ra.
  • Điều chỉnh cắt lỗ. Do biến động gia tăng sau các sự kiện tin tức, hãy cân nhắc mở rộng mức cắt lỗ để phù hợp với các biến động thị trường tiềm năng trước khi phá vỡ giá hoàn toàn hình thành.

Tổng quan

Breakout cBot giúp các nhà giao dịch tận dụng được sự biến động của thị trường, khối lượng giao dịch cao và hoạt động gia tăng. Mặc dù cBot hiệu quả trong việc thực hiện các chiến lược phá vỡ giá, sự phụ thuộc vào Bollinger Bands có thể gây ra các vấn đề về hiệu suất trong một số điều kiện thị trường nhất định.

Tùy chỉnh Breakout cBot cho các cặp tiền cụ thể và sở thích giao dịch của bạn có thể cải thiện đáng kể hiệu quả của nó. Bằng cách kết hợp các chiến lược của riêng bạn vào cBot và sửa đổi mã của nó để cho phép nó sử dụng các chỉ báo bổ sung, bạn có thể nâng cao hơn nữa độ chính xác và hiệu suất của nó.