Strategi perdagangan supertrend berdasarkan kombinasi ATR dan MA

Penulis:ChaoZhang, Tanggal: 2023-12-01 16:40:27
Tag:

img

Gambaran umum

Strategi trading Supertrend adalah strategi mengikuti tren berdasarkan Average True Range (ATR) dan Moving Average (MA).

Ide utama di balik strategi ini adalah untuk pergi panjang atau pendek ketika harga menembus saluran Supertrend, yang menunjukkan pembalikan tren.

Bagaimana Strategi Ini Bekerja

Perhitungan Supertrend melibatkan beberapa langkah:

  1. Menghitung ATR. ATR mencerminkan volatilitas rata-rata selama periode waktu.
  2. Menghitung garis tengah berdasarkan tertinggi tertinggi dan terendah terendah.
  3. Menghitung saluran atas dan bawah berdasarkan ATR dan ATR multiplier yang ditetapkan oleh pedagang. Saluran atas dihitung sebagai: Midline + (ATR × Multiplier). Saluran bawah dihitung sebagai: Midline - (ATR × Multiplier).
  4. Bandingkan harga penutupan dengan saluran atas/bawah untuk menentukan arah tren. Jika penutupan berada di atas saluran atas, tren naik. Jika penutupan berada di bawah saluran bawah, tren turun.
  5. Penembusan di atas atau di bawah saluran menghasilkan sinyal perdagangan terbalik. Misalnya, penembusan di atas saluran atas menandakan masuk panjang sementara kerusakan di bawah saluran bawah menandakan masuk pendek.

Keuntungan dari strategi ini adalah menggabungkan kedua teknik trend following dan trend reversal. Ini mengidentifikasi tren utama sementara juga mampu menangkap peluang reversal secara tepat waktu. Selain itu, mekanisme stop loss/take profit membantu mengendalikan risiko.

Kekuatan

Strategi Supertrend memiliki kekuatan berikut:

1. Mengikuti tren menengah

Saluran Supertrend dihitung berdasarkan ATR, yang secara efektif mencerminkan rentang fluktuasi harga menengah.

2. Menangkap pembalikan tepat waktu

Penembusan harga dari saluran dengan cepat menghasilkan sinyal perdagangan sehingga pembalikan tren utama dapat ditangkap tepat waktu.

3. Memiliki stop loss dan mengambil keuntungan

Strategi ini menetapkan stop loss yang telah ditentukan sebelumnya dan mengambil tingkat keuntungan untuk keluar otomatis dengan pengendalian risiko. Hal ini secara signifikan mengurangi risiko stop loss yang berlebihan dan memungkinkan tren yang lebih baik.

4. Mudah diterapkan

Strategi ini terutama menggunakan indikator dasar seperti MA dan ATR. Hal ini membuatnya cukup mudah dipahami dan diterapkan untuk perdagangan langsung.

**5. Efisiensi modal tinggi **

Dengan melacak tren menengah dan mengendalikan slippage individu, strategi Supertrend memberikan efisiensi modal yang tinggi secara keseluruhan.

Analisis Risiko

Strategi Supertrend juga memiliki beberapa kelemahan potensial:

1. Performa yang kurang baik di pasar

Strategi ini berfokus pada perdagangan tren jangka menengah hingga jangka panjang.

2. sensitif terhadap optimasi parameter

Nilai yang dipilih untuk periode ATR dan multiplier memiliki dampak yang relatif besar pada kinerja strategi.

3. Masalah keterlambatan mungkin ada

Mungkin ada beberapa masalah keterlambatan dengan perhitungan saluran Supertrend, menyebabkan generasi sinyal yang tidak tepat waktu.

4. Pengelolaan stop loss yang ketat diperlukan

Dalam kondisi pasar yang ekstrim, izin stop loss yang tidak tepat atau manajemen risiko yang tidak memadai dapat menyebabkan kerugian besar.

Bidang Peningkatan

Ada ruang tambahan untuk mengoptimalkan strategi Supertrend ini:

1. Gabungkan beberapa periode ATR

Menggabungkan pembacaan ATR selama periode yang berbeda seperti 10 hari dan 20 hari membentuk indikator komposit, yang membantu meningkatkan sensitivitas dan masalah keterlambatan.

2. Tambahkan modul stop loss

Menambahkan mekanisme stop loss yang lebih canggih seperti triple stop loss, volatility stop loss dan sequential stop loss dapat memperkuat pengendalian risiko dan pengurangan penarikan.

3. Optimasi parameter

Mengoptimalkan nilai untuk periode ATR, pengganda dan input lainnya melalui metode kuantitatif akan meningkatkan kinerja strategi lebih lanjut. Parameter juga dapat disesuaikan secara dinamis berdasarkan produk dan rezim pasar yang berbeda.

4. Mengintegrasikan model pembelajaran mesin

Akhirnya, mengintegrasikan model pembelajaran mesin dapat mewujudkan pengenalan tren otomatis dan generasi sinyal, mengurangi ketergantungan pada keputusan subjektif dan meningkatkan stabilitas sistem.

Kesimpulan

Strategi trading Supertrend mengidentifikasi arah tren menengah menggunakan indikator MA dan ATR, dan menghasilkan sinyal masuk dan keluar perdagangan di sekitar pembalikan tren dengan implementasi stop loss / take profit otomatis.

Namun, beberapa kekurangan juga ada terkait dengan tidak mencukupi penangkapan pasar yang terikat jangkauan dan masalah keterlambatan. Optimasi lebih lanjut dapat dieksplorasi di berbagai dimensi, termasuk menggunakan ATR komposit, memperkuat modul stop loss, parameter tuning, dan mengintegrasikan model pembelajaran mesin. Peningkatan ini kemungkinan akan meningkatkan stabilitas dan efisiensi strategi Supertrend.


/*backtest
start: 2022-11-30 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Supertrend V1.0 - Buy or Sell Signal",overlay=true)
Factor=input(3, minval=1,maxval = 100)
Pd=input(7, minval=1,maxval = 100)
//Calculating ATR
atrLength = input(title="ATR Length:",  defval=14, minval=1)
Stop_Loss_Factor = input(1.5, minval=0,step=0.01)
factor_profit = input(1.0, minval=0,step=0.01)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 10, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2016, title = "From Year", minval = 2009)
ToMonth   = input(defval = 4, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 10, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2039, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"


// Calculate ATR
atrValue=atr(atrLength)
decimals = abs(log(syminfo.mintick) / log(10)) 
Atr = atrValue
if(decimals == 5)
    Atr := atrValue * 10000
if(decimals == 4)
    Atr := atrValue * 1000
if(decimals == 3)
    Atr := atrValue * 100
if(decimals == 2)
    Atr := atrValue * 10


//VJ2 Supertrend

Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))

TrendUp = 0.0
TrendUp:=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown = 0.0
TrendDown:=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn

Trend = 0.0
Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = 0.0
Tsl := Trend==1? TrendUp: TrendDown

linecolor = Trend == 1 ? green : red

plot(Tsl, color = linecolor , style = line , linewidth = 2,title = "SuperTrend")

plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,green,0,0)
plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, red,0,0)
//plot(Trend==1 and Trend[1]==-1,color = linecolor, style = circles, linewidth = 3,title="Trend")

plotarrow(Trend == 1 and Trend[1] == -1 ? Trend : na, title="Up Entry Arrow", colorup=lime, maxheight=60, minheight=50, transp=0)
plotarrow(Trend == -1 and Trend[1] == 1 ? Trend : na, title="Down Entry Arrow", colordown=red, maxheight=60, minheight=50, transp=0)




//Strategy 
Trend_buy = Trend == 1 
Trend_buy_prev = Trend[1] == -1
algo_buy_pre = Trend_buy and Trend_buy_prev
algo_buy = algo_buy_pre == 1 ? 1 : na
Trend_sell= Trend == -1 
Trend_sell_prev = Trend[1] == 1
algo_sell_pre = Trend_sell and Trend_sell_prev
algo_sell = algo_sell_pre == 1 ? 1:na

strategy.entry("Long1", strategy.long, when= window() and algo_buy==1)

strategy.entry("Short1", strategy.short, when=window() and algo_sell==1)

bought = strategy.position_size > strategy.position_size 
sold = strategy.position_size < strategy.position_size 

longStop = Stop_Loss_Factor * valuewhen(bought, Atr, 0) 
shortStop = Stop_Loss_Factor * valuewhen(sold, Atr, 0) 
longProfit = factor_profit * longStop 
shortProfit = factor_profit * shortStop 


if(decimals == 5) 
    longStop := longStop *100000 
    longProfit := longProfit *100000 
if(decimals == 4) 
    longStop := longStop * 10000 
    longProfit := longProfit * 10000 
if(decimals == 3) 
    longStop := longStop * 1000 
    longProfit := longProfit * 1000 
if(decimals == 2) 
    longStop := longStop * 100 
    longProfit := longProfit *100 
if(decimals == 5) 
    shortStop := shortStop * 100000 
    shortProfit := shortProfit * 100000 
if(decimals == 4) 
    shortStop := shortStop * 10000 
    shortProfit := shortProfit * 10000 
if(decimals == 3) 
    shortStop := shortStop * 1000 
    shortProfit := shortProfit * 1000 
if(decimals == 2) 
    shortStop := shortStop * 100 
    shortProfit := shortProfit * 100 

strategy.exit("Exit Long", from_entry = "Long1", loss =longStop, profit = longProfit) 
strategy.exit("Exit Short", from_entry = "Short1", loss =shortStop, profit = shortProfit) 


Lebih banyak