Strategi ini menggunakan indikator WaveTrend untuk menentukan tren harga dan situasi overbought/oversold. Ini menggabungkan indikator RSI untuk menyaring sinyal dan mengadopsi metode pelacakan tren untuk melakukan operasi kontra-trend pada tingkat overbought/oversold.
Strategi ini menggunakan indikator WaveTrend untuk menentukan arah tren harga. Indikator WaveTrend ditingkatkan berdasarkan indikator Rainbow. Ini menilai arah tren harga dengan menghitung perbedaan antara rata-rata bergerak Heikin-Ashi dan nilai absolut harga. Ini menghasilkan sinyal perdagangan dengan menggabungkan indikator RSI untuk menentukan situasi overbought / oversold.
Secara khusus, rumus WaveTrend dalam strategi adalah:
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)
Di mana esa adalah rata-rata bergerak Heikin-Ashi yang dihitung, d adalah rata-rata perbedaan antara rata-rata bergerak Heikin-Ashi dan nilai absolut harga. ci adalah rentang adaptif yang disebut, yang mencerminkan volatilitas harga. wt adalah rata-rata bergerak ci, yang menentukan arah tren harga dan merupakan indikator kunci untuk panjang dan pendek.
Indikator RSI digunakan untuk menentukan situasi overbought/oversold.
rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))
Nilai standarnya adalah 0-100. Di atas 70 adalah overbought dan di bawah 30 adalah oversold.
Dikombinasikan dengan kedua indikator ini, ketika RSI di bawah 25 dan WaveTrend di bawah -60, itu oversold untuk pergi panjang.
Keuntungan dari strategi ini meliputi:
Ada juga beberapa risiko:
Solusi:
Strategi dapat dioptimalkan dalam arah berikut:
Mengubah atau menambahkan indikator penilaian untuk meningkatkan akurasi sinyal, misalnya MACD, KD dll.
Mengoptimalkan pengaturan parameter untuk menyesuaikan produk yang berbeda, misalnya menyesuaikan periode lancar.
Tambahkan strategi stop loss pelacakan untuk mengendalikan kerugian tunggal, misalnya persentase stop loss, trailing stop loss dll.
Pertimbangkan strategi piramida yang berbeda, misalnya Martingale alih-alih kuantitas tetap.
Mengoptimalkan parameter kisaran adaptif untuk meningkatkan akurasi penilaian.
Ide keseluruhan strategi ini jelas, menggunakan indikator volatilitas untuk menentukan tren harga dan menyaring kebisingan secara efektif. Ada ruang untuk optimasi dalam berbagai aspek untuk membuat strategi lebih kuat. Melalui penyesuaian parameter, dapat disesuaikan dengan produk yang berbeda dan layak untuk pengujian langsung lebih lanjut.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's WaveTrender Strategy v1.0", shorttitle = "WaveTrender str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usemar = input(false, defval = false, title = "Use Martingale") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") showarr = input(true, defval = true, title = "Show Arrows") fromyear = input(2018, defval = 2018, 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") //RSI rsiup = rma(max(change(close), 0), 14) rsidown = rma(-min(change(close), 0), 14) rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown)) //WaveTrend esa = ema(hlc3, 10) d = ema(abs(hlc3 - esa), 10) ci = (hlc3 - esa) / (0.015 * d) wt = ema(ci, 21) //Body body = abs(close - open) abody = sma(body, 10) //Signals bar = close > open ? 1 : close < open ? -1 : 0 overs = rsi < 25 and wt < -60 overb = rsi > 75 and wt > 60 up1 = (strategy.position_size == 0 or close < strategy.position_avg_price) and overs and bar == -1 dn1 = (strategy.position_size == 0 or close > strategy.position_avg_price) and overb and bar == 1 exit = (strategy.position_size > 0 and overs == false) or (strategy.position_size < 0 and overb == false) //Arrows col = exit ? black : up1 or dn1 ? blue : na needup = up1 needdn = dn1 needexitup = exit and strategy.position_size < 0 needexitdn = exit and strategy.position_size > 0 plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0) plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0) //Trading profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1] mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1 lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1] if up1 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : lot) if dn1 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot) if exit strategy.close_all()