Chiến lược RSI tăng cường xác suất

Tác giả:ChaoZhang, Ngày: 2023-12-20 15:05:05
Tags:

img

Tổng quan

Đây là một chiến lược đơn giản chỉ sử dụng chỉ số RSI để xác định mức mua quá mức và bán quá mức. Chúng tôi đã tăng cường nó bằng cách thêm stop loss và take profit, và tích hợp mô-đun xác suất vào giao dịch củng cố chỉ khi xác suất giao dịch có lợi gần đây lớn hơn hoặc bằng 51%. Điều này cải thiện đáng kể hiệu suất chiến lược bằng cách tránh các giao dịch có khả năng thua lỗ.

Nguyên tắc

Chiến lược sử dụng chỉ số RSI để đánh giá điều kiện mua quá mức và bán quá mức trên thị trường. Cụ thể, nó đi dài khi RSI vượt qua dưới giới hạn dưới của khu vực bán quá mức; và đóng vị trí khi RSI vượt qua giới hạn trên của khu vực mua quá mức. Ngoài ra, chúng tôi đặt tỷ lệ dừng lỗ và lấy lợi nhuận.

Điều quan trọng là chúng tôi tích hợp một mô-đun đánh giá xác suất. Mô-đun này tính toán tỷ lệ phần trăm lợi nhuận của các giao dịch dài trong các giai đoạn gần đây (được xác định bởi tham số nhìn lại). Nó chỉ cho phép nhập vào nếu xác suất giao dịch có lợi nhuận gần đây lớn hơn hoặc bằng 51%.

Ưu điểm

Là một chiến lược RSI tăng cường xác suất, nó có những lợi thế dưới đây so với các chiến lược RSI đơn giản:

  1. Các loại giao dịch khác
  2. Mô-đun xác suất tích hợp tránh các thị trường có xác suất thấp
  3. Mô-đun xác suất có thể điều chỉnh cho các môi trường thị trường khác nhau
  4. Cơ chế chỉ dài đơn giản để hiểu và thực hiện

Phân tích rủi ro

Vẫn còn một số rủi ro trong chiến lược này:

  1. Chỉ có thời gian dài, không thể lợi nhuận từ thị trường giảm
  2. Phán quyết không chính xác của mô-đun xác suất có thể khiến bạn bỏ lỡ cơ hội
  3. Khó tìm được sự kết hợp thông số tốt nhất, sự khác biệt hiệu suất đáng kể giữa các môi trường thị trường
  4. Thiết lập dừng lỗ lỏng lẻo, vẫn có thể mất lỗ giao dịch duy nhất lớn

Giải pháp:

  1. Xem xét thêm cơ chế ngắn
  2. Tối ưu hóa mô-đun xác suất để giảm tỷ lệ đánh giá sai
  3. Sử dụng máy học để tối ưu hóa các tham số một cách năng động
  4. Thiết lập mức dừng lỗ bảo thủ hơn để giới hạn lỗ

Hướng dẫn cải thiện

Chiến lược có thể được tối ưu hóa thêm trong các khía cạnh sau:

  1. Tăng mô-đun ngắn cho giao dịch hai hướng
  2. Sử dụng máy học để tối ưu hóa tham số động
  3. Thử các chỉ số khác cho mua quá mức / bán quá mức
  4. Tối ưu hóa stop loss/take profit để tăng tỷ lệ lợi nhuận
  5. Thêm các yếu tố khác để lọc tín hiệu và cải thiện xác suất

Tóm lại

Đây là một chiến lược RSI đơn giản được tăng cường bởi mô-đun xác suất tích hợp. So với các chiến lược RSI vanila, nó lọc ra một số giao dịch thua lỗ và cải thiện tỷ lệ rút và lợi nhuận tổng thể. Bước tiếp theo có thể cải thiện nó bằng cách thêm tối ưu hóa ngắn, năng động vv để làm cho nó mạnh mẽ hơn.


/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © thequantscience

//@version=5
strategy("Reinforced RSI",
     overlay = true,
     default_qty_type = strategy.percent_of_equity, 
     default_qty_value = 100,
     pyramiding = 1,
     currency = currency.EUR, 
     initial_capital = 1000,
     commission_type = strategy.commission.percent, 
     commission_value = 0.07)

lenght_rsi = input.int(defval = 14, minval = 1, title = "RSI lenght: ")
rsi = ta.rsi(close, length = lenght_rsi)

rsi_value_check_entry = input.int(defval = 35, minval = 1, title = "Oversold: ")
rsi_value_check_exit = input.int(defval = 75, minval = 1, title = "Overbought: ")

trigger = ta.crossunder(rsi, rsi_value_check_entry)
exit = ta.crossover(rsi, rsi_value_check_exit)

entry_condition   = trigger 
TPcondition_exit  = exit

look = input.int(defval = 30, minval = 0, maxval = 500, title = "Lookback period: ")

Probabilities(lookback) =>

    isActiveLong = false
    isActiveLong := nz(isActiveLong[1], false)
    isSellLong = false
    isSellLong := nz(isSellLong[1], false)

    int positive_results = 0
    int negative_results = 0

    float positive_percentage_probabilities = 0 
    float negative_percentage_probabilities = 0 

    LONG = not isActiveLong and entry_condition == true 
    CLOSE_LONG_TP = not isSellLong and TPcondition_exit == true

    p = ta.valuewhen(LONG, close, 0)
    p2 = ta.valuewhen(CLOSE_LONG_TP, close, 0)

    for i = 1 to lookback

	    if (LONG[i])
            isActiveLong := true
		    isSellLong := false

        if (CLOSE_LONG_TP[i])
	        isActiveLong := false
	        isSellLong := true

        if p[i] > p2[i]
            positive_results += 1
        else 
            negative_results -= 1 

	    positive_relative_probabilities = positive_results / lookback
	    negative_relative_probabilities = negative_results / lookback
	    positive_percentage_probabilities := positive_relative_probabilities * 100
	    negative_percentage_probabilities := negative_relative_probabilities * 100

    positive_percentage_probabilities
	
probabilities = Probabilities(look) 

lots = strategy.equity/close

var float e = 0 
var float c = 0 

tp = input.float(defval = 1.00, minval = 0, title = "Take profit: ")
sl = input.float(defval = 1.00, minval = 0, title = "Stop loss: ")

if trigger==true and strategy.opentrades==0 and probabilities >= 51
    e := close
    strategy.entry(id = "e", direction = strategy.long, qty = lots, limit = e) 
takeprofit = e + ((e * tp)/100)
stoploss = e - ((e * sl)/100)
if exit==true
    c := close 
    strategy.exit(id = "c", from_entry = "e", limit = c)
if takeprofit and stoploss 
    strategy.exit(id = "c", from_entry = "e", stop = stoploss, limit = takeprofit)

Thêm nữa