Strategi Perdagangan Supertrend Berdasarkan Gabungan ATR dan MA

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

img

Ringkasan

Strategi dagangan Supertrend adalah strategi trend-mengikuti berdasarkan Purata Julat Benar (ATR) dan Purata Bergerak (MA). Ia menggabungkan kelebihan penjejakan trend dan perdagangan pecah untuk mengenal pasti arah trend pertengahan dan menghasilkan isyarat perdagangan berdasarkan perubahan trend.

Idea utama di sebalik strategi ini adalah untuk pergi panjang atau pendek apabila harga memecahkan saluran Supertrend, menunjukkan pembalikan trend.

Bagaimana Strategi Ini Bekerja

Pengiraan Supertrend melibatkan beberapa langkah:

  1. Mengira ATR. ATR mencerminkan turun naik purata dalam tempoh masa.
  2. Mengira garis tengah berdasarkan tertinggi tertinggi dan terendah rendah.
  3. Mengira saluran atas dan bawah berdasarkan ATR dan pengganda ATR yang ditetapkan oleh peniaga. Saluran atas dikira sebagai: Midline + (ATR × Pengganda). Saluran bawah dikira sebagai: Midline - (ATR × Pengganda).
  4. Bandingkan harga penutupan dengan saluran atas/bawah untuk menentukan arah trend. Jika penutupan berada di atas saluran atas, trend naik. Jika penutupan berada di bawah saluran bawah, trend turun.
  5. Penembusan di atas atau di bawah saluran menghasilkan isyarat perdagangan terbalik. Sebagai contoh, penembusan di atas saluran atas menandakan kemasukan panjang sementara pemecahan di bawah saluran bawah menandakan kemasukan pendek.

Kelebihan strategi ini adalah ia menggabungkan kedua-dua trend berikut dan teknik pembalikan trend. Ia mengenal pasti trend utama sambil juga dapat menangkap peluang pembalikan dengan cara yang tepat pada masanya. Di samping itu, mekanisme stop loss / mengambil keuntungan membantu mengawal risiko.

Kelebihan

Strategi Supertrend mempunyai kekuatan berikut:

1. Mengesan trend pertengahan

Saluran Supertrend dikira berdasarkan ATR, yang secara berkesan mencerminkan julat turun naik harga pertengahan.

2. Tangkap pembalikan tepat pada masanya

Penembusan harga dari saluran dengan cepat menjana isyarat perdagangan supaya pembalikan trend utama dapat ditangkap tepat pada masanya.

3. Mempunyai stop loss dan mengambil keuntungan

Strategi menetapkan stop loss yang telah ditentukan dan mengambil tahap keuntungan untuk keluar secara automatik dengan kawalan risiko. Ini mengurangkan risiko stop loss yang berlebihan dan membolehkan trend yang lebih baik.

4. Mudah dilaksanakan

Strategi ini terutamanya menggunakan penunjuk asas seperti MA dan ATR. Ini menjadikannya agak mudah difahami dan dilaksanakan untuk perdagangan langsung.

**5. Kecekapan modal yang tinggi **

Dengan mengesan trend pertengahan dan mengawal seluncur individu, strategi Supertrend memberikan kecekapan modal yang tinggi secara keseluruhan.

Analisis Risiko

Strategi Supertrend juga mempunyai beberapa kelemahan berpotensi:

1. Performa yang kurang dalam pasaran yang berbeza

Strategi ini memberi tumpuan kepada perdagangan trend jangka menengah hingga panjang.

2. sensitif kepada pengoptimuman parameter

Nilai yang dipilih untuk tempoh ATR dan pengganda mempunyai kesan yang agak besar terhadap prestasi strategi. Penyesuaian parameter yang tidak sesuai boleh menjejaskan keberkesanan isyarat perdagangan.

3. Masalah kelewatan mungkin wujud

Mungkin ada beberapa masalah kelewatan dengan pengiraan saluran Supertrend, menyebabkan penjanaan isyarat yang tidak tepat pada masanya.

4. Pengurusan stop loss yang ketat diperlukan

Dalam keadaan pasaran yang melampau, pembiayaan stop loss yang tidak tepat atau pengurusan risiko yang tidak mencukupi boleh menyebabkan kerugian besar.

Kawasan Peningkatan

Terdapat ruang tambahan untuk mengoptimumkan strategi Supertrend ini:

1. Gabungkan beberapa tempoh ATR

Menggabungkan bacaan ATR dalam tempoh yang berbeza seperti 10 hari dan 20 hari membentuk penunjuk komposit, yang membantu meningkatkan kepekaan dan masalah kelewatan.

2. Tambah modul stop loss

Menambah mekanisme stop loss yang lebih canggih seperti stop loss tiga kali, stop loss turun naik dan stop loss berturut-turut boleh meningkatkan kawalan risiko dan pengurangan pengeluaran.

3. pengoptimuman parameter

Mengoptimumkan nilai untuk tempoh ATR, pengganda dan input lain melalui kaedah kuantitatif akan meningkatkan prestasi strategi. Parameter juga boleh disesuaikan secara dinamik berdasarkan produk dan rejimen pasaran yang berbeza.

4. Mengintegrasikan model pembelajaran mesin

Akhirnya, mengintegrasikan model pembelajaran mesin boleh merealisasikan pengenalan trend automatik dan penjanaan isyarat, mengurangkan pergantungan pada keputusan subjektif dan meningkatkan kestabilan sistem.

Kesimpulan

Strategi perdagangan Supertrend mengenal pasti arah trend pertengahan menggunakan penunjuk MA dan ATR, dan menghasilkan isyarat kemasukan dan keluar perdagangan di sekitar pembalikan trend dengan pelaksanaan stop loss / take profit automatik.

Walau bagaimanapun, beberapa kekurangan juga wujud mengenai penangkapan pasaran yang tidak mencukupi dan masalah ketinggalan. pengoptimuman lanjut boleh diterokai di pelbagai dimensi, termasuk menggunakan ATR komposit, memperkukuhkan modul stop loss, parameter penyempurnaan, dan mengintegrasikan model pembelajaran mesin. Penambahbaikan ini mungkin akan meningkatkan kestabilan dan kecekapan 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 lanjut