
Strategi ini menggunakan indikator WaveTrend untuk menilai trend harga dan overbought oversold, digabungkan dengan RSI untuk memfilter isyarat, dan menggunakan trend tracking untuk melakukan operasi terbalik pada overbought oversold.
Strategi ini menggunakan indikator WaveTrend untuk menentukan arah trend harga. Indikator WaveTrend berdasarkan penambahbaikan pada indikator Rainbow, untuk menentukan arah trend harga dengan mengira perbezaan antara garis rata-rata Heikin-Ashi dan nilai mutlak harga.
Secara khusus, formula WaveTrend dalam strategi ini ialah:
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)
Di antaranya, esa adalah purata Heikin-Ashi yang dikira, d adalah purata perbezaan antara purata Heikin-Ashi dan nilai mutlak harga.
RSI digunakan untuk menilai overbought dan oversold. RSI dikodkan dengan formula:
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 piawaiannya adalah 0-100; lebih tinggi daripada 70 adalah kawasan membeli-belah, dan lebih rendah daripada 30 adalah kawasan menjual-belah.
Gabungan kedua-dua penunjuk ini, apabila RSI lebih rendah daripada 25, WaveTrend lebih rendah daripada -60 adalah kawasan jual-beli, memberi isyarat lebih banyak; apabila RSI lebih tinggi daripada 75, WaveTrend lebih tinggi daripada 60 adalah kawasan membeli-belah, memberi isyarat kurang.
Strategi ini mempunyai kelebihan berikut:
Strategi ini mempunyai beberapa risiko:
Kaedah pencegahan:
Strategi ini boleh dioptimumkan dengan cara berikut:
Tukar atau menambah penunjuk penilaian untuk mengoptimumkan ketepatan isyarat. Sebagai contoh, tambah penunjuk penilaian seperti MACD, KD.
Pengaturan parameter yang dioptimumkan untuk pelbagai jenis perdagangan. Sebagai contoh, menyesuaikan kitaran kelancaran untuk mencari kombinasi parameter terbaik.
Menyertai strategi untuk mengesan dan mengawal kerugian tunggal secara berkesan.
Pertimbangkan strategi penambahan saham yang berbeza. Sebagai contoh, penambahan saham Martingale digunakan sebagai pengganti jumlah tetap penambahan saham.
Mengoptimumkan parameter julat kesesuaian, mencari parameter terbaik untuk meningkatkan ketepatan penghakiman
Strategi ini mempunyai pemikiran keseluruhan yang jelas, menggunakan indikator kekuatan turun naik untuk menentukan trend harga, dan menapis isyarat perdagangan bising dengan berkesan. Terdapat ruang yang besar untuk pengoptimuman strategi, dan ia boleh diperbaiki dari pelbagai sudut, menjadikan strategi lebih stabil dan boleh dipercayai.
/*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()