
Strategi ini menggunakan persilangan dua rata-rata bergerak untuk menilai pergeseran tren pasar dan melakukan perdagangan berdasarkan tren. Perdagangan dilakukan ketika rata-rata jangka pendek melintasi rata-rata jangka panjang dan kosong ketika rata-rata jangka pendek melintasi rata-rata jangka panjang untuk mengikuti arah tren.
Inti dari strategi ini adalah dua rata-rata bergerak: satu rata-rata cepat (default period 32), dan satu rata-rata lambat (default period 32), yang dapat disesuaikan dengan parameter. Ketika harga close out menembus / menembus saluran yang dibentuk oleh kedua rata-rata, ini berarti bahwa tren telah berbalik, dan strategi ini menghasilkan sinyal jual beli:
Dengan cara ini, strategi dapat mengikuti tren, memegang lebih banyak opsi dalam tren naik, memegang kosong dalam tren turun, sampai ada sinyal pembalikan tren.
Untuk menghadapi risiko di atas, Anda dapat mempertimbangkan untuk menambahkan filter yang tepat, seperti ATR atau filter rata-rata real bandwidth, untuk mengurangi overtrading di pasar yang bergolak; mengatur stop loss yang masuk akal, untuk mengendalikan kerugian satu kali; terus mengoptimalkan parameter untuk menyesuaikan diri dengan pasar. Namun, keterbatasan strategi itu sendiri sulit untuk dihindari sepenuhnya.
Optimasi di atas dapat meningkatkan kemampuan strategi untuk menghadapi pasar yang kompleks, tetapi perlu diperhatikan bahwa optimasi berlebihan dapat menyebabkan kurva fit, yang menyebabkan kinerja yang buruk di masa depan.
Strategi pelacakan tren linier ganda menangkap tren dengan melintasi garis lurus, memiliki karakteristik sederhana, mudah digunakan, dan luas. Namun, kinerja yang buruk di pasar yang bergoyang, kurangnya respons terhadap situasi ekstrem, dan parameter yang sulit untuk dioptimalkan. Strategi dapat dioptimalkan dengan memperkenalkan lebih banyak metode penyaringan, stop loss dinamis, manajemen posisi, kombinasi siklus ganda, dan penyesuaian parameter.
/*backtest
start: 2023-03-16 00:00:00
end: 2024-03-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
//study(title="Demo - SSL Basic", shorttitle="Demo - SSL Basic", overlay=true)
strategy(title='Demo - SSL Basic', shorttitle='Demo - SSL Basic', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, commission_value=0.15)
// Backtest Date Range
start_date_long = input(title='Backtest Long Start Date', defval=timestamp('01 Jan 2018 00:00 +0530'))
end_date_long = input(title='Backtest Long End Date', defval=timestamp('25 Jan 2030 00:00 +0530'))
backtest_range = true
// Inputs
maType = input.string(title='SSL MA Type', options=['SMA', 'EMA', 'WMA'], defval='SMA')
sslLen = input(title='SSL Length', defval=32)
showCross = input(title='Show Crossover?', defval=true)
showEntry = input(title='Show Entry?', defval=true)
showTrend = input(title='Show Trend Colors?', defval=true)
// Calc MA for SSL Channel
calc_ma(close, len, type) =>
float result = 0
if type == 'SMA' // Simple
result := ta.sma(close, len)
result
if type == 'EMA' // Exponential
result := ta.ema(close, len)
result
if type == 'WMA' // Weighted
result := ta.wma(close, len)
result
result
// Add SSL Channel
maHigh = calc_ma(high, sslLen, maType)
maLow = calc_ma(low, sslLen, maType)
Hlv = int(na)
Hlv := close > maHigh ? 1 : close < maLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? maHigh : maLow
sslUp = Hlv < 0 ? maLow : maHigh
ss1 = plot(sslDown, title='Down SSL', linewidth=2, color=showTrend ? na : color.red)
ss2 = plot(sslUp, title='Up SSL', linewidth=2, color=showTrend ? na : color.lime)
// Conditions
longCondition = ta.crossover(sslUp, sslDown)
shortCondition = ta.crossover(sslDown, sslUp)
// Strategy
if shortCondition
strategy.close('Long', comment='Long Exit', alert_message='JSON')
if longCondition
strategy.close('Short', comment='Short Exit', alert_message='JSON')
if backtest_range and longCondition
strategy.entry('Long', strategy.long, comment='Long Entry', alert_message='JSON')
if backtest_range and shortCondition
strategy.entry('Short', strategy.short, comment= 'Short Entry', alert_message='JSON')
// Plots
fill(ss1, ss2, color=showTrend ? sslDown < sslUp ? color.new(color.lime, transp=75) : color.new(color.red, transp=75) : na, title='Trend Colors')