Strategi Supertrend Advance adalah versi yang dioptimumkan dan dinaik taraf berdasarkan penunjuk Supertrend klasik. Ia menggabungkan tindakan harga, turun naik, dan pelbagai penunjuk teknikal untuk meningkatkan kualiti isyarat, mengurangkan bunyi bising, dan lebih tepat menangkap perubahan dalam trend pasaran.
Inti dari Strategi Advance Supertrend adalah garis Supertrend. Ia dikira berdasarkan julat sebenar purata dan momentum harga untuk menentukan arah trend dan titik perubahan yang berpotensi. Apabila harga di atas garis Supertrend, ia menunjukkan aliran naik. Sebaliknya, apabila di bawah garis, ia menandakan aliran turun.
Tidak seperti penunjuk Supertrend tradisional yang terutamanya mempertimbangkan harga penutupan dan ATR, strategi Advance juga menggabungkan dimensi seperti jumlah dagangan, osilator momentum, dan juga data asas untuk mengesahkan kebolehpercayaan isyarat.
Kelebihan utama Strategi Supertrend Advance termasuk:
Pengesanan trend yang lebih tepat dan penapisan pecah palsu. Dengan menunggu pengesahan dari pelbagai penunjuk, strategi ini sangat meningkatkan ketepatan.
Pengurangan gangguan bunyi. Gabungan penapis menyaring data pasaran yang berlebihan dan tidak penting, menjadikan penilaian lebih jelas.
Pengurusan risiko yang lebih baik. Isyarat perdagangan yang jelas memudahkan perancangan berhenti kerugian dan mengambil keuntungan dengan lebih berkesan.
Kepelbagaian: Selain mengenal pasti trend, strategi ini juga boleh digabungkan dengan alat teknikal lain untuk mewujudkan sistem perdagangan yang komprehensif.
Strategi Supertrend Advance juga mempunyai risiko utama berikut:
Risiko penentuan parameter: Gabungan parameter yang salah boleh membuat strategi tidak berkesan atau mencetuskan terlalu banyak isyarat palsu.
Tidak ada strategi yang dapat sepenuhnya mengelakkan risiko kesilapan penilaian. Apabila trend berubah secara tidak dijangka, kerugian mungkin timbul.
Risiko pengoptimuman berlebihan: Apabila parameter terlalu sesuai dengan data sejarah, strategi mungkin gagal menyesuaikan diri dengan keadaan pasaran yang berubah.
Risiko kos dagangan. Apabila kekerapan perdagangan meningkat, kos seperti komisen dan slippage juga meningkat dengan ketara.
Penyelesaian yang sepadan:
Mengoptimumkan tetapan parameter dan kerap backtest ketahanan.
Tetapkan stop loss dan ambil keuntungan untuk had setiap kerugian perdagangan.
Elakkan pengoptimuman berlebihan untuk mengekalkan keupayaan generalisasi.
Mengira risiko / ganjaran isyarat dan menguruskan kos dagangan.
Strategi Supertrend Advance boleh dioptimumkan dalam aspek berikut:
Sesuaikan parameter berdasarkan pasaran yang berbeza untuk lebih sesuai dengan ciri-ciri mereka.
Tambah mekanisme penapisan adaptif kepada penunjuk penyesuaian automatik atau melumpuhkan penapis dalam keadaan pasaran tertentu.
meneroka kaedah pembelajaran mesin untuk mengoptimumkan parameter secara dinamik menggunakan rangkaian saraf.
Menggabungkan data sentimen dan analisis berita untuk meningkatkan prestasi menggunakan data yang tidak terstruktur.
Tambah keupayaan saiz kedudukan untuk meningkatkan pulangan apabila kadar kemenangan sangat tinggi.
Dengan memperkenalkan pelbagai penapis dan penunjuk pengesahan, Strategi Supertrend Advance mengoptimumkan penunjuk Supertrend klasik untuk menilai trend dengan lebih tepat dan meningkatkan kualiti isyarat. Berbanding dengan penunjuk tunggal, strategi berbilang dimensi ini menyediakan penyelesaian perdagangan yang lebih kukuh, komprehensif dan cekap. Walau bagaimanapun, risiko seperti penyesuaian parameter yang tidak betul dan kesilapan penilaian juga harus dijaga dengan mengamalkan langkah kawalan risiko yang sesuai. Dengan pengoptimuman dan integrasi lebih lanjut dengan alat lain, Strategi Supertrend Advance mempunyai potensi aplikasi yang sangat besar.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-07 00:00:00 period: 5m basePeriod: 1m 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/ // © JS_TechTrading //@version=5 strategy("Supertrend advance", overlay=true,default_qty_type =strategy.percent_of_equity,default_qty_value = 1,process_orders_on_close = false) // group string//// var string group_text000="Choose Strategy" var string group_text0="Supertrend Settings" var string group_text0000="Ema Settings" var string group_text00="Rsi Settings" var string group_text1="Backtest Period" var string group_text2="Trade Direction" var string group_text3="Quantity Settings" var string group_text4="Sl/Tp Settings" var string group_text5="Enable/Disable Condition Filter" var string group_macd="Macd Set" var group_cci="Cci Set" var string group_text6="Choose Sl/Tp" var string group_text7="Percentage Sl/Tp" var string group_text9="Atr SL/Tp" var string group_text8='Swing Hl & Supertrend Sl/Tp' // filter enable and disbale on_ma =input.bool(true,"Ema Condition On/Off",group=group_text5,inline = "CL") en_rsi = input.bool(true,"Rsi Condition On/Off",group = group_text5,inline = "CL") en_macd=input.bool(true,title ="Enable Macd Condition",group =group_text5,inline = "CS") en_cci=input.bool(true,title ="Enable/Disable CCi Filter",group =group_text5,inline = "CS") //////////////////// option_ch=input.string('Pullback',title = "Type Of Stratgey",options =['Pullback','Simple'],group = "Choose Strategy Type") // option for stop loss and take profit option_ts=input.string("Percentage","Chosse Type Of Sl/tp",["Percentage","Supertrend","Swinghl","Atr"],group=group_text6) //atr period input supertrend atrPeriod = input(10, "ATR Length",group = group_text0) factor = input.float(3.0, "Factor", step = 0.01,group=group_text0) [supertrend, direction] = ta.supertrend(factor, atrPeriod) bodyMiddle = plot((open + close) / 2, display=display.none) upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr) downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr) fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false) fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false) long=direction < 0 ? supertrend : na short=direction < 0? na : supertrend longpos=false shortpos=false longpos :=long?true :short?false:longpos[1] shortpos:=short?true:long?false:shortpos[1] fin_pullbuy= (ta.crossunder(low[1],long) and long and high>high[1]) fin_pullsell=(ta.crossover(high[1],short) and short and low<low[1]) //Ema 1 ma_len= input.int(200, minval=1, title="Ema Length",group = group_text0000) ma_src = input.source(close, title="Ema Source",group = group_text0000) ma_out = ta.ema(ma_src, ma_len) ma_buy=on_ma?close>ma_out?true:false:true ma_sell=on_ma?close<ma_out?true:false:true // rsi indicator and condition // Get user input rsiSource = input(title='RSI Source', defval=close,group = group_text00) rsiLength = input(title='RSI Length', defval=14,group = group_text00) rsiOverbought = input(title='RSI BUY Level', defval=50,group = group_text00) rsiOversold = input(title='RSI SELL Level', defval=50,group = group_text00) // Get RSI value rsiValue = ta.rsi(rsiSource, rsiLength) rsi_buy=en_rsi?rsiValue>=rsiOverbought ?true:false:true rsi_sell=en_rsi?rsiValue<=rsiOversold?true:false:true // Getting inputs macd fast_length = input(title="Fast Length", defval=12,group =group_macd) slow_length = input(title="Slow Length", defval=26,group =group_macd) macd_src = input(title="Source", defval=close,group =group_macd) signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9,group =group_macd) [macdLine, signalLine, histLine] = ta.macd(macd_src, fast_length ,slow_length,signal_length) buy_macd=en_macd?macdLine>0?true:false:true sell_macd=en_macd?macdLine<0?true:false:true // CCI indicator length_cci = input.int(20, minval=1,group = group_cci) src_cci = input(hlc3, title="Source",group = group_cci) cci_gr=input.int(200,title = "CCi > Input",group = group_cci,tooltip ="CCi iS Greater thn 100 buy") cci_ls=input.int(-200,title = "CCi < -Input",group = group_cci,tooltip ="CCi iS Less thn -100 Sell") ma = ta.sma(src_cci, length_cci) cci = (src_cci - ma) / (0.015 * ta.dev(src_cci, length_cci)) //cci buy and sell buy_cci=en_cci?cci>cci_gr?true:false:true sell_cci=en_cci?cci<cci_ls?true:false:true // final condition buy_cond=option_ch=='Simple'?long and not(longpos[1]) and rsi_buy and ma_buy and buy_macd and buy_cci:option_ch=='Pullback'?fin_pullbuy and rsi_buy and ma_buy and buy_macd and buy_cci:na sell_cond=option_ch=='Simple'?short and not(shortpos[1]) and rsi_sell and ma_sell and sell_macd and sell_cci:option_ch=='Pullback'?fin_pullsell and rsi_sell and ma_sell and sell_macd and sell_cci:na //backtest engine start = input(timestamp('2005-01-01'), title='Start calculations from',group=group_text1) end=input(timestamp('2045-03-01'), title='End calculations',group=group_text1) time_cond = true // Make input option to configure trade direction tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both',group = group_text2) // Translate input into trading conditions longOK = (tradeDirection == "Long") or (tradeDirection == "Both") shortOK = (tradeDirection == "Short") or (tradeDirection == "Both") // quantity qty_new=input.float(1.0,step =0.10,title ="Quantity",group =group_text3) // supertrend and swing high and low tpnewf = input.float(title="take profit swinghl||supertrend ", step=0.1, defval=1.5, group=group_text8) hiLen = input.int(title='Highest High Lookback', defval=6, minval=2, group=group_text8) loLen = input.int(title='Lowest Low Lookback', defval=6, minval=2, group=group_text8) globl = option_ts=="Swinghl"? nz(ta.lowest(low, loLen),low[1]):option_ts=="Supertrend"?nz(supertrend,low[1]):na globl2=option_ts=="Swinghl"? nz(ta.highest(high, hiLen),high[1]) :option_ts=="Supertrend"?nz(supertrend,high[1]):na var store = float(na) var store2=float(na) // strategy start if buy_cond and longOK and time_cond and strategy.position_size==0 strategy.entry("enter long",direction = strategy.long,qty =qty_new) store:=globl if sell_cond and shortOK and time_cond and strategy.position_size==0 strategy.entry("enter short",direction =strategy.short,qty =qty_new) store2:=globl2 //stop loss and take profit enable_trail=input.bool(false,"Enable Trail",group =group_text7) stopPer = input.float(1.0,step=0.10,title='Stop Loss %',group=group_text7)* 0.01 takePer = input.float(2.0,step=0.10, title='Take Profit %',group=group_text7)* 0.01 //TRAILING STOP CODE trailStop = input.float(title='Trailing Stop (%)', minval=0.0, step=0.1, defval=1,group=group_text7) * 0.01 longStopPrice = 0.0 shortStopPrice = 0.0 longStopPrice := if strategy.position_size > 0 stopValue = close * (1 - trailStop) math.max(stopValue, longStopPrice[1]) else 0 shortStopPrice := if strategy.position_size < 0 stopValue = close * (1 + trailStop) math.min(stopValue, shortStopPrice[1]) else 999999 // Determine where you've entered and in what direction longStop = 0.0 shortStop =0.0 shortTake =0.0 longTake = 0.0 if (option_ts=="Percentage" ) // Determine where you've entered and in what direction longStop := strategy.position_avg_price * (1 - stopPer) shortStop := strategy.position_avg_price * (1 + stopPer) shortTake := strategy.position_avg_price * (1 - takePer) longTake := strategy.position_avg_price * (1 + takePer) if enable_trail and (option_ts=="Percentage" ) longStop := longStopPrice shortStop := shortStopPrice //single take profit exit position if strategy.position_size > 0 and option_ts=="Percentage" strategy.exit(id='Close Long',from_entry = "enter long", stop=longStop, limit=longTake) if strategy.position_size < 0 and option_ts=="Percentage" strategy.exit(id='Close Short',from_entry = "enter short", stop=shortStop, limit=shortTake) //PLOT FIXED SLTP LINE plot(strategy.position_size > 0 and option_ts=="Percentage" ? longStop : na, style=plot.style_linebr, color=enable_trail?na:color.new(#c0ff52, 0), linewidth=1, title='Long Fixed SL') plot(strategy.position_size < 0 and option_ts=="Percentage"? shortStop : na, style=plot.style_linebr, color=enable_trail?na:color.new(#5269ff, 0), linewidth=1, title='Short Fixed SL') plot(strategy.position_size > 0 and option_ts=="Percentage"? longTake : na, style=plot.style_linebr, color=color.new(#5e6192, 0), linewidth=1, title='Long Take Profit') plot(strategy.position_size < 0 and option_ts=="Percentage"? shortTake : na, style=plot.style_linebr, color=color.new(#dcb53d, 0), linewidth=1, title='Short Take Profit') //PLOT TSL LINES plot(series=strategy.position_size > 0 and option_ts=="Percentage" and enable_trail ? longStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Long Trail Stop', offset=1) plot(series=strategy.position_size < 0 and option_ts=="Percentage" and enable_trail ? shortStopPrice : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title='Short Trail Stop', offset=1) // swing high and low //take profit takeProfit_buy = strategy.position_avg_price - ((store - strategy.position_avg_price) * tpnewf) takeProfit_sell = strategy.position_avg_price - ((store2 - strategy.position_avg_price) * tpnewf) // Submit stops based on highest high and lowest low if strategy.position_size >= 0 and (option_ts=="Swinghl" or option_ts=="Supertrend") strategy.exit(id='XL HH',from_entry = "enter long", stop=store,limit=takeProfit_buy,comment ="Long Exit") if strategy.position_size <= 0 and (option_ts=="Swinghl" or option_ts=="Supertrend") strategy.exit(id='XS LL',from_entry = "enter short", stop=store2,limit=takeProfit_sell,comment = "Short Exit") // plot take profit plot(series=strategy.position_size < 0 and (option_ts=="Swinghl" or option_ts=="Supertrend")? takeProfit_sell : na, style=plot.style_circles, color=color.orange, linewidth=1, title="take profit sell") plot(series=strategy.position_size > 0 and (option_ts=="Swinghl" or option_ts=="Supertrend")? takeProfit_buy: na, style=plot.style_circles, color=color.blue, linewidth=1, title="take profit buy") // Plot stop Loss for visual confirmation plot(series=strategy.position_size > 0 and (option_ts=="Swinghl" or option_ts=="Supertrend")? store : na, style=plot.style_circles, color=color.new(color.green, 0), linewidth=1, title='Lowest Low Stop') plot(series=strategy.position_size < 0 and (option_ts=="Swinghl" or option_ts=="Supertrend")? store2 : na, style=plot.style_circles, color=color.new(color.red, 0), linewidth=1, title='Highest High Stop') // atr enable_atrtrail=input.bool(false,"Enable Atr Trail",group = group_text9) atrLength = input(title='ATR Length', defval=14,group =group_text9) slATRMult = input.float(title='Stop loss ATR multiplier',step=0.1, defval=2.0,group =group_text9) tpATRMult = input.float(title='Take profit multiplier',step=0.1, defval=1.5,group =group_text9) lookback = input.int(title='How Far To Look Back For High/Lows', defval=7, minval=1,group =group_text9) atr = ta.atr(atrLength) lowestLow = ta.lowest(low, lookback) highestHigh = ta.highest(high, lookback) longStopa = (enable_atrtrail ? lowestLow : close) - atr * slATRMult shortStopa = (enable_atrtrail ? highestHigh : close) + atr * slATRMult atr_l=0.0 atr_s=0.0 atr_l:=nz(strategy.position_avg_price-(atr[1] * slATRMult),strategy.position_avg_price-(1 * slATRMult)) atr_s:=nz(strategy.position_avg_price+ (atr[1] * slATRMult),strategy.position_avg_price-(1 * slATRMult)) stoploss_l = ta.valuewhen(strategy.position_size != 0 and strategy.position_size[1] == 0,atr_l, 0) stoploss_s = ta.valuewhen(strategy.position_size != 0 and strategy.position_size[1] == 0,atr_s, 0) takeprofit_l = strategy.position_avg_price - ((stoploss_l - strategy.position_avg_price) * tpATRMult) takeprofit_s = strategy.position_avg_price - ((stoploss_s - strategy.position_avg_price) * tpATRMult) // Submit stops based on highest high and lowest low if strategy.position_size > 0 and (option_ts=="Atr") strategy.exit(id='Xl', stop= enable_atrtrail?longStopa:stoploss_l,limit=takeprofit_l ,comment ="Long Exit") if strategy.position_size < 0 and (option_ts=="Atr") strategy.exit(id='XH', stop=enable_atrtrail?shortStopa:stoploss_s,limit=takeprofit_s,comment = "Short Exit") // // plot take profit plot(series=strategy.position_size > 0 and (option_ts=="Atr")? takeprofit_l : na, style=plot.style_circles, color=color.orange, linewidth=1, title="take profit sell") plot(series=strategy.position_size < 0 and (option_ts=="Atr")? takeprofit_s: na, style=plot.style_circles, color=color.blue, linewidth=1, title="take profit buy") // Plot stop Loss for visual confirmation plot(series=strategy.position_size >0 and (option_ts=="Atr") and not enable_atrtrail? stoploss_l : na, style=plot.style_circles, color=color.new(color.green, 0), linewidth=1, title='Lowest Low Stop') plot(series=strategy.position_size < 0 and (option_ts=="Atr") and not enable_atrtrail? stoploss_s : na, style=plot.style_circles, color=color.new(color.red, 0), linewidth=1, title='Highest High Stop') //PLOT TSL LINES plot(series=strategy.position_size >0 and option_ts=="Atr" and enable_atrtrail ? longStopa : na, color=color.new(color.green, 0), style=plot.style_linebr, linewidth=1, title='Long Trail Stop', offset=1) plot(series=strategy.position_size < 0 and (option_ts=="Atr") and enable_atrtrail? shortStopa : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='short Trail Stop', offset=1)