
Strategi ini berdasarkan kepada indikator supertrend, yang digabungkan dengan ATR untuk secara dinamik menetapkan garis stop loss, untuk mendapat keuntungan dalam trend kuat Ethereum. Ia boleh dijalankan pada pasangan perdagangan ETH/USD di bursa Coinbase.
Strategi ini menggunakan indikator trend-tracking klasik dan indikator supertrend untuk menilai arah trend. Indeks supertrend terdiri daripada dua kurva, iaitu:
Apabila harga bertukar dari trend naik ke trend menurun, ambil kedudukan kosong; apabila harga bertukar dari trend menurun ke trend naik, ambil kedudukan berganda.
Di samping itu, strategi ini juga menggunakan indikator ATR untuk menyesuaikan kedudukan garis berhenti secara dinamik. Khususnya, kedudukan garis berhenti yang naik adalah ATR kali ganda dengan harga tertinggi dan purata harga terendah; kedudukan garis berhenti yang turun adalah ATR kali ganda dengan harga tertinggi dan purata harga terendah.
Selepas masuk ke isyarat, jika harga kembali ke garis stop loss, berhentilah untuk keluar.
Ini adalah strategi trend-following yang lebih matang, dengan kelebihan berikut:
Strategi ini mempunyai beberapa risiko:
Untuk mengurangkan risiko di atas, faktor ATR boleh diselaraskan dengan betul, atau digabungkan dengan indikator lain untuk menyaring isyarat perdagangan. Kedudukan hentian juga boleh dipertimbangkan untuk menyimpan beberapa perlindungan.
Strategi ini masih boleh dioptimumkan lagi:
Strategi ini secara keseluruhan adalah strategi pengesanan trend yang terbukti dan boleh dipercayai. Ia menggunakan petunjuk trend super untuk menentukan arah trend dan menggunakan ATR untuk menyesuaikan kedudukan hentian untuk mengawal risiko sambil mendapat keuntungan. Strategi ini sesuai untuk perdagangan mata wang digital yang bergelombang tinggi, dan ia berfungsi dengan baik pada mata wang utama seperti Ethereum. Dengan pengoptimuman lanjut, strategi ini dapat digunakan di pasaran yang lebih luas dan memperoleh keuntungan tambahan 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")