
Strategi Single Side Trend Shock Breakout adalah strategi penembusan yang memanfaatkan saluran harga dan penilaian tren. Ini bertujuan untuk mengidentifikasi arah tren, masuk ke dalam zona goncangan, dan keluar setelah mencapai target keuntungan yang ditetapkan.
Strategi ini beroperasi dengan menghitung naik dan turun dari saluran harga untuk menentukan apakah harga telah menembus saluran tersebut. Secara khusus, strategi ini pertama-tama menghitung harga tertinggi dan terendah dari siklus N terakhir, dan menghitung garis tengah harga. Kemudian menghitung jarak rata-rata absolut dari harga dan garis tengah, untuk mendapatkan naik dan turun.
Ketika menilai tren, strategi memeriksa apakah beberapa garis K terbaru semuanya ditutup di atas saluran (sinyal multihead) atau di bawah saluran (sinyal headless). Setelah menilai tren, strategi menunggu harga bergoyang, membentuk sinyal terobosan di dekat saluran atas atau bawah, dan masuk ke dalam lapangan dengan cara masuk terbalik.
Selain itu, strategi juga akan menilai entitas K-line yang terobosan, sebagai sinyal masuk tambahan. Strategi akan menetapkan tujuan untuk mendapatkan keuntungan setelah masuk, dan secara aktif berhenti ketika harga mencapai target.
Strategi ini memiliki beberapa keuntungan:
Strategi ini juga memiliki beberapa risiko:
Untuk mengurangi risiko, parameter dapat disesuaikan untuk mempersempit ruang gerak, menghindari posisi terbalik dalam tren yang kuat, mengoptimalkan logika stop-loss, dan sebagainya.
Strategi ini juga dapat dioptimalkan dari beberapa arah:
Strategi terobosan tren sepihak melalui saluran harga dan penilaian tren, metode untuk membangun posisi terbalik di zona goyah menguntungkan. Ini memiliki keuntungan untuk menilai tren, menghentikan inisiatif, tetapi juga ada risiko tertentu. Dengan metode pengesahan multi-indikator, pengoptimalan parameter dan lain-lain, risiko dapat dikurangi untuk meningkatkan ruang keuntungan.
/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Noro's Bands Scalper Strategy v1.5", shorttitle = "Scalper str 1.5", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
bodylen = input(10, defval = 10, minval = 0, maxval = 50, title = "Body length")
trb = input(1, defval = 1, minval = 1, maxval = 5, title = "Trend bars")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close
//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2
//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2
//Trend
chd = close > hd
cld = close < ld
uptrend = trb == 1 and chd ? 1 : trb == 2 and chd and chd[1] ? 1 : trb == 3 and chd and chd[1] and chd[2] ? 1 : trb == 4 and chd and chd[1] and chd[2] and chd[3] ? 1 : trb == 5 and chd and chd[1] and chd[2] and chd[3] and chd[4] ? 1 : 0
dntrend = trb == 1 and cld ? 1 : trb == 2 and cld and cld[1] ? 1 : trb == 3 and cld and cld[1] and cld[2] ? 1 : trb == 4 and cld and cld[1] and cld[2] and cld[3] ? 1 : trb == 5 and cld and cld[1] and cld[2] and cld[3] and cld[4] ? 1 : 0
trend = dntrend == 1 and high < center ? -1 : uptrend == 1 and low > center ? 1 : trend[1]
//trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]
//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//Body
body = abs(close - open)
smabody = ema(body, 30) / 10 * bodylen
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0
if up7 == 1 or up8 == 1
strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)
if dn7 == 1 or dn8 == 1
strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)