Strategi dasar supertrend adalah strategi perdagangan algoritmik yang dapat diandalkan dan menguntungkan berdasarkan tiga indikator kuat: indikator supertrend (ATR), indeks relatif kuat (RSI) dan indeks moving average (EMA). Strategi ini bertujuan untuk mengidentifikasi arah dan kekuatan tren pasar, memasuki pasar pada titik masuk yang optimal, dan keluar dari pasar saat mencapai titik stop loss atau stop loss.
Strategi ini menggunakan indikator supertrend untuk menentukan apakah harga berada dalam tren naik atau turun. Indikator supertrend didasarkan pada rata-rata amplitudo riil dan satu faktor, yaitu tren naik ketika harga lebih tinggi dari supertrend dan tren turun ketika harga lebih rendah dari supertrend.
Indeks Relatif Lemah digunakan untuk mendeteksi apakah ada overheating dan overbuying atau overselling. Ketika RSI di atas 50 adalah pasar yang kuat, sebaliknya adalah lemah. RSI dapat memfilter terobosan palsu.
Rata-rata bergerak indeks digunakan untuk menentukan arah tren jangka panjang. Ketika harga lebih tinggi dari EMA adalah tren naik, dan ketika lebih rendah adalah tren turun. Dapat digunakan untuk mengkonfirmasi arah perdagangan.
Strategi ini memberikan sinyal perdagangan sebagai berikut:
Multiple entry: harga lebih tinggi dari supertrend dan RSI lebih tinggi dari 50 dan harga lebih tinggi dari EMA Berbagai posisi: harga ditutup di bawah supertrend atau stop loss atau stop loss
Masuk dengan posisi kosong: Kurangnya harga di bawah supertrend dan RSI di bawah 50 dan harga di bawah EMA
Keluar kosong: harga ditutup di atas supertrend atau stop loss atau stop loss
Stop loss dan stop stop dapat diatur sebagai persentase dari harga tiket.
Strategi ini memiliki keuntungan sebagai berikut:
Menggunakan tiga kombinasi indikator untuk menentukan arah tren
Indikator supertrend dapat dengan jelas menentukan tren naik dan turun
RSI dapat memfilter terobosan palsu untuk menghindari overbought dan oversold
EMA dapat digunakan untuk menentukan arah tren besar
Sinyal strategi sederhana, jelas, dan mudah dioperasikan
Periode ATR, parameter RSI, dan siklus EMA dapat disesuaikan untuk dioptimalkan
Stop loss yang dapat diatur untuk mengendalikan risiko
Hanya melakukan lebih banyak atau hanya melakukan lebih sedikit untuk menyesuaikan diri dengan kondisi pasar yang berbeda
Dapat digunakan pada siklus waktu apa pun
Risiko utama dari strategi ini adalah sebagai berikut:
Indikator supertrend akan mengalami lag dan dapat menyebabkan kerugian ketika tren besar berbalik
Stop loss yang terlalu kecil mungkin tidak bisa menangkap tren besar.
EMA tidak dapat menilai titik balik tren
Tidak bisa menilai apa yang terjadi.
Ada beberapa risiko volatilitas dan risiko perdagangan waktu.
Solusi yang sesuai:
Terkait dengan indikator lain yang menilai adanya pembalikan tren
Optimalkan parameter stop loss
Terkait dengan indikator lain yang menilai adanya pembalikan tren
Tergabung dengan deviasi indikator
Manajemen posisi yang disesuaikan
Strategi ini dapat dioptimalkan dengan:
Optimalkan parameter siklus ATR untuk menyeimbangkan sensitivitas dan stabilitas
Optimalkan parameter RSI untuk meningkatkan akurasi
Optimalkan siklus EMA agar sesuai dengan pasar yang berbeda
Menambahkan indikator lain untuk menilai reversal, seperti MACD, KD, dan lain-lain
Peningkatan pengembalian dari penilaian indikator
Pengadilan Terbalik Bersama Teori Gelombang
Parameter optimasi dinamis menggunakan algoritma seperti pembelajaran mesin
Menambahkan algoritma stop-loss canggih, seperti tracking stop-loss, move stop-loss, dan lain-lain
Mengoptimalkan manajemen posisi untuk beradaptasi dengan pasar yang berfluktuasi
Pengujian kombinasi kondisi masuk dan keluar yang lebih kompleks
Strategi dasar supertrend mengintegrasikan supertrend, RSI dan tiga indikator besar EMA, membentuk strategi pelacakan tren yang sederhana dan praktis. Ini dapat dengan jelas mengidentifikasi arah tren, memfilter sinyal palsu, dan mengkonfirmasi tren besar.
/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source 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", 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"
////////////////////
option_ch=input.string('Pullback',title = "Type Of Strategy",options =['Pullback','Simple'])
//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
on_ma=input.bool(true,"Ema Condition On/Off",group=group_text0000)
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
en_rsi = input.bool(true,"Rsi Condition On/Off",group = group_text00)
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
// final condition
buy_cond=option_ch=='Simple'?long and not(longpos[1]) and rsi_buy and ma_buy:option_ch=='Pullback'?fin_pullbuy and rsi_buy and ma_buy:na
sell_cond=option_ch=='Simple'?short and not(shortpos[1]) and rsi_sell and ma_sell:option_ch=='Pullback'?fin_pullsell and rsi_sell and ma_sell: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")
// strategy start
if buy_cond and longOK and time_cond and strategy.position_size==0
strategy.entry('long',direction = strategy.long)
if sell_cond and shortOK and time_cond and strategy.position_size==0
strategy.entry('short',direction =strategy.short)
// fixed percentage based stop loss and take profit
// User Options to Change Inputs (%)
stopPer = input.float(1.0,step=0.10, title='Stop Loss %',group =group_text4) / 100
takePer = input.float(1.0,step =0.10, title='Take Profit %',group =group_text4) / 100
// 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 strategy.position_size > 0
strategy.exit(id='Close Long',stop=longStop, limit=longTake)
if strategy.position_size < 0
strategy.exit(id='Close Short',stop=shortStop, limit=shortTake)
//PLOT FIXED SLTP LINE
plot(strategy.position_size > 0 ? longStop : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Long Fixed SL')
plot(strategy.position_size < 0 ? shortStop :na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Short Fixed SL')
plot(strategy.position_size > 0 ? longTake : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='Long Take Profit')
plot(strategy.position_size < 0 ? shortTake : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='Short Take Profit')
//