Strategi ini menggunakan indikator momentum termasuk Indeks Arah Rata-rata (ADX), Indeks Gerakan Arah (DMI) dan Indeks Saluran Komoditas (CCI) untuk menentukan arah tren dan mengikuti tren.
Menghitung indikator ADX, DMI dan CCI.
Tentukan arah tren.
Masuk posisi.
Posisi keluar dengan stop loss.
ADX menyaring perdagangan selama tren lemah.
DMI mengurangi kesalahan dalam identifikasi tren.
Memasuki CCI overextension meningkatkan waktu dan mengurangi risiko.
Menggabungkan indikator momentum meningkatkan akurasi.
Stop loss batas kerugian per perdagangan.
Whipsaws ketika ADX turun.
DMI tertinggal pada tahap awal tren.
Frekuensi perdagangan CCI tinggi.
Pertimbangkan strategi netral pasar ketika panjang dan pendek, untuk lindung nilai risiko posisi keseluruhan.
Mengoptimalkan parameter ADX untuk menyeimbangkan penyaringan kebisingan dan tren menangkap.
Mengoptimalkan parameter DMI untuk menyeimbangkan lag dan sensitivitas.
Mengoptimalkan parameter CCI untuk menyeimbangkan frekuensi perdagangan dan menangkap pembalikan.
Uji menambahkan atau memodifikasi indikator untuk kombinasi yang lebih baik.
Uji pada produk yang berbeda untuk menemukan yang paling cocok.
Mengoptimalkan ukuran posisi untuk mengendalikan risiko sambil mempertahankan pelacakan tren.
Strategi ini secara logis menggunakan ADX untuk tren, DMI untuk arah dan CCI untuk pembalikan. Namun parameter perlu dioptimalkan dan ukuran posisi untuk pengendalian risiko. Jika disetel dengan benar dan diterapkan pada produk tren, itu dapat memberikan pengembalian yang stabil. Pedagang harus menyesuaikan secara dinamis untuk mengubah pasar.
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("ADX Strategy", currency = "USD", initial_capital = 1000, overlay=true) adxlen = input(9, title="ADX Smoothing") dilen = input(14, title="DI Length") ADX_Entry = input(25, title="ADX Entry") dirmov(len) => up = change(high) down = -change(low) truerange = rma(tr, len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [adx, plus, minus] [sig, up, down] = adx(dilen, adxlen) cci_length = input(20, minval=1, title="CCI Length") cci_ma = sma(close, cci_length) cci = (close - cci_ma) / (0.015 * dev(close, cci_length)) stop_loss = syminfo.mintick * 100 open_longs = strategy.position_size > 0 open_shorts = strategy.position_size < 0 possible_bull = false possible_bull := not open_longs ? (possible_bull[1] and not crossunder(up,down) ? true : false) : false possible_bear = false possible_bear := not open_shorts ? (possible_bear[1] and not crossunder(down,up) ? true : false) : false bool bull_entry = crossover(up,down) if(bull_entry and up < ADX_Entry and cci < 0) possible_bull := true bull_entry := false if(possible_bull and up > ADX_Entry and cci > -100) bull_entry := true bool bear_entry = crossover(down,up) if(bear_entry and down < ADX_Entry and cci > 0) possible_bear := true bear_entry := false if(possible_bear and down >= ADX_Entry and cci < 100) bear_entry := true strategy.entry("Short", strategy.short, qty = 1,comment="Short", stop=high[1] - stop_loss, when = bear_entry) strategy.entry("Long", strategy.long, qty = 1, comment="Long", stop=low[1] - stop_loss, when = bull_entry ) strategy.close_all(when = (open_shorts and (crossover(up,down) or crossover(sig,down))) or (open_longs and ( crossover(down,up) or crossover(sig, up))))