
Strategi ini didasarkan pada indikator supertrend, yang digabungkan dengan ATR untuk secara dinamis menetapkan garis stop loss, sehingga menghasilkan keuntungan dalam tren kuat Ethereum. Strategi ini dapat dijalankan pada pasangan perdagangan ETH/USD di bursa Coinbase.
Strategi ini menggunakan indikator trend-following klasik dan indikator supertrend untuk menilai arah trend. Indikator supertrend terdiri dari dua kurva, yaitu:
Ketika harga berubah dari tren naik ke tren turun, buka posisi kosong; Ketika harga berubah dari tren turun ke tren naik, buka posisi multihead.
Selain itu, strategi ini juga menggunakan indikator ATR untuk secara dinamis menyesuaikan posisi stop loss. Secara khusus, posisi stop loss naik adalah rata-rata harga tertinggi dan harga terendah dikurangi ATR dikali satu faktor; posisi stop loss turun adalah rata-rata harga tertinggi dan harga terendah ditambah ATR dikali satu faktor.
Setelah masuk ke sinyal, jika harga kembali melewati batas stop loss, maka stop loss exit akan dilakukan.
Ini adalah strategi pelacakan tren yang lebih matang, dengan keuntungan sebagai berikut:
Strategi ini juga memiliki beberapa risiko:
Untuk mengurangi risiko di atas, ATR dapat disesuaikan sesuai, atau digabungkan dengan indikator lain untuk memfilter sinyal perdagangan.
Strategi ini masih bisa dioptimalkan lebih jauh:
Strategi ini secara keseluruhan merupakan strategi pelacakan tren yang terbukti dan andal. Strategi ini menggunakan indikator supertrend untuk menentukan arah tren dan menggunakan ATR untuk menyesuaikan posisi stop loss untuk mengendalikan risiko sekaligus mendapatkan keuntungan. Strategi ini cocok untuk perdagangan mata uang digital yang berfluktuasi tinggi dan bekerja dengan baik pada mata uang utama seperti Ethereum. Dengan pengoptimalan lebih lanjut, strategi ini dapat diterapkan di pasar yang lebih luas dan mendapatkan keuntungan ekstra yang lebih stabil.
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("SuperTrend Strategy",
overlay=true,
initial_capital=2e3,
process_orders_on_close=true,
commission_type=strategy.commission.percent,
commission_value=0.1
)
length = input(title="ATR Period", type=input.integer, defval=21)
mult = input(title="ATR Multiplier", type=input.float, step=.25, defval=6.2)
wicks = input(title="Take Wicks into Account ?", type=input.bool, defval=false)
useDate = input(title="Start from Specific Date ?", defval=false)
yearStart = input(title="Start Year", defval=2019)
monthStart = input(title="Start Month", minval=1, maxval=12, defval=1)
dayStart = input(title="Start Day", minval=1, maxval=31, defval=1)
startTime = timestamp(yearStart, monthStart, dayStart, 0, 0)
startFrom = useDate ? time(timeframe.period) >= startTime : true
atr = mult * ta.atr(length)
longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop := (wicks ? low[1] : close[1]) > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := (wicks ? high[1] : close[1]) < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and (wicks ? high : close) > shortStopPrev ? 1 : dir == 1 and (wicks ? low : close) < longStopPrev ? -1 : dir
longColor = color.green
shortColor = color.red
plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor)
plotshape(dir == 1 and dir[1] == -1 ? longStop : na, title="Long Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0)
plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
plotshape(dir == -1 and dir[1] == 1 ? shortStop : na, title="Short Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0)
longCondition = dir[1] == -1 and dir == 1
if longCondition and startFrom
strategy.entry("Long", strategy.long, stop=longStop)
else
strategy.cancel("Long")
shortCondition = dir[1] == 1 and dir == -1
if shortCondition and startFrom
strategy.entry("Short", strategy.short, stop=shortStop)
else
strategy.cancel("Short")