RSI Mean Reversation Chiến lược giao dịch định lượng dựa trên RSI Crossover

Tác giả:ChaoZhang, Ngày: 2023-12-01 16:59:26
Tags:

img

Tổng quan

Chiến lược này xác định tín hiệu mua và bán dựa trên sự chéo giữa chỉ số RSI và đường trung bình động của nó, thuộc về các chiến lược giao dịch ngắn hạn. Nó sẽ mua khi RSI thấp hơn MA của nó và bán khi RSI cao hơn MA của nó, đó là một chiến lược mua thấp-bán cao điển hình.

Nguyên tắc chiến lược

  1. Tính toán chỉ số RSI với khoảng thời gian 40 thanh
  2. Tính toán MA của chỉ số RSI, với thời gian 10 thanh
  3. Tạo tín hiệu mua khi RSI thấp hơn MA nhân với hệ số (phạm vi giao dịch 1%)
  4. Tạo tín hiệu bán khi RSI cao hơn MA của nó nhân với hệ số (1 + phạm vi giao dịch%)
  5. Khoảng cách giao dịch mặc định là 5, nghĩa là 5% trên hoặc dưới MA để kích hoạt tín hiệu
  6. Xác định thời điểm thoát khi RSI vượt trên mức MA và trên mức 50

Phân tích lợi thế

Đây là một chiến lược đảo ngược trung bình điển hình, sử dụng các thuộc tính mua quá mức / bán quá mức của chỉ số RSI để xác định tín hiệu giao dịch.

  1. Sử dụng chỉ số RSI để đánh giá cấu trúc thị trường, khá đáng tin cậy
  2. Bộ lọc MA tránh giao dịch không cần thiết và tăng tính ổn định
  3. Tần số điều chỉnh phạm vi giao dịch
  4. Logic đơn giản và dễ hiểu

Tóm lại, đó là một chiến lược giao dịch ngắn hạn đơn giản và thực tế.

Phân tích rủi ro

Có một số rủi ro cần lưu ý:

  1. Khả năng của RSI cung cấp tín hiệu sai, cần phải xem mô hình
  2. Thiết lập phạm vi giao dịch không chính xác có thể dẫn đến giao dịch quá mức hoặc bỏ lỡ cơ hội
  3. Tần suất giao dịch cao, cần phải xem xét chi phí giao dịch
  4. Chỉ dựa trên chỉ số duy nhất, dễ bị bất thường trên thị trường

Những rủi ro này có thể được giảm thiểu thông qua điều chỉnh tham số, thêm bộ lọc vv.

Hướng dẫn tối ưu hóa

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

  1. Thêm nhiều bộ lọc như âm lượng để đảm bảo tín hiệu chỉ ở các điểm chuyển đổi
  2. Thêm stop loss để kiểm soát lỗ giao dịch duy nhất
  3. Tối ưu hóa phạm vi giao dịch để cân bằng tần suất và tỷ lệ lợi nhuận
  4. Sử dụng máy học để tìm các tập hợp tham số tối ưu
  5. Thêm các mô hình tập thể để tích hợp kết quả từ các chiến lược phụ

Nâng cao hiệu suất đáng kể có thể đạt được thông qua kết hợp nhiều chỉ số, quản lý mất mát dừng, tối ưu hóa tham số vv.

Tóm lại

Tóm lại, đây là một chiến lược giao dịch ngắn hạn rất điển hình và thực tế. Nó tận dụng mức mua quá mức / bán quá mức của RSI để xác định các bước vào và ra, với bộ lọc MA bổ sung. Logic đơn giản và rõ ràng, các tham số linh hoạt, dễ thực hiện. Có một số rủi ro thị trường nhất định, nhưng có thể được giải quyết thông qua các cơ chế nhập / ra tinh chế, điều chỉnh tham số vv.v. Khi kết hợp với các chỉ số kỹ thuật và kỹ thuật quản lý rủi ro hơn, chiến lược này có thể trở thành một chiến lược ngắn hạn tương đối ổn định.


/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
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/
// © I11L

//@version=5
strategy("I11L - Meanreverter 4h", overlay=false, pyramiding=3, default_qty_value=10000, initial_capital=10000, default_qty_type=strategy.cash,process_orders_on_close=false, calc_on_every_tick=false)
 
frequency = input.int(10)
rsiFrequency = input.int(40)
buyZoneDistance = input.int(5)
avgDownATRSum = input.int(3)
useAbsoluteRSIBarrier = input.bool(true)
barrierLevel = 50//input.int(50)

momentumRSI = ta.rsi(close,rsiFrequency)
momentumRSI_slow = ta.sma(momentumRSI,frequency)
 
isBuy = momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) //and (momentumRSI < barrierLevel or not(useAbsoluteRSIBarrier))
isShort = momentumRSI > momentumRSI_slow*(1+buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))
momentumRSISoftClose = (momentumRSI > momentumRSI_slow) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))

isClose = momentumRSISoftClose

plot(momentumRSI,color=isClose ? color.red :  momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) ? color.green : color.white)
plot(momentumRSI_slow,color=color.gray)
plot(barrierLevel,color=useAbsoluteRSIBarrier ? color.white : color.rgb(0,0,0,0))
plot(momentumRSI_slow*(1-buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+(buyZoneDistance*2)/100),color=color.gray)

// plot(strategy.wintrades - strategy.losstrades)

 
 
if(isBuy)
    strategy.entry("Buy",strategy.long, comment="#"+str.tostring(strategy.opentrades+1))

// if(isShort)
//     strategy.entry("Sell",strategy.short, comment="#"+str.tostring(strategy.opentrades+1))

if(isClose)
    strategy.exit("Close",limit=close)





Thêm nữa