
Strategi kemajuan super trend adalah strategi pengoptimuman dan peningkatan berdasarkan indikator super trend klasik. Ia menggabungkan pergerakan harga, kadar turun naik, dan pelbagai petunjuk teknikal untuk meningkatkan kualiti isyarat, mengurangkan kebisingan, dan menangkap perubahan trend pasaran dengan lebih tepat.
Pusat strategi super trend adalah garis super trend. Ia dikira berdasarkan jangkauan turun naik sebenar dan pergerakan harga, yang digunakan untuk menentukan trend dan titik perubahan harga yang berpotensi. Apabila harga berada di atas garis super trend, ia menunjukkan trend naik; sebaliknya, ia menunjukkan trend menurun.
Berbeza dengan penunjuk super trend tradisional yang hanya mempertimbangkan harga penutupan dan jangkauan pergerakan sebenar, strategi maju juga menggabungkan pelbagai dimensi seperti jumlah perdagangan, pendorong dinamik dan data asas untuk mengesahkan kebolehpercayaan isyarat. Pendekatan pelbagai variabel ini dapat memastikan isyarat perdagangan yang dihasilkan lebih tepat dan boleh dipercayai dan tidak mudah dipengaruhi oleh bunyi pasaran.
Kelebihan utama strategi super trend adalah:
Lebih tepat menilai pergerakan pasaran, penapis penembusan palsu. Strategi ini menunggu beberapa indikator faktor untuk menghasilkan isyarat perdagangan, yang dapat meningkatkan kadar kebenaran.
Mengurangkan gangguan kebisingan pasaran. Dengan menggunakan penapis gabungan, banyak data pasaran yang tidak penting dapat disembunyikan dan membuat keputusan lebih jelas.
Pengendalian risiko yang optimum. Isyarat perdagangan yang jelas dapat membantu peniaga merancang lebih baik untuk menghentikan kerugian dan titik berhenti, dan dengan itu mempunyai keupayaan untuk mengawal risiko yang lebih baik.
Strategi ini boleh digunakan bersama-sama dengan alat-alat teknikal lain selain mengenal pasti trend, untuk membina sistem perdagangan yang komprehensif dan cekap.
Terdapat juga beberapa risiko utama yang berkaitan dengan strategi termaju:
Risiko penyetempatan parameter. Kombinasi parameter penunjuk yang salah boleh menyebabkan strategi gagal atau menghasilkan terlalu banyak isyarat yang salah.
Risiko salah penghakiman trend. Tidak ada strategi yang dapat sepenuhnya mengelakkan risiko salah penghakiman, yang boleh menyebabkan kerugian apabila trend berubah secara tidak dijangka.
Risiko pengoptimuman berlebihan. Apabila parameter disesuaikan dengan tahap yang sangat tepat, ia terlalu bergantung pada data sejarah dan tidak dapat menyesuaikan diri dengan perubahan pasaran.
Risiko kos urus niaga. Apabila jumlah urus niaga meningkat, kos urus niaga seperti yuran dan slippage juga akan meningkat dengan ketara.
Penyelesaian:
Pengaturan parameter yang dioptimumkan, pengujian semula parameter pengujian secara berkala.
Tetapkan penangguhan kerugian untuk mengawal kerugian tunggal.
Mengelakkan pengoptimuman yang berlebihan dan mengekalkan keupayaan generalisasi parameter.
Mengira nisbah risiko dan ganjaran isyarat, mengawal kos dagangan.
Strategi hypertrend progression boleh dioptimumkan dalam beberapa aspek:
Mengubah parameter mengikut pasaran yang berbeza, untuk menjadikannya lebih sesuai dengan ciri-ciri pasaran tersebut. Sebagai contoh, pasaran yang bergelombang dapat memendekkan kitaran pengiraan.
Menambah mekanisme penapisan penyesuaian. Apabila pasaran memasuki keadaan tertentu, penapis penapisan tertentu atau parameter penunjuk penapisan akan disekat secara automatik.
Meneroka kaedah pembelajaran mesin, parameter pengoptimuman dinamik model latihan seperti rangkaian saraf.
Menggunakan data tidak berstruktur untuk meningkatkan keberkesanan, digabungkan dengan sentiment dan maklumat berita.
Tambah fungsi skala lokasi sasaran. Apabila peluang kemenangan tinggi, anda boleh mendapatkan keuntungan yang lebih tinggi dengan menaikkan saham.
Strategi termaju ultra trend telah dioptimumkan dan diperbaiki dengan pengenalan pelbagai penapis dan penanda pengesahan, yang dapat menilai pergerakan pasaran dengan lebih tepat dan meningkatkan kualiti isyarat. Strategi ini menyediakan program perdagangan yang lebih stabil, komprehensif dan cekap berbanding dengan satu indikator. Tetapi juga memerlukan parameter yang berjaga-jaga untuk menyesuaikan risiko kesalahan dan penilaian, mengambil langkah-langkah kawalan risiko yang sesuai.
/*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)