Strategi Dasar SuperTrend

Penulis:ChaoZhang, Tanggal: 2023-10-11 15:14:54
Tag:

Gambaran umum

Strategi dasar SuperTrend adalah strategi perdagangan algoritmik yang dapat diandalkan dan menguntungkan berdasarkan tiga indikator yang kuat: SuperTrend (ATR), RSI dan EMA. Ini bertujuan untuk mengidentifikasi arah dan kekuatan tren pasar, memasuki pasar pada titik optimal, dan keluar ketika stop loss atau take profit tercapai.

Logika Strategi

Strategi ini menggunakan indikator SuperTrend untuk menentukan apakah harga berada dalam tren naik atau turun.

RSI digunakan untuk mendeteksi kondisi overbought/oversold. Di atas 50 adalah bullish dan di bawah 50 bearish. RSI menyaring sinyal palsu.

EMA menilai arah tren jangka panjang. Di atas EMA adalah uptrend, di bawahnya adalah downtrend.

Sinyal perdagangan adalah:

Long entry: Harga di atas SuperTrend dan RSI di atas 50 dan Harga di atas EMA Long exit: Harga ditutup di bawah SuperTrend atau Stop loss atau Take profit

Short entry: Harga di bawah SuperTrend dan RSI di bawah 50 dan Harga di bawah EMA Keluar pendek: Harga ditutup di atas SuperTrend atau Stop loss atau Take profit

Stop loss dan take profit dapat ditetapkan sebagai persentase dari harga masuk.

Analisis Keuntungan

Keuntungan dari strategi ini:

  1. Kombinasi dari 3 indikator, deteksi tren yang dapat diandalkan

  2. SuperTrend dengan jelas mengidentifikasi tren naik dan turun

  3. RSI menyaring keluar false breakouts, menghindari overbought/oversold

  4. EMA mengkonfirmasi arah tren keseluruhan

  5. Sinyal perdagangan yang sederhana dan jelas, mudah diikuti

  6. Periode ATR yang dapat disesuaikan, parameter RSI dan periode EMA untuk optimalisasi

  7. Hentikan kerugian dan ambil keuntungan untuk mengendalikan risiko

  8. Mode hanya panjang atau hanya pendek untuk pasar yang berbeda

  9. Berlaku untuk setiap kerangka waktu

Analisis Risiko

Risiko utama:

  1. Kelewatan SuperTrend dalam pembalikan tren, dapat menyebabkan kerugian

  2. Stop loss/take profit kecil gagal menangkap gerakan besar

  3. EMA tidak dapat melihat titik pembalikan tren

  4. Tidak ada deteksi perbedaan

  5. Masih memiliki risiko volatilitas dan risiko waktu

Solusi:

  1. Tambahkan indikator lain untuk mendeteksi pembalikan

  2. Optimalkan stop loss/take profit

  3. Tambahkan indikator lain ke pembalikan spot

  4. Masukkan indikator divergensi

  5. Sesuaikan ukuran posisi

Arahan Optimasi

Cara untuk mengoptimalkan strategi:

  1. Optimalkan periode ATR untuk sensitivitas dan stabilitas

  2. Optimalkan parameter RSI untuk akurasi yang lebih tinggi

  3. Mengoptimalkan periode EMA untuk pasar yang berbeda

  4. Tambahkan indikator seperti MACD, KD untuk deteksi pembalikan

  5. Tambahkan indikator perbedaan

  6. Gunakan Elliott Waves untuk menemukan pembalikan

  7. Gunakan pembelajaran mesin untuk mengoptimalkan parameter secara dinamis

  8. Algoritma stop loss canggih seperti trailing stop loss

  9. Mengoptimalkan ukuran posisi untuk volatilitas yang berbeda

  10. Uji kondisi masuk dan keluar yang lebih kompleks

Kesimpulan

Strategi dasar SuperTrend mengintegrasikan SuperTrend, RSI dan EMA ke dalam sistem trend berikut yang sederhana dan praktis. Ini mengidentifikasi arah tren dengan jelas, menyaring sinyal palsu dan mengkonfirmasi tren keseluruhan. Aturan masuk, keluar yang jelas dan konfigurasi stop loss / take profit. Mudah digunakan, profitabilitas yang dapat diandalkan. Terapan untuk setiap kerangka waktu. Ini dapat lebih dioptimalkan dengan menyesuaikan parameter, menambahkan alat pembalikan, meningkatkan stop untuk menjadi sistem perdagangan yang lebih kuat.


/*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')

//

Lebih banyak