Chiến lược giao dịch dao động RSI động

Tác giả:ChaoZhang, Ngày: 2023-11-02 16:04:07
Tags:

img

Tổng quan

Chiến lược này kết hợp các mức hỗ trợ / kháng cự động và chỉ số chỉ số sức mạnh tương đối (RSI). Nó thiết lập ngưỡng mua quá mức / bán quá mức cho RSI và tạo ra tín hiệu mua / bán khi giá vượt qua các mức hỗ trợ / kháng cự động trong khi RSI không ở trong khu vực mua quá mức / bán quá mức.

Nguyên tắc

1. Hỗ trợ / kháng động động

Sử dụng chức năng bảo mật để lấy giá đóng như mức hỗ trợ / kháng cự động.

2. Chỉ số RSI

Tính toán lợi nhuận trung bình và lỗ trung bình trong một khoảng thời gian nhất định để tạo ra các giá trị RSI và xác định xem RSI đạt đến khu vực mua quá mức / bán quá mức.

3. Các tín hiệu giao dịch

Khi giá phá vỡ các mức năng động, nếu RSI không ở trong khu vực mua quá mức / bán quá mức, các tín hiệu mua / bán được tạo ra.

4. Dấu hiệu ra ngoài

Đóng các vị trí khi giá giảm trở lại mức năng động, hoặc khi RSI trở lại phạm vi bình thường.

Phân tích lợi thế

  1. Sử dụng hỗ trợ / kháng cự năng động để xác định hướng xu hướng cho tỷ lệ thắng cao hơn.

  2. RSI lọc ra các vụ đột nhập sai và tránh các mục nhập sai.

  3. Kết hợp xu hướng và chỉ số làm cho chiến lược thích nghi với các điều kiện thị trường khác nhau.

  4. Các quy tắc đơn giản và rõ ràng làm cho việc thực hiện dễ dàng.

Rủi ro và giải pháp

  1. Nhiều lần thử nghiệm các mức năng động có thể tạo ra tín hiệu sai.

  2. Solo RSI có thể gây ra đánh giá sai. Thêm các chỉ số khác để lọc combo.

  3. Giao dịch thường xuyên trên thị trường giới hạn phạm vi dẫn đến chi phí cao hơn.

  4. Cài đặt tham số không chính xác dẫn đến tín hiệu bị thiếu hoặc sai. Tối ưu hóa tham số dựa trên các tài sản khác nhau.

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

  1. Sử dụng máy học để tự động tối ưu hóa các thông số RSI.

  2. Thêm chiến lược dừng lỗ / lợi nhuận để khóa lợi nhuận và giảm lỗ.

  3. Thêm nhiều chỉ số cho bộ lọc kết hợp để cải thiện sự ổn định.

  4. Thêm chỉ số biến động vào kích thước vị trí thấp hơn khi biến động thấp.

  5. Tối ưu hóa thuật toán kích thước vị trí để điều chỉnh vị trí một cách năng động cho các môi trường thị trường khác nhau.

Tóm lại

Chiến lược này kết hợp đánh giá xu hướng và lọc chỉ số để xác định hiệu quả sự đảo ngược xu hướng xung quanh các mức chính trong khi kiểm soát rủi ro.


/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Levels+RSI Strategy v1.0", shorttitle = "Levels+RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
tf = input('W', title = "timeframe 1")
src = input(ohlc4, "Source")
ap = input(true, defval = true, title = "antipila")
cf = input(true, defval = true, title = "color filter")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 100, title = "RSI Period")
rsilimit = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI Limit")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Level
level = request.security(syminfo.tickerid, tf, src[1])
plot(level, linewidth = 3, color = silver)

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))

//Level Signals
ls = close > level and ap == false ? true : low > level ? true : false
up1 = strategy.position_size == 0 and ls and (close < open or cf == false)
exit1 = close < level and ap == false ? true : high < level ? true : false 

//RSI Signal

up2 = rsi < rsilimit and (close < open or cf == false)
exit2 = rsi > rsilimit and ls == false

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if up1 or up2 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
    
if  (exit1 and rsi > rsilimit) or exit2
    strategy.close_all()

Thêm nữa