Chiến lược giao dịch VSTOP và RSI

Tác giả:ChaoZhang, Ngày: 2023-10-09 15:48:46
Tags:

Tổng quan

Chiến lược này kết hợp các chỉ số VSTOP và RSI để đi dài khi RSI bị mua quá mức và đi ngắn khi RSI bị bán quá mức, trong khi sử dụng VSTOP để xác định hướng xu hướng và cắt lỗ kịp thời khi xu hướng đảo ngược.

Chiến lược logic

  1. Tính toán giá trị chỉ số RSI và đặt đường mua quá mức và bán quá mức. Đi dài khi RSI trên đường mua quá mức và đi ngắn khi RSI dưới đường bán quá mức.

  2. Tính toán VSTOP, đó là một đường dừng lỗ dựa trên phạm vi biến động giá. Các bước tính toán như sau:

    • Tính toán chỉ số ATR và thiết lập hệ số ATR

    • Ghi lại giá tối đa và giá tối thiểu

    • Theo tình trạng xu hướng tăng is_uptrend, tính toán đường stop loss hiện tại: stop = is_uptrend? max - mult * ATR : min + mult * ATR

    • Cập nhật đường stop loss: vstop1 = is_uptrend? max ((vstop_prev, stop) : min ((vstop_prev, stop)

    • Khi xu hướng đảo ngược xảy ra, thiết lập lại đường dừng lỗ nhập

  3. Khi chỉ số RSI quá bán, nếu giá vượt trên VSTOP, mua ngắn; khi chỉ số RSI quá mua, mua dài.

Phân tích lợi thế

  • Kết hợp chỉ số xu hướng và chỉ số mua quá mức / bán quá mức giúp nắm bắt các cơ hội đảo ngược trong các thị trường xu hướng.

  • Sử dụng VSTOP để thiết lập stop loss có hiệu quả kiểm soát rủi ro.

  • Cài đặt tham số RSI linh hoạt có thể được tối ưu hóa cho các sản phẩm khác nhau.

  • VSTOP theo dõi hệ thống dừng mất mát mà không cần can thiệp bằng tay.

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

  • Nếu tham số ATR được đặt quá lớn hoặc quá nhỏ, đường stop loss sẽ vô nghĩa. Các tham số ATR khác nhau có thể được thử nghiệm hoặc kết hợp với trung bình ATR.

  • Trong thị trường giới hạn phạm vi, RSI có thể kích hoạt các tín hiệu giao dịch thường xuyên, tăng tần suất giao dịch và chi phí trượt. Các thông số RSI có thể được điều chỉnh hoặc thêm các bộ lọc để giảm các tín hiệu không hợp lệ.

  • Sự đảo ngược thất bại là rủi ro chính của chiến lược này. Các nhà giao dịch cần theo dõi hướng xu hướng khung thời gian lớn hơn để tránh giao dịch ngược xu hướng.

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

  • Xem xét kết hợp các chỉ số khác để lọc ra các tín hiệu không hợp lệ, ví dụ: âm lượng, kênh Donchian vv.

  • Tối ưu hóa các tham số dựa trên kết quả backtest để tìm kết hợp tham số tối ưu.

  • Nghiên cứu cách điều chỉnh động hệ số ATR để thích nghi với môi trường thị trường khác nhau.

  • Tìm hiểu việc ngừng chiến lược trong thời gian có nguy cơ cao.

Kết luận

Chiến lược này tích hợp đánh giá xu hướng và mức mua quá mức / bán quá mức để nắm bắt các cơ hội đảo ngược trong các thị trường xu hướng. VSTOP cung cấp quản lý dừng lỗ có hệ thống để kiểm soát rủi ro. Chiến lược có thể được nâng cao hơn nữa thông qua tối ưu hóa tham số và kết hợp các chỉ số khác. Các nhà giao dịch cần phải cảnh giác với sự đảo ngược thất bại, rủi ro chính.


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

//@version=3
strategy("Vstop and RSI", overlay=true)

//RSI Section
length = input(2, "RSI Period") 
overSold = input(30, "Oversold Level") 
overBought = input(70, "Overbought Level") 
price = close 
vrsi = rsi (price, length) 

//VSTOP Section
vlength = input(2, "Vstop Length") 
mult = input(2, "Vstop Mult") 
atr_ = atr(vlength) 

max1=0.0 
min1=0.0 
is_uptrend_prev = false 
stop=0.0 
vstop_prev=0.0 
vstop1=0.0 
is_uptrend=false 
is_trend_changed=false 
max_ = 0.0 
min_ = 0.0 
vstop=0.0 

max1 := max(nz(max_[1]), close)
min1 := min(nz(min_[1]), close)


is_uptrend_prev := nz(is_uptrend[1], true)

stop := is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev := nz(vstop[1])
vstop1 := is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed := is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? green : red, style=cross, linewidth=2)

if vrsi > overBought
    strategy.entry("Buy", strategy.long, comment="Buy")
     
if vrsi < overSold and vstop > price
    strategy.entry("Sell", strategy.short, comment="Sell")

Thêm nữa