Strategi ini menggunakan penunjuk momentum termasuk Indeks Arah Purata (ADX), Indeks Pergerakan Arah (DMI) dan Indeks Saluran Komoditi (CCI) untuk menentukan arah trend dan mengikuti trend.
Mengira penunjuk ADX, DMI dan CCI.
Tentukan arah trend.
Masukkan kedudukan.
Posisi keluar dengan stop loss.
ADX menapis perdagangan semasa trend lemah.
DMI mengurangkan kesilapan dalam pengenalan trend.
Memasuki CCI overextension meningkatkan masa dan mengurangkan risiko.
Menggabungkan penunjuk momentum meningkatkan ketepatan.
Hentikan kehilangan had kerugian setiap dagangan.
Whipsaws apabila ADX jatuh. Tingkatkan ambang ADX untuk memastikan trend yang cukup kuat.
DMI ketinggalan trend peringkat awal. Tambah analisis lain untuk mengenal pasti peluang.
Frekuensi perdagangan CCI yang tinggi.
Pertimbangkan strategi neutral pasaran apabila panjang dan pendek, untuk lindung nilai risiko kedudukan keseluruhan.
Mengoptimumkan parameter ADX untuk mengimbangi penapisan bunyi bising dan trend menangkap.
Mengoptimumkan parameter DMI untuk mengimbangi lag dan kepekaan.
Mengoptimumkan parameter CCI untuk mengimbangi kekerapan perdagangan dan menangkap pembalikan.
Uji menambah atau mengubah suai penunjuk untuk kombinasi yang lebih baik. contohnya MACD, KDJ.
Uji pada produk yang berbeza untuk mencari yang paling sesuai.
Mengoptimumkan saiz kedudukan untuk mengawal risiko sambil mengekalkan penjejakan trend.
Strategi ini secara logik menggunakan ADX untuk trend, DMI untuk arah dan CCI untuk pembalikan. Tetapi parameter memerlukan pengoptimuman dan ukuran kedudukan untuk kawalan risiko. Jika disesuaikan dengan betul dan digunakan untuk produk trend, ia boleh memberikan pulangan yang stabil. Pedagang harus menyesuaikan secara dinamik untuk pasaran yang berubah.
/*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))))