Chiến lược RSI ngẫu nhiên được làm mịn Els


Ngày tạo: 2024-01-26 15:58:48 sửa đổi lần cuối: 2024-01-26 15:58:48
sao chép: 0 Số nhấp chuột: 777
1
tập trung vào
1617
Người theo dõi

Chiến lược RSI ngẫu nhiên được làm mịn Els

Tổng quan

Ý 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ó.

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

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ó.

Phân tích lợi thế

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.

Phân tích rủi ro

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.

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

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

  1. 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.

  2. 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.

  3. 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.

  4. Đ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.

Tóm tắt

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.

Mã nguồn chiến lược
/*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))