Chiến lược giao dịch định lượng dựa trên StochRSI


Ngày tạo: 2023-12-07 16:05:17 sửa đổi lần cuối: 2023-12-07 16:05:17
sao chép: 0 Số nhấp chuột: 627
1
tập trung vào
1619
Người theo dõi

Chiến lược giao dịch định lượng dựa trên StochRSI

Tổng quan

Chiến lược này được phát triển dựa trên chỉ số StochRSI. Chiến lược này chủ yếu sử dụng chỉ số StochRSI để xác định tình trạng quá mua quá bán, kết hợp với chỉ số RSI để lọc một số tín hiệu giả, làm trống khi chỉ số StochRSI hiển thị khu vực quá bán và làm thêm khi hiển thị khu vực quá bán, để đạt được lợi nhuận.

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

Chiến lược này chủ yếu sử dụng chỉ số StochRSI để xác định khu vực quá mua quá bán của thị trường. Chỉ số StochRSI bao gồm các đường K và đường D, trong đó đường K phản ánh vị trí của giá trị RSI hiện tại trong phạm vi giá RSI trong khoảng thời gian gần đây, đường D là đường trung bình di chuyển của đường K. Khi K đi qua đường D, khu vực quá bán có thể được thực hiện; khi K đi qua đường D, khu vực quá bán có thể được thực hiện.

Cụ thể, chiến lược này đầu tiên tính giá trị của chỉ số RSI có chiều dài 14, sau đó áp dụng chỉ số StochRSI trên chỉ số RSI. Các tham số của chỉ số StochRSI được thiết lập với chiều dài 14, chu kỳ trơn K là 3, và D là 3. Khi K trên đường đi qua khu vực bán tháo được thiết lập bởi người dùng (bằng mặc định 1), hãy làm nhiều hơn; Khi K dưới đường đi qua khu vực bán tháo được thiết lập bởi người dùng (bằng mặc định 99), hãy làm trống.

Ngoài ra, chiến lược cũng đặt các tham số dừng và dừng. tham số dừng mặc định là 10000; dừng theo tham số được đặt thành đường cong trailing stop, số điểm theo dõi mặc định là 300 và độ lệch là 0.

Phân tích lợi thế

  1. Sử dụng chỉ số StochRSI để đánh giá vùng quá mua quá bán, đáng tin cậy hơn chỉ số RSI đơn lẻ
  2. Kết hợp các tín hiệu lọc RSI để tránh đột phá giả
  3. Cài đặt cơ chế kiểm soát rủi ro của hệ thống ngăn chặn

Phân tích rủi ro

  1. StochRSI có thể có tín hiệu giả đầu
  2. Cần thiết lập các tham số mua quá mức hợp lý, nếu không sẽ hoạt động sai
  3. Điểm dừng quá nhỏ có thể dễ bị mắc kẹt, điểm dừng quá lớn có thể mang lại lợi nhuận hạn chế

Đối với các rủi ro trên, bạn có thể đặt chu kỳ tham số dài hơn hoặc xem xét sử dụng với các chỉ số khác để lọc tín hiệu, điều chỉnh tham số mua quá mức cho phù hợp với các thị trường khác nhau và kiểm tra các tham số dừng lỗ khác nhau.

Hướng tối ưu hóa

  1. Có thể xem xét sử dụng kết hợp với các chỉ số khác, chẳng hạn như MACD, Brinline, v.v., để lọc tín hiệu giả
  2. Có thể thử nghiệm các thiết lập chu kỳ tham số khác nhau để phù hợp với nhiều tình huống thị trường hơn
  3. Có thể tối ưu hóa điểm dừng lỗ, thử nghiệm nhiều lần trong lần phản hồi để tìm tham số tối ưu

Tóm tắt

Chiến lược này dựa trên chỉ số StochRSI để đánh giá khu vực quá mua quá bán để giao dịch. So với chỉ số RSI đơn lẻ, StochRSI kết hợp với suy nghĩ của KDJ, có thể đánh giá chính xác hơn về điểm biến đổi. Đồng thời kết hợp với RSI để lọc tín hiệu giả và thiết lập rủi ro kiểm soát dừng lỗ.

Mã nguồn chiến lược
/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version= 2
strategy("STOCHRSI JURE", overlay=false)
lengthrsi = input(10)
overSold = input( 1 )
overBought = input(99)

call_trail_stop = input(300)
call_trail_offset = input(0)
call_sl = input(10000)

price = ohlc4
vrsi = rsi(price, lengthrsi)

smoothK = input(3, minval=1)
smoothD = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
src = input(close, title="RSI Source")

rsi1 = rsi(src, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)


plot( k, color=blue, linewidth=1, title="K")
plot( d, color=red, linewidth=1, title="D")

if (crossover(k, overSold) ) 
    strategy.entry("BUY", strategy.long, stop=close, oca_name="TREND",  comment="BUY")
    strategy.exit("BUY EXIT", "BUY", trail_points=call_trail_stop, trail_offset=call_trail_offset, loss = call_sl)


if (crossunder(k, overBought) ) 
    strategy.entry("SELL", strategy.short,stop=close, oca_name="TREND", comment="SELL")
    strategy.exit("SELL EXIT", "SELL", trail_points=call_trail_stop, trail_offset=call_trail_offset, loss = call_sl)
    

//if (  ( crossover(k,d)) and ( (vrsi<overSold) or crossover(vrsi,overSold) )  and   year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil) 
//    strategy.entry("BUY", strategy.long, stop=close, oca_name="TREND", oca_type=strategy.oca.cancel, comment="BUY")
//else
//    strategy.cancel(id="BUY")

//if ( ( crossunder(k,d) ) and ( (vrsi >overBought) or crossunder(vrsi,overBought) ) and   year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil ) 
//    strategy.entry("SELL", strategy.short,stop=close, oca_name="TREND", oca_type=strategy.oca.cancel, comment="SELL")
//else
//    strategy.cancel(id="SELL")