
Strategi trend tracking reversal adalah strategi trading trend yang didasarkan pada moving average dan harga extreme. Strategi ini menggunakan dua moving average untuk melacak tren harga dan membuka posisi reversal ketika tren berbalik. Pada saat yang sama, strategi ini juga menghitung saluran harga berdasarkan harga tertinggi dan terendah dari beberapa garis K terbaru, dan mengatur stop loss ketika harga mendekati batas saluran, untuk mengendalikan risiko lebih lanjut.
Strategi ini menggunakan tinggi dan rendah 3 dari rata-rata bergerak HMA dan LMA untuk melacak tren harga. Interpret sebagai bullish ketika harga naik melalui HMA; Interpret sebagai bearish ketika harga turun melalui LMA.
Strategi ini juga akan menghitung uplevel dan dnlevel dari saluran harga berdasarkan harga tertinggi dan terendah di bar paling dekat di garis akar K. Uplevel akan menambahkan sebuah koefisien regresicorr berdasarkan harga tertinggi di garis akar K bar paling dekat; dnlevel akan mengurangi koefisien regresicorr berdasarkan harga terendah di garis akar K bar paling dekat.
Ketika membuka lebih banyak pesanan, harga stop loss adalah saluran atas; Ketika membuka pesanan kosong, harga stop loss adalah saluran bawah. Ini dapat secara efektif mengendalikan risiko kerugian yang ditimbulkan oleh pembalikan harga.
Ketika sinyal reversal muncul, strategi ini akan segera membuka posisi reversal dan mengikuti tren harga baru. Ini adalah prinsip reversal tracking.
Metode optimasi:
Strategi ini masih bisa dioptimalkan lebih jauh:
Kombinasi indikator lain dapat diperkenalkan untuk menyaring beberapa sinyal yang tidak valid. Misalnya MACD, KD, dll.
Adaptive Stop Loss Logic, seperti Moving Stop Loss, Balance Stop Loss, dan lain-lain dapat ditambahkan untuk mengendalikan risiko lebih lanjut.
Anda dapat menguji efek dari parameter yang berbeda pada efek strategi, mengoptimalkan kombinasi parameter seperti panjang siklus MA, ukuran koefisien regresi, dan lain-lain.
Strategi saat ini adalah perdagangan frekuensi, atau dapat disesuaikan untuk perdagangan sepanjang hari. Ini mungkin memerlukan aturan penyaringan lainnya.
Strategi ini secara keseluruhan adalah strategi perdagangan berbalik tren yang menggunakan saluran harga yang digabungkan dengan rata-rata bergerak. Dengan melacak tren dan membuka posisi berbalik pada waktu yang tepat, strategi ini dapat secara efektif melacak pergerakan harga.
/*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"}]
*/
//Noro
//2019
//@version=3
strategy(title = "Noro's 3Bars Strategy by Larry Williams", shorttitle = "3Bars", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
corr = input(0.0, title = "Correction, %")
bars = input(1, minval = 1)
revers = input(false, defval = false, title = "revers")
showll = input(true, defval = true, title = "Show Levels")
showos = input(true, defval = true, title = "Show Levels one side")
showcl = input(false, defval = false, title = "Show Levels continuous line")
showbg = input(false, defval = false, title = "Show Background")
showar = input(false, defval = false, title = "Show Arrows")
fromyear = input(1900, defval = 1900, 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")
len = input(3)
hma = sma(high, len)
lma = sma(low, len)
plot(hma)
plot(lma)
//Levels
hbar = 0
hbar := high > high[1] ? 1 : high < high[1] ? -1 : 0
lbar = 0
lbar := low > low[1] ? 1 : low < low[1] ? -1 : 0
uplevel = 0.0
dnlevel = 0.0
hh = highest(high, bars + 1)
ll = lowest(low, bars + 1)
uplevel := hbar == -1 and sma(hbar, bars)[1] == 1 ? hh + ((hh / 100) * corr) : uplevel[1]
dnlevel := lbar == 1 and sma(lbar, bars)[1] == -1 ? ll - ((ll / 100) * corr) : dnlevel[1]
//Background
size = strategy.position_size
trend = 0
trend := size > 0 ? 1 : size < 0 ? -1 : high >= uplevel ? 1 : low <= dnlevel ? -1 : trend[1]
col = showbg == false ? na : trend == 1 ? lime : trend == -1 ? red : na
bgcolor(col)
//Lines
upcol = na
upcol := showll == false ? na : uplevel != uplevel[1] and showcl == false ? na : showos and trend[1] == 1 ? na : lime
plot(uplevel, color = upcol, linewidth = 2)
dncol = na
dncol := showll == false ? na : dnlevel != dnlevel[1] and showcl == false ? na : showos and trend[1] == -1 ? na : red
plot(dnlevel, color = dncol, linewidth = 2)
//Arrows
longsignal = false
shortsignal = false
longsignal := size > size[1]
shortsignal := size < size[1]
plotarrow(longsignal and showar and needlong ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(shortsignal and showar and needshort ? -1 : na, colorup = blue, colordown = blue, transp = 0)
//Trading
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if uplevel > 0 and dnlevel > 0 and revers == false
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel)
strategy.entry("Long stop", strategy.short, 0, stop = lma)
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel)
strategy.entry("Short stop", strategy.long, 0, stop = hma)
// if time > timestamp(toyear, tomonth, today, 23, 59)
// strategy.close_all()