
Ini adalah strategi yang didasarkan pada indikator supertrend dan indikator ATR. Gagasan utama dari strategi ini adalah: menggunakan indikator supertrend untuk menentukan arah tren pasar saat ini, melakukan perdagangan ketika indikator supertrend berubah. Strategi ini juga menggunakan indikator ATR untuk menghitung harga stop loss dan stop loss, dan menghitung ukuran posisi berdasarkan proporsi tertentu dari saldo akun untuk mengendalikan risiko.
Strategi ini berbunyi:
Keuntungan dari strategi ini adalah sebagai berikut:
Risiko dari strategi ini adalah sebagai berikut:
Langkah-langkah yang dapat diambil untuk mengatasi risiko tersebut adalah sebagai berikut:
Strategi ini dapat dioptimalkan dengan cara:
Optimasi di atas dapat meningkatkan profitabilitas dan stabilitas strategi, sekaligus mengurangi risiko strategi, sehingga strategi lebih sesuai dengan lingkungan pasar yang berbeda.
Strategi ini menggabungkan indikator supertrend dan indikator ATR untuk menangkap tren secara efektif, sekaligus mengendalikan risiko. Dengan menghitung ukuran posisi optimal, risiko setiap perdagangan dapat dikendalikan. Namun, strategi ini dapat menghasilkan biaya perdagangan dan penarikan yang lebih tinggi di pasar yang bergoyang.
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tradez99
//@version=5
strategy('Supertrend', overlay=true, format=format.price, precision=2)
Periods = input(title='ATR Period', defval=10)
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input(title='Change ATR Calculation Method ?', defval=true)
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input(title='Highlighter On/Off ?', defval=true)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? trend == 1 ? color.green : color.white : color.white
shortFillColor = highlighting ? trend == -1 ? color.red : color.white : color.white
//fill(mPlot, upPlot, title='UpTrend Highligter', color=longFillColor)
//fill(mPlot, dnPlot, title='DownTrend Highligter', color=shortFillColor)
multiplier = input.float(title="ATR multiplier", defval = 1.5)
rr = input.float(title="Risk:Reward", defval=1.0)
riskPerTrade = input.float(title="Risk Per Trade %", defval=1.0)
atr3 = ta.atr(14)
//calculate stops and targets
longstop = close - (atr3 * multiplier)
shortstop = close + (atr3 * multiplier)
longStopDistance = close - longstop
shortStopDistance = shortstop - close
longTarget = close + (longStopDistance * rr)
shortTarget = close - (shortStopDistance * rr)
// Save stops & targets
var t_stop = 0.0
var t_target = 0.0
longCondition = buySignal
if (longCondition)
t_stop := longstop
t_target := longTarget
positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (close - t_stop))
strategy.entry("Long", strategy.long, qty = positionSize)
shortCondition = sellSignal
if (shortCondition)
t_stop := shortstop
t_target := shortTarget
positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (t_stop - close))
strategy.entry("Short", strategy.short, qty = positionSize)
strategy.exit(id="Long Exit", from_entry="Long", limit=t_target, stop=t_stop)
strategy.exit(id="Short Exit", from_entry="Short", limit=t_target, stop=t_stop)