Strategi ini menggunakan penunjuk WaveTrend untuk menentukan trend harga dan situasi overbought/oversold. Ia menggabungkan penunjuk RSI untuk menapis isyarat dan menggunakan kaedah penjejakan trend untuk membuat operasi kontra-trend pada tahap overbought/oversold.
Strategi ini menggunakan penunjuk WaveTrend untuk menentukan arah trend harga. Penunjuk WaveTrend dipertingkatkan berdasarkan penunjuk Pelangi. Ia menilai arah trend harga dengan mengira perbezaan antara purata bergerak Heikin-Ashi dan nilai mutlak harga. Ia menghasilkan isyarat perdagangan dengan menggabungkan penunjuk RSI untuk menentukan situasi overbought / oversold.
Secara khusus, formula 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 purata bergerak Heikin-Ashi yang dikira, d adalah purata perbezaan antara purata bergerak Heikin-Ashi dan nilai mutlak harga. ci adalah julat adaptif yang disebut, yang mencerminkan turun naik harga. wt adalah purata bergerak ci, yang menentukan arah trend harga dan merupakan penunjuk utama 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 standardnya adalah 0-100. Di atas 70 adalah overbought dan di bawah 30 adalah oversold.
Digabungkan dengan kedua-dua penunjuk ini, apabila RSI di bawah 25 dan WaveTrend di bawah -60, ia terlalu dijual untuk pergi panjang.
Kelebihan strategi ini termasuk:
Terdapat juga beberapa risiko:
Penyelesaian:
Strategi ini boleh dioptimumkan ke arah berikut:
Mengubah atau menambah penunjuk penilaian untuk meningkatkan ketepatan isyarat, contohnya MACD, KD dll.
Mengoptimumkan tetapan parameter untuk menyesuaikan produk yang berbeza, contohnya menyesuaikan tempoh lancar.
Tambah strategi stop loss pengesanan untuk mengawal kerugian tunggal, contohnya peratusan stop loss, trailing stop loss dll.
Pertimbangkan strategi piramid yang berbeza, contohnya Martingale bukannya kuantiti tetap.
Mengoptimumkan parameter julat penyesuaian untuk meningkatkan ketepatan penilaian.
Idea keseluruhan strategi ini jelas, menggunakan penunjuk turun naik untuk menentukan trend harga dan menapis bunyi bising dengan berkesan. Terdapat ruang untuk pengoptimuman dalam pelbagai aspek untuk menjadikan strategi lebih kukuh. Melalui penyesuaian parameter, ia boleh disesuaikan dengan produk yang berbeza dan bernilai ujian langsung yang 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()