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.
Pengiraan Supertrend melibatkan beberapa langkah:
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.
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.
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.
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.
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)