Ini adalah strategi berdasarkan penunjuk Supertrend dan penunjuk ATR. Idea utama strategi ini adalah untuk menggunakan penunjuk Supertrend untuk menentukan arah trend pasaran semasa dan membuat perdagangan apabila penunjuk Supertrend berubah. Pada masa yang sama, strategi ini menggunakan penunjuk ATR untuk mengira harga stop loss dan mengambil keuntungan, dan mengira saiz kedudukan berdasarkan peratusan tertentu baki akaun untuk mengawal risiko.
Prinsip-prinsip strategi ini adalah seperti berikut:
Kelebihan strategi ini adalah seperti berikut:
Risiko strategi ini adalah seperti berikut:
Untuk menangani risiko di atas, langkah-langkah berikut boleh diambil:
Strategi ini boleh dioptimumkan dalam bidang berikut:
Pengoptimuman di atas boleh meningkatkan keuntungan dan kestabilan strategi sambil mengurangkan risikonya, menjadikannya lebih mudah disesuaikan dengan persekitaran pasaran yang berbeza.
Strategi ini menggabungkan penunjuk Supertrend dan penunjuk ATR untuk menangkap trend dengan berkesan sambil mengawal risiko. Dengan mengira saiz kedudukan optimum, risiko setiap perdagangan boleh dikawal. Walau bagaimanapun, strategi ini boleh menghasilkan kos transaksi dan penarikan yang tinggi di pasaran yang tidak menentu. Dengan memperkenalkan lebih banyak penunjuk teknikal, mengoptimumkan parameter, menambah faktor kawalan risiko, dan meningkatkan strategi mengambil keuntungan, prestasi strategi ini dapat ditingkatkan lagi. Secara keseluruhan, strategi ini adalah strategi trend yang mudah dan berkesan yang sesuai untuk digunakan di pasaran trend.
/*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)