Bỏ qua

RSI cBot

Tổng quan chiến lược

RSI cBot thực hiện một chiến lược giao dịch đảo chiều dựa trên động lượng đơn giản dựa vào Relative Strength Index (RSI) làm chỉ báo chính.

RSI cBot tự động mua và bán dựa trên các giá trị RSI phản ánh động lượng thị trường và xác định các điều kiện quá mua hoặc quá bán. cBot được lập trình để đóng các vị thế hiện có trước khi mở các vị thế mới, điều này đảm bảo chỉ có một vị thế liên quan được mở tại bất kỳ thời điểm nào.

Khi RSI giảm xuống dưới 30, thị trường được coi là quá bán và cBot sẽ mở các vị thế mua. Tín hiệu mua dựa trên kỳ vọng rằng giá sẽ tăng sau khi thị trường đạt đến điều kiện quá bán.

Khi RSI tăng lên trên 70, thị trường được coi là quá mua và cBot sẽ mở các vị thế bán. Tín hiệu bán dựa trên kỳ vọng rằng giá sẽ giảm sau khi thị trường đạt đến điều kiện quá mua.

Chiến lược dựa trên chỉ báo RSI phù hợp nhất với các thị trường mà cBot có thể giao dịch đảo chiều dựa trên các tín hiệu RSI.

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ã nguồn RSI 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
using cAlgo.API;
using cAlgo.API.Indicators;

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

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

        [Parameter("Periods", Group = "RSI", DefaultValue = 14)]
        public int Periods { get; set; }

        private RelativeStrengthIndex rsi;

        protected override void OnStart()
        {
            rsi = Indicators.RelativeStrengthIndex(Source, Periods);
        }

        protected override void OnTick()
        {
            if (rsi.Result.LastValue < 30)
            {
                Close(TradeType.Sell);
                Open(TradeType.Buy);
            }
            else if (rsi.Result.LastValue > 70)
            {
                Close(TradeType.Buy);
                Open(TradeType.Sell);
            }
        }

        private void Close(TradeType tradeType)
        {
            foreach (var position in Positions.FindAll("SampleRSI", SymbolName, tradeType))
                ClosePosition(position);
        }

        private void Open(TradeType tradeType)
        {
            var position = Positions.Find("SampleRSI", SymbolName, tradeType);
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(Quantity);

            if (position == null)
                ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "SampleRSI");
        }
    }
}
 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
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *

# Import trading wrapper functions
from robot_wrapper import *

class SampleRSIcBot():
    def on_start(self):
        self.rsi = api.Indicators.RelativeStrengthIndex(api.Source, api.Periods)

    def on_tick(self):
        if self.rsi.Result.LastValue < 30:
            self.close_position(TradeType.Sell)
            self.open_position(TradeType.Buy)
        elif self.rsi.Result.LastValue > 70:
            self.close_position(TradeType.Buy)
            self.open_position(TradeType.Sell)

    def close_position(self, tradeType):
        for position in api.Positions.FindAll("SampleRSI", api.SymbolName, tradeType):
            api.ClosePosition(position)

    def open_position(self, tradeType):
        position = api.Positions.Find("SampleRSI", api.SymbolName, tradeType)
        volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.Quantity)
        if position is None:
            api.ExecuteMarketOrder(tradeType, api.SymbolName, volumeInUnits, "SampleRSI")

Tích hợp chỉ báo

Chỉ báo Relative Strength Index (RSI) là chỉ báo chính được sử dụng trong RSI cBot. RSI là một bộ dao động động lượng đo lường tốc độ và sự thay đổi của các chuyển động giá. Nó dao động trong khoảng từ 0 đến 100 và được sử dụng để xác định các điều kiện quá mua hoặc quá bán trên thị trường.

Dựa trên đánh giá về các điều kiện quá mua hoặc quá bán, RSI xác định liệu cBot sẽ mua hay bán. RSI cBot không dựa vào bất kỳ chỉ báo hoặc yếu tố nào khác, chẳng hạn như đường trung bình động hoặc khối lượng; nó chỉ sử dụng các mức RSI để tạo tín hiệu giao dịch.

cBot tập trung vào hai ngưỡng chính:

  • RSI < 30 báo hiệu thị trường quá bán và kích hoạt các lệnh mua.
  • RSI > 70 báo hiệu thị trường quá mua và kích hoạt các lệnh bán.

cBot liên tục theo dõi giá trị RSI bằng cách kiểm tra nó trên mỗi tick mới. Điều này đảm bảo rằng thuật toán luôn sẵn sàng hành động một khi RI di chuyển vào vùng quá bán hoặc quá mua.

Logic

Thiết lập ban đầu

Chỉ báo RSI được khởi tạo bằng cách sử dụng các tham số SourcePeriods được chỉ định trong phương thức OnStart(), phương thức này được gọi khi cBot bắt đầu. Các tính toán được thực hiện bằng cách sử dụng các công thức tích hợp sẵn của cTrader cho chỉ báo.

Giám sát điều kiện

Logic điều kiện cho các giao dịch được thực hiện trong phương thức OnTick(), phương thức này được gọi mỗi khi nhận được một tick mới (cập nhật giá). Nếu RSI < 30, một tín hiệu mua được tạo ra. Nếu RSI > 70, một tín hiệu bán được tạo ra.

Quản lý vị thế

Trước khi cBot mở một vị thế mới dựa trên tín hiệu được tạo ra, phương thức Close() kiểm tra và đóng tất cả các vị thế đối lập đang mở với nhãn "SampleRSI". Thiết lập này đảm bảo rằng chỉ có một giao dịch hoạt động tại bất kỳ thời điểm nào cho một ký hiệu nhất định.

Thực hiện giao dịch

Phương thức Open() kiểm tra xem một vị thế cùng loại dựa trên tín hiệu được tạo ra (mua hoặc bán) đã được mở hay chưa. Nếu không tìm thấy vị thế, cBot sẽ mở một vị thế mới với khối lượng được chỉ định và các tham số khác được truyền vào bên trong phương thức.

Tham 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 bảo thủ có thể chọn kích thước lot nhỏ để giảm thiểu rủi ro.

Nhà giao dịch mạo hiểm có thể chọn kích thước lot lớn hơn để tối đa hóa lợi nhuận tiềm năng, mặc dù với rủi ro cao hơn.
Nguồn Nguồn dữ liệu cho chỉ báo RSI. Các tùy chọn có sẵn bao gồm giá đóng cửa, giá mở cửa, giá cao và giá thấp. Giá đóng cửa thường được sử dụng để tính toán RSI vì nó phản ánh điểm giá quan trọng nhất trong một nến. Tuy nhiên, các nhà giao dịch có thể thử nghiệm với các chuỗi dữ liệu khác nhau và chọn chuỗi phù hợp nhất với điều kiện thị trường.

Giá cao hoặc giá thấp có thể giúp xác định các biến động giá cực đoan, trong khi Median Price hoặc Typical Price cung cấp một góc nhìn cân bằng hơn trong một khoảng thời gian.
Các khoảng thời gian Số lượng khoảng thời gian (nến) được sử dụng để tính toán RSI. Giá trị mặc định, 14, là giá trị tiêu chuẩn hoặc thiết lập phổ biến cho chỉ báo này. Các nhà giao dịch scalping hoặc những người muốn kiếm lợi nhuận từ các biến động giá ngắn hạn (ví dụ, trên biểu đồ 5 phút) có thể chọn các khoảng thời gian thấp. Thiết lập này làm cho RSI phản ứng nhanh hơn, khiến nó tạo ra các tín hiệu mua và bán thường xuyên hơn.

Các nhà giao dịch swing hoặc dài hạn (ví dụ, trên biểu đồ 1 giờ) có thể thích các khoảng thời gian RSI lớn hơn. Thiết lập này giảm độ nhạy của RSI, làm cho nó mượt mà hơn và ít bị ảnh hưởng bởi các biến động giá nhanh. Với nhiễu được lọc bỏ, RSI tập trung vào các xu hướng chính của thị trường và tạo ra ít tín hiệu hơn.

Sự ứng dụng

Thị trường đi ngang (sideways)

Trong một thị trường đi ngang, giá dao động giữa mức kháng cự (biên trên) và mức hỗ trợ (biên dưới). Những sự kiện như vậy là lý tưởng cho các chiến lược dựa trên RSI vì chúng cung cấp nhiều trường hợp quá mua và quá bán. Khi giá thường xuyên đảo chiều khi chạm mức hỗ trợ hoặc kháng cự trong thị trường đi ngang, RSI có nhiều khả năng cung cấp các tín hiệu chính xác.

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

Hãy xem xét một kịch bản trong đó EURUSD liên tục di chuyển giữa 1.1000 và 1.1200. cBot có thể thể hiện hiệu suất tốt bằng cách mua gần biên dưới khi quá bán (RSI < 30) và bán gần biên trên khi quá mua (RSI > 70).

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

  • Tập trung vào giao dịch trong các giai đoạn biến động thấp. Chỉ báo RSI hoạt động tốt hơn khi thị trường không có các biến động xu hướng đáng kể.
  • Kiểm tra biểu đồ giá cho các giai đoạn khi giá dao động trong một phạm vi rõ ràng.
  • Theo dõi các phá vỡ giá. Nếu giá di chuyển đáng kể ra ngoài phạm vi, hãy dừng cBot và đánh giá lại điều kiện thị trường.

Thị trường biến động thấp

Các thị trường biến động thấp được đặc trưng bởi các biến động giá nhỏ và thiếu các xu hướng chính. RSI đặc biệt hữu ích trong những môi trường như vậy vì nó có thể xác định các mất cân bằng ngắn hạn của thị trường mà không bị ảnh hưởng bởi các xu hướng mạnh.

Trong các môi trường biến động thấp, giá có xu hướng dao động giữa các mức quá mua và quá bán, dẫn đến các cơ hội giao dịch thường xuyên cho cBot.

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

Một chỉ số chứng khoán như S&P 500 có thể thể hiện các giai đoạn biến động thấp, khi giá của nó di chuyển giữa các dải hẹp. Trong các giai đoạn như vậy, cBot tận dụng các đảo chiều nhỏ. Nó vào các vị thế mua khi RSI giảm xuống dưới 30 và các vị thế bán khi RSI tăng lên trên 70.

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

  • Sử dụng các chỉ báo biến động để xác định khi thị trường đang bước vào giai đoạn biến động thấp.
  • Điều chỉnh kích thước lô và các khoảng thời gian RSI để cho phép chỉ báo nhắm mục tiêu các biến động giá nhỏ một cách hiệu quả.
  • Sử dụng các chiến lược quản lý rủi ro bổ sung như cắt lỗ để bảo vệ trước các biến động thị trường bất ngờ.

Thị trường củng cố sau các xu hướng mạnh

Sau một xu hướng tăng hoặc giảm mạnh, thị trường thường bước vào giai đoạn củng cố khi giá ổn định. Các nhà giao dịch sau đó sẽ chốt lời hoặc chờ đợi một hướng đi mới của thị trường, và giai đoạn củng cố trở thành lý tưởng cho các chiến lược giao dịch dựa trên RSI.

Trong giai đoạn củng cố sau một xu hướng mạnh, chỉ báo RSI có thể xác định khi thị trường đã di chuyển vào vùng quá mua hoặc quá bán. RSI cBot sau đó có thể bắt các điểm đảo chiều trong giai đoạn củng cố.

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

Hãy xem xét một kịch bản trong đó một cổ phiếu blue-chip bước vào giai đoạn củng cố sau một đợt tăng hoặc giảm đáng kể. Giá cổ phiếu bắt đầu dao động trong một phạm vi hẹp. cBot sau đó phát hiện các điều kiện quá mua (RSI > 70) hoặc quá bán (RSI < 30) trong giai đoạn này và giao dịch tương ứng.

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

  • Sau một xu hướng mạnh, hãy chờ thị trường bắt đầu củng cố trước khi chạy cBot.
  • Theo dõi các mức hỗ trợ và kháng cự dài hạn để đảm bảo thị trường thực sự đã bước vào giai đoạn củng cố và không chuẩn bị cho một đợt phá vỡ giá (breakout) khác.

Tóm tắt

Chỉ báo RSI là trung tâm của chiến lược cBot, và nó điều khiển tất cả các quyết định mua và bán. Mặc dù cBot hiệu quả trong việc sử dụng chỉ báo để tận dụng các đảo chiều trong thị trường quá bán và quá mua, sự phụ thuộc vào một thuật toán duy nhất đi kèm với rủi ro về các tín hiệu sai và bối cảnh thị trường hạn chế.

Khả năng chỉ định các giá trị cho các tham số chính và chọn nguồn dữ liệu cho phép người dùng điều chỉnh RSI cBot phù hợp với phong cách giao dịch cá nhân, khả năng chịu rủi ro và điều kiện thị trường của họ. Cho dù bạn là một nhà giao dịch scalping, swing trader hay nhà đầu tư dài hạn, việc điều chỉnh các tham số cBot có thể dẫn đến sự phù hợp tốt hơn với chiến lược của bạn và tăng cơ hội thành công.

Các nhà giao dịch có thể backtest cBot với các giá trị, cài đặt và dữ liệu khác nhau để tìm ra một tổ hợp tham số tối ưu hoặc có lợi nhuận cho ký hiệu và khoảng thời gian mà họ chọn. Ngoài ra, người dùng cTrader có thể sửa đổi mã cBot và triển khai các chỉ báo biến động để phòng ngừa các xu hướng mạnh và lọc ra các tín hiệu không phải đảo chiều.