Triple Supertrend dengan strategi EMA dan ADX

Penulis:ChaoZhang, Tanggal: 2023-09-18 14:02:12
Tag:

Gambaran umum

Ini adalah strategi perdagangan kuantitatif yang menggabungkan indikator triple supertrend, EMA dan ADX. Ini menghasilkan sinyal perdagangan menggunakan sistem triple supertrend dan menerapkan EMA dan ADX sebagai filter untuk mengontrol frekuensi perdagangan dan meningkatkan kualitas sinyal.

Logika Strategi

  • Menggunakan tiga sistem supertrend dengan parameter yang berbeda dan menghasilkan sinyal perdagangan ketika ketiga supertrend setuju pada arah.

  • Menggunakan EMA sebagai filter tren, hanya pergi panjang ketika dekat di atas EMA dan pergi pendek ketika dekat di bawah EMA.

  • Menggunakan ADX sebagai filter kekuatan tren, hanya berdagang ketika ADX berada di atas ambang batas.

  • Mengizinkan opsi re-entry untuk menyesuaikan profitabilitas dan pengendalian risiko.

Secara khusus, kondisi entri panjang adalah ketika ketiga supertrend berubah menjadi bullish, close berada di atas EMA dan ADX berada di atas ambang batas. Kondisi entri pendek adalah ketika ketiga supertrend berubah menjadi bearish, close berada di bawah EMA dan ADX berada di atas ambang batas. Exit ketika salah satu supertrend berbalik arah.

Strategi ini juga memetakan garis dukungan dan resistensi supertrend untuk membantu penentuan tren visual.

Analisis Keuntungan

  • Triple supertrend system menyaring false breakout dan meningkatkan akurasi entri.

  • Filter ganda EMA dan ADX mengurangi kerugian whipsaw dan meningkatkan manajemen risiko.

  • Opsi re-entry memungkinkan penyesuaian profitabilitas berdasarkan preferensi risiko.

  • Garis supertrend visual membantu menentukan arah tren.

Analisis Risiko

  • Supertrend dan indikator lainnya memiliki lag dan dapat menyebabkan masuk terlambat atau keluar lebih awal.

  • Filter yang terlalu ketat dapat melewatkan kesempatan.

  • Whipsaws dapat menyebabkan kerugian di pasar yang terikat jangkauan.

  • Memungkinkan masuk kembali meningkatkan frekuensi perdagangan dan biaya slippage.

Risiko-risiko ini dapat dikurangi dengan mengoptimalkan parameter, filter, dan menggunakan dynamic stops.

Arahan Optimasi

Strategi ini dapat dioptimalkan dalam beberapa aspek:

  • Uji kombinasi parameter yang berbeda untuk menemukan pengaturan supertrend dan EMA yang optimal.

  • Optimalkan ambang ADX untuk mengurangi sinyal palsu.

  • Tambahkan filter lain seperti volatilitas, volume dll.

  • Optimalkan parameter secara terpisah untuk produk yang berbeda.

  • Membangun mekanisme stop loss yang dinamis untuk kontrol risiko yang lebih baik.

  • Jelajahi pembelajaran mesin untuk menemukan aturan masuk dan keluar yang lebih baik.

Ringkasan

Strategi ini memanfaatkan kekuatan sistem triple supertrend dan memperbesarnya dengan filter ganda EMA dan ADX untuk secara efektif meningkatkan kualitas sinyal dan mengendalikan risiko. peningkatan lebih lanjut dalam parameter, filter, stop dinamis dapat meningkatkan ketahanan dan daya adaptasi. Dikombinasikan dengan analisis tren, ini memberikan sinyal masuk dan keluar yang efektif untuk perdagangan kuantitatif.


/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 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/
// ©kunjandetroja


//@version=5
strategy('Triple Supertrend with EMA and ADX', overlay=true)

m1 = input.float(1,"ATR Multi",minval = 1,maxval= 6,step=0.5,group='ST 1')
m2 = input.float(2,"ATR Multi",minval = 1,maxval= 6,step=0.5,group='ST 2')
m3 = input.float(3,"ATR Multi",minval = 1,maxval= 6,step=0.5,group='ST 3')
p1 = input.int(10,"ATR Multi",minval = 5,maxval= 25,step=1,group='ST 1')
p2 = input.int(15,"ATR Multi",minval = 5,maxval= 25,step=1,group='ST 2')
p3 = input.int(20,"ATR Multi",minval = 5,maxval= 25,step=1,group='ST 3')
len_EMA = input.int(200,"EMA Len",minval = 5,maxval= 250,step=1)
len_ADX = input.int(14,"ADX Len",minval = 1,maxval= 25,step=1)
len_Di = input.int(14,"Di Len",minval = 1,maxval= 25,step=1)
adx_above = input.float(25,"adx filter",minval = 1,maxval= 50,step=0.5)
var bool long_position = false
adx_filter = input.bool(false, "Add Adx & EMA filter")
renetry = input.bool(true, "Allow Reentry")

f_getColor_Resistance(_dir, _color) =>
    _dir == 1 and _dir == _dir[1] ? _color : na
f_getColor_Support(_dir, _color) =>
    _dir == -1 and _dir == _dir[1] ? _color : na

[superTrend1, dir1] = ta.supertrend(m1, p1)
[superTrend2, dir2] = ta.supertrend(m2, p2)
[superTrend3, dir3] = ta.supertrend(m3, p3)
EMA = ta.ema(close, len_EMA)
[diplus,diminus,adx] = ta.dmi(len_Di,len_ADX)

// ADX Filter
adxup = adx > adx_above and close > EMA
adxdown = adx > adx_above and close < EMA

sum_dir = dir1 + dir2 + dir3

dir_long = if(adx_filter == false)
    sum_dir == -3
else
    sum_dir == -3 and adxup
dir_short = if(adx_filter == false)
    sum_dir == 3
else
    sum_dir == 3 and adxdown
Exit_long = dir1 == 1 and dir1 != dir1[1]
Exit_short = dir1 == -1 and dir1 != dir1[1]

// BuySignal = dir_long and dir_long != dir_long[1]
// SellSignal = dir_short and dir_short != dir_short[1]
// if BuySignal
//     label.new(bar_index, low, 'Long', style=label.style_label_up)
// if SellSignal
//     label.new(bar_index, high, 'Short', style=label.style_label_down)

longenter = if(renetry == false)
    dir_long and long_position == false
else
    dir_long
shortenter = if(renetry == false)
    dir_short and long_position == true
else
    dir_short
if longenter
    long_position := true
if shortenter
    long_position := false

strategy.entry('BUY', strategy.long, when=longenter)
strategy.entry('SELL', strategy.short, when=shortenter)   
strategy.close('BUY', Exit_long)
strategy.close('SELL', Exit_short)

buy1 = ta.barssince(dir_long)
sell1 = ta.barssince(dir_short)

colR1 = f_getColor_Resistance(dir1, color.red)
colS1 = f_getColor_Support(dir1, color.green)

colR2 = f_getColor_Resistance(dir2, color.orange)
colS2 = f_getColor_Support(dir2, color.yellow)

colR3 = f_getColor_Resistance(dir3, color.blue)
colS3 = f_getColor_Support(dir3, color.maroon)

plot(superTrend1, 'R1', colR1, linewidth=2)
plot(superTrend1, 'S1', colS1, linewidth=2)

plot(superTrend2, 'R1', colR2, linewidth=2)
plot(superTrend2, 'S1', colS2, linewidth=2)

plot(superTrend3, 'R1', colR3, linewidth=2)
plot(superTrend3, 'S1', colS3, linewidth=2)

// // Intraday only
// var int new_day = na
// var int new_month = na
// var int new_year = na
// var int close_trades_after_time_of_day = na

// if dayofmonth != dayofmonth[1]
//     new_day := dayofmonth
// if month != month[1]
//     new_month := month
// if year != year[1]
//     new_year := year
// close_trades_after_time_of_day := timestamp(new_year,new_month,new_day,15,15)

// strategy.close_all(time > close_trades_after_time_of_day) 


Lebih banyak