Strategi Filter ADX EMA Super Trend Tiga Kali Lipat


Tanggal Pembuatan: 2023-09-18 14:02:12 Akhirnya memodifikasi: 2023-09-18 14:02:12
menyalin: 1 Jumlah klik: 1696
1
fokus pada
1617
Pengikut

Ringkasan

Ini adalah strategi perdagangan kuantitatif yang menggabungkan triple overtrend, EMA dan ADX. Ini menggunakan sistem triple overtrend untuk mengirim sinyal perdagangan, dan menggabungkan EMA dan ADX sebagai kondisi penyaringan untuk mengontrol frekuensi perdagangan dan meningkatkan kualitas sinyal perdagangan.

Prinsip Strategi

  • Sistem supertrend menggunakan tiga set parameter yang berbeda, menghasilkan sinyal perdagangan ketika tiga set supertrend berlawanan arah.
  • Menggunakan EMA sebagai filter tren, hanya melakukan over jika harga close lebih tinggi dari EMA, dan melakukan over jika harga close lebih rendah dari EMA.
  • Menggunakan ADX sebagai penyaring kekuatan dan kelemahan tren, hanya berdagang ketika ADX lebih tinggi dari batas yang ditetapkan.
  • Memungkinkan untuk memilih apakah akan masuk kembali, mengontrol profitabilitas dan menghentikan risiko kerugian.

Secara khusus, kondisi masuk panjang untuk tiga overtrend berubah menjadi bullish, harga penutupan lebih tinggi dari EMA, ADX lebih tinggi dari nilai yang ditetapkan untuk membuka posisi; kondisi masuk pendek untuk tiga overtrend berubah menjadi bearish, harga penutupan lebih rendah dari EMA, ADX lebih tinggi dari nilai yang ditetapkan untuk membuka posisi kosong. Kondisi posisi kosong untuk setiap overtrend berubah untuk melonggarkan posisi saat ini.

Strategi ini juga memetakan garis resistensi yang mendukung tiga kelompok supertrend, yang membantu menentukan arah tren.

Analisis Keunggulan

  • Sistem supertrend tiga kali dapat memfilter terobosan palsu, meningkatkan akurasi masuk.
  • Filter ganda EMA dan ADX mengurangi kerugian akibat whipsaw dan meningkatkan kemampuan stop loss.
  • Keuntungan dari strategi yang dapat disesuaikan dengan preferensi risiko pribadi.
  • Dalam kombinasi dengan garis resistensi yang mendukung supertrend visual, dapat membantu menentukan arah tren.

Analisis risiko

  • Ada masalah keterlambatan indikator seperti supertrend, kemungkinan masuk terlambat, keluar lebih awal.
  • Terlalu ketat dalam memilih filter dapat menyebabkan terlewatkan kesempatan.
  • Dalam pasar yang lebih kecil, whipsaw dapat menyebabkan kerugian.
  • Memungkinkan untuk kembali masuk akan meningkatkan frekuensi transaksi dan biaya slippoint.

Risiko ini dapat dikurangi dengan cara menyesuaikan kombinasi parameter, mengoptimalkan kondisi filter, dan lain-lain. Selain itu, Anda harus mengontrol ukuran posisi dan menghentikan kerugian secara ketat untuk menghadapi situasi pasar yang tidak pasti.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  • Uji kombinasi parameter yang berbeda untuk menemukan parameter supertrend dan EMA terbaik.
  • Optimalkan ADX untuk mengurangi sinyal palsu.
  • Tambahkan filter untuk indikator lain, seperti volatilitas, volume transaksi, dll.
  • Optimalisasi parameter untuk berbagai varietas, meningkatkan adaptasi.
  • Membangun mekanisme stop loss yang dinamis dan mengontrol risiko secara proaktif.
  • Mencoba metode seperti pembelajaran mesin untuk mencari aturan masuk dan keluar yang lebih baik.

Meringkaskan

Strategi ini memanfaatkan keunggulan sistem supertrend tiga, ditambah dengan EMA dan ADX ganda filter, dapat secara efektif meningkatkan kualitas sinyal perdagangan, mengendalikan risiko. Dengan cara seperti optimasi parameter, meningkatkan kondisi filter, dan stop loss dinamis, strategi ini dapat lebih meningkatkan kekuatan dan adaptasi.

Kode Sumber Strategi
/*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)