Strategi asas SuperTrend

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

Ringkasan

Strategi asas SuperTrend adalah strategi dagangan algoritma yang boleh dipercayai dan menguntungkan berdasarkan tiga penunjuk yang kuat: SuperTrend (ATR), RSI dan EMA. Ia bertujuan untuk mengenal pasti arah dan kekuatan trend pasaran, memasuki pasaran pada titik optimum, dan keluar apabila stop loss atau mengambil keuntungan dicapai.

Logika Strategi

Strategi ini menggunakan penunjuk SuperTrend untuk menentukan sama ada harga berada dalam trend menaik atau menurun.

RSI digunakan untuk mengesan keadaan overbought / oversold. Di atas 50 adalah bullish dan di bawah 50 bearish. RSI menapis isyarat palsu.

EMA menilai arah trend jangka panjang. Di atas EMA adalah trend menaik, di bawah adalah trend menurun. Ia mengesahkan arah perdagangan.

Isyarat perdagangan adalah:

Masuk panjang: Harga di atas SuperTrend dan RSI di atas 50 dan Harga di atas EMA Keluar panjang: Harga ditutup di bawah SuperTrend atau Stop loss atau Take profit

Entry pendek: 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 mengambil keuntungan boleh ditetapkan sebagai peratusan daripada harga kemasukan.

Analisis Kelebihan

Kelebihan strategi ini:

  1. Gabungan 3 penunjuk, pengesanan trend yang boleh dipercayai

  2. SuperTrend dengan jelas mengenal pasti trend menaik dan turun

  3. RSI menyaring keluar pecah palsu, mengelakkan overbought / oversold

  4. EMA mengesahkan arah trend keseluruhan

  5. Isyarat perdagangan yang mudah dan jelas, mudah diikuti

  6. Tempoh ATR yang boleh disesuaikan, parameter RSI dan tempoh EMA untuk pengoptimuman

  7. Hentikan kerugian dan ambil keuntungan untuk mengawal risiko

  8. Mod hanya panjang atau hanya pendek untuk pasaran yang berbeza

  9. Berlaku untuk mana-mana jangka masa

Analisis Risiko

Risiko utama:

  1. Lagging SuperTrend dalam pembalikan trend, boleh menyebabkan kerugian

  2. Stop loss kecil / mengambil keuntungan gagal untuk menangkap pergerakan besar

  3. EMA tidak dapat melihat titik pembalikan trend

  4. Tiada pengesanan perbezaan

  5. Masih mempunyai risiko turun naik dan risiko masa

Penyelesaian:

  1. Tambah penunjuk lain untuk mengesan pembalikan

  2. Mengoptimumkan Stop Loss/Take Profit

  3. Tambah penunjuk lain kepada pembalikan spot

  4. Memasukkan penunjuk perbezaan

  5. Sesuaikan saiz kedudukan

Arahan pengoptimuman

Cara untuk mengoptimumkan strategi:

  1. Mengoptimumkan tempoh ATR untuk kepekaan dan kestabilan

  2. Mengoptimumkan parameter RSI untuk ketepatan yang lebih tinggi

  3. Mengoptimumkan tempoh EMA untuk pasaran yang berbeza

  4. Tambah penunjuk seperti MACD, KD untuk pengesanan pembalikan

  5. Tambah penunjuk perbezaan

  6. Gunakan Gelombang Elliott untuk melihat pembalikan

  7. Gunakan pembelajaran mesin untuk mengoptimumkan parameter secara dinamik

  8. Algoritma stop loss canggih seperti trailing stop loss

  9. Mengoptimumkan saiz kedudukan untuk turun naik yang berbeza

  10. Uji keadaan masuk dan keluar yang lebih kompleks

Kesimpulan

Strategi asas SuperTrend mengintegrasikan SuperTrend, RSI dan EMA ke dalam sistem trend berikut yang mudah dan praktikal. Ia mengenal pasti arah trend dengan jelas, menapis isyarat palsu dan mengesahkan trend keseluruhan. Peraturan kemasukan, keluar yang jelas dan konfigurasi stop loss / take profit. Mudah digunakan, keuntungan yang boleh dipercayai. Boleh digunakan untuk mana-mana jangka masa. Ia boleh dioptimumkan lagi dengan menyesuaikan parameter, menambah alat pembalikan, meningkatkan berhenti untuk menjadi sistem perdagangan yang lebih berkuasa.


/*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 lanjut