
Ý tưởng chính của chiến lược này là sử dụng bộ lọc Ehlers SuperSmoother để xử lý các chỉ số Stochastic RSI ngẫu nhiên, để lọc ra nhiều tín hiệu giả và có được tín hiệu giao dịch đáng tin cậy hơn. Nguyên tắc cơ bản là tính toán các chỉ số ngẫu nhiên, sau đó sử dụng bộ lọc Ehlers SuperSmoother để xử lý chúng một cách trơn tru, và cuối cùng là làm nhiều không gian chéo với đường trung bình di chuyển của nó.
Chiến lược này đầu tiên tính toán chỉ số RSI của giá đóng cửa nhật ký, sau đó tính Stochastic dựa trên chỉ số RSI, một chỉ số chỉ số tương đối mạnh mẽ điển hình. Để lọc các tín hiệu giả, sử dụng bộ lọc siêu phẳng của Ells để xử lý Stochastic RSI, và cuối cùng, đường Stochastic RSI được giao dịch với đường trung bình di chuyển của chính nó.
Lợi thế lớn nhất của chiến lược này là sử dụng bộ lọc siêu mịn của Ells, có thể lọc hiệu quả nhiều tín hiệu giả, làm cho tín hiệu giao dịch đáng tin cậy hơn. Ngoài ra, chỉ số Stochastic RSI tự nó có khả năng phá vỡ và theo dõi xu hướng tốt. Vì vậy, chiến lược này có thể xác định đúng xu hướng, đặt vị trí khi thích hợp và giảm vị trí khi thích hợp.
Rủi ro chính của chiến lược này là có thể tạo ra tín hiệu sai khi thị trường dao động mạnh. Stochastic RSI sẽ tạo ra nhiều tín hiệu sai khi giá dao động mạnh trong một phạm vi hẹp hơn, trong đó hiệu quả của bộ lọc siêu mịn của Ells cũng bị giảm giá. Ngoài ra, trong một số trường hợp mạnh, sự chậm trễ của chỉ số cũng có thể mang lại một số rủi ro.
Để giảm những rủi ro này, bạn có thể điều chỉnh các tham số thích hợp, chẳng hạn như tăng chu kỳ chỉ số Stochastic, giảm độ mịn, v.v., để lọc thêm tín hiệu giả. Ngoài ra, bạn cũng có thể xem xét kết hợp với các chỉ số hoặc hình dạng khác để tạo ra nhiều điều kiện lọc, tránh rủi ro do tín hiệu sai.
Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:
Cài đặt tham số tối ưu hóa. Các tham số như chiều dài, hằng số mịn của chỉ số Stochastic RSI có thể được kiểm tra kỹ lưỡng để tìm ra sự kết hợp tham số tối ưu nhất.
Tăng cơ chế dừng lỗ. Bạn có thể thiết lập dừng di chuyển hoặc dừng đơn để khóa lợi nhuận và giảm rút tiền.
Kết hợp với các chỉ số hoặc hình thức khác. Bạn có thể xem xét kết hợp với các chỉ số tỷ lệ biến động, trung bình di chuyển, v.v. để tạo ra nhiều điều kiện lọc, giảm thiểu rủi ro hơn nữa.
Điều chỉnh vị trí theo kết quả phân tích chu kỳ lớn. Bạn có thể điều chỉnh kích thước vị trí của mỗi giao dịch theo động theo kết quả phân tích xu hướng của chu kỳ thời gian cao hơn.
Chiến lược này đầu tiên tính toán chỉ số Stochastic RSI, sau đó xử lý nó bằng bộ lọc siêu mịn của Els, và cuối cùng tạo ra tín hiệu giao dịch với đường trung bình di chuyển của riêng mình, để có thể đánh giá đúng xu hướng. Ưu điểm của chiến lược là sử dụng kết hợp các chỉ số và bộ lọc, có thể lọc hiệu quả các tín hiệu giả, có cơ hội giao dịch có tỷ lệ cao.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("ES Stoch RSI Strategy [krypt]", overlay=true, calc_on_order_fills=true, calc_on_every_tick=true, initial_capital=10000, currency='USD')
//Backtest Range
FromMonth = input(defval = 06, title = "From Month", minval = 1)
FromDay = input(defval = 1, title = "From Day", minval = 1)
FromYear = input(defval = 2018, title = "From Year", minval = 2014)
ToMonth = input(defval = 7, title = "To Month", minval = 1)
ToDay = input(defval = 30, title = "To Day", minval = 1)
ToYear = input(defval = 2018, title = "To Year", minval = 2014)
PI = 3.14159265359
drop1st(src) =>
x = na
x := na(src[1]) ? na : src
xlowest(src, len) =>
x = src
for i = 1 to len - 1
v = src[i]
if (na(v))
break
x := min(x, v)
x
xhighest(src, len) =>
x = src
for i = 1 to len - 1
v = src[i]
if (na(v))
break
x := max(x, v)
x
xstoch(c, h, l, len) =>
xlow = xlowest(l, len)
xhigh = xhighest(h, len)
100 * (c - xlow) / (xhigh - xlow)
Stochastic(c, h, l, length) =>
rawsig = xstoch(c, h, l, length)
min(max(rawsig, 0.0), 100.0)
xrma(src, len) =>
sum = na
sum := (src + (len - 1) * nz(sum[1], src)) / len
xrsi(src, len) =>
msig = nz(change(src, 1), 0.0)
up = xrma(max(msig, 0.0), len)
dn = xrma(max(-msig, 0.0), len)
rs = up / dn
100.0 - 100.0 / (1.0 + rs)
EhlersSuperSmoother(src, lower) =>
a1 = exp(-PI * sqrt(2) / lower)
coeff2 = 2 * a1 * cos(sqrt(2) * PI / lower)
coeff3 = -pow(a1, 2)
coeff1 = (1 - coeff2 - coeff3) / 2
filt = na
filt := nz(coeff1 * (src + nz(src[1], src)) + coeff2 * filt[1] + coeff3 * filt[2], src)
smoothK = input(7, minval=1, title="K")
smoothD = input(2, minval=1, title="D")
lengthRSI = input(10, minval=1, title="RSI Length")
lengthStoch = input(3, minval=1, title="Stochastic Length")
showsignals = input(true, title="Buy/Sell Signals")
src = input(close, title="Source")
ob = 80
os = 20
midpoint = 50
price = log(drop1st(src))
rsi1 = xrsi(price, lengthRSI)
rawsig = Stochastic(rsi1, rsi1, rsi1, lengthStoch)
sig = EhlersSuperSmoother(rawsig, smoothK)
ma = sma(sig, smoothD)
plot(sig, color=#0094ff, title="K", transp=0)
plot(ma, color=#ff6a00, title="D", transp=0)
lineOB = hline(ob, title="Upper Band", color=#c0c0c0)
lineOS = hline(os, title="Lower Band", color=#c0c0c0)
fill(lineOB, lineOS, color=purple, title="Background")
// Buy/Sell Signals
// use curvature information to filter out some false positives
mm1 = change(change(ma, 1), 1)
mm2 = change(change(ma, 2), 2)
ms1 = change(change(sig, 1), 1)
ms2 = change(change(sig, 2), 2)
sellsignals = showsignals and (mm1 + ms1 < 0 and mm2 + ms2 < 0) and crossunder(sig, ma) and sig[1] > ob
buysignals = showsignals and (mm1 + ms1 > 0 and mm2 + ms2 > 0) and crossover(sig, ma) and sig[1] < os
ploff = 4
plot(buysignals ? sig[1] - ploff : na, style=circles, color=#008fff, linewidth=3, title="Buy Signal", transp=0)
plot(sellsignals ? sig[1] + ploff : na, style=circles, color=#ff0000, linewidth=3, title="Sell Signal", transp=0)
longCondition = buysignals
if (longCondition)
strategy.entry("L", strategy.long, comment="Long", when=(buysignals))
shortCondition = sellsignals
if (shortCondition)
strategy.entry("S", strategy.short, comment="Short", when=(sellsignals))