
Strategi trend-following reversal adalah strategi perdagangan trend berdasarkan purata bergerak dan harga yang melampau. Strategi ini menggunakan dua rata-rata bergerak untuk mengikuti trend harga dan membuka kedudukan terbalik apabila trend berbalik. Ia juga mengira saluran harga berdasarkan harga tertinggi dan terendah beberapa garis K terkini, dan menetapkan stop loss apabila harga mendekati sempadan saluran, untuk mengawal risiko lebih lanjut.
Strategi ini menggunakan HMA dan LMA dengan ketinggian 3 dan ketinggian 3 untuk mengesan trend harga. Interpret sebagai bullish apabila harga melintasi HMA; Interpret sebagai bearish apabila harga melintasi LMA.
Strategi ini juga akan mengira harga tertinggi dan terendah dalam barbakar K barisan terkini berdasarkan uplevel dan dnlevel. uplevel akan menambah satu faktor penyesuaian (corr) berdasarkan harga tertinggi dalam barbakar K barisan terkini; dan dnlevel akan mengurangkan satu faktor penyesuaian (corr) berdasarkan harga terendah dalam barbakar K barisan terkini.
Apabila membuka banyak pesanan, harga berhenti adalah saluran atas; apabila membuka pesanan kosong, harga berhenti adalah saluran bawah. Ini dapat mengawal risiko kerugian yang disebabkan oleh pembalikan harga.
Apabila isyarat pembalikan muncul, strategi ini akan segera membuka kedudukan terbalik dan mengikuti trend harga baru. Ini adalah prinsip pembalikan.
Kaedah pengoptimuman:
Strategi ini masih boleh dioptimumkan lagi:
Kombinasi penunjuk lain boleh diperkenalkan untuk menyaring beberapa isyarat tidak sah. Contohnya MACD, KD dan sebagainya.
Logik hentian adaptif boleh dimasukkan, seperti hentian bergerak, hentian baki, dan sebagainya, untuk mengawal risiko lebih lanjut.
Anda boleh menguji kesan parameter yang berbeza terhadap kesan strategi, mengoptimumkan kombinasi parameter. Contohnya, panjang kitaran MA, saiz faktor pemulihan, dan sebagainya.
Strategi ini adalah untuk berdagang pada waktu-waktu tertentu dan boleh disesuaikan untuk berdagang sepanjang hari. Ini mungkin memerlukan peraturan penapisan lain.
Strategi ini secara keseluruhannya adalah strategi perdagangan berbalik arah yang menggunakan saluran harga yang digabungkan dengan rata-rata bergerak. Dengan mengikuti trend dan membuka posisi terbalik pada masa yang tepat, ia dapat mengesan pergerakan harga dengan berkesan.
/*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()