Indikator Momentum Strategi Pendek Panjang

Penulis:ChaoZhang, Tanggal: 2023-11-02 16:34:48
Tag:

img

Gambaran umum

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.

Logika Strategi

  1. Menghitung indikator ADX, DMI dan CCI.

    • ADX mengukur kekuatan tren. ADX tinggi menunjukkan tren yang kuat.
    • DMI mencakup DI + dan DI-. DI + menunjukkan kekuatan tren naik sementara DI- menunjukkan kekuatan tren turun. Jika DI + lebih besar dari DI-, itu adalah tren naik, dan sebaliknya.
    • CCI menilai tingkat overbought/oversold. Di bawah -100 adalah oversold sedangkan di atas 100 adalah overbought.
  2. Tentukan arah tren.

    • Ketika DI+ melintasi di atas DI-, tren naik diidentifikasi.
    • Ketika DI- melintasi di bawah DI+, tren penurunan diidentifikasi.
  3. Masuk posisi.

    • Ketika tren naik terbentuk, ADX tinggi, dan CCI < -100, pergi panjang.
    • Ketika tren penurunan terbentuk, ADX tinggi, dan CCI > 100, pergi pendek.
  4. Posisi keluar dengan stop loss.

    • Jika panjang, keluar saat DI- melintasi di bawah DI+.
    • Saat pendek, keluar saat DI + melintasi di atas DI-.

Analisis Keuntungan

  1. ADX menyaring perdagangan selama tren lemah.

  2. DMI mengurangi kesalahan dalam identifikasi tren.

  3. Memasuki CCI overextension meningkatkan waktu dan mengurangi risiko.

  4. Menggabungkan indikator momentum meningkatkan akurasi.

  5. Stop loss batas kerugian per perdagangan.

Risiko dan Hedging

  1. Whipsaws ketika ADX turun.

  2. DMI tertinggal pada tahap awal tren.

  3. Frekuensi perdagangan CCI tinggi.

  4. Pertimbangkan strategi netral pasar ketika panjang dan pendek, untuk lindung nilai risiko posisi keseluruhan.

Arahan Optimasi

  1. Mengoptimalkan parameter ADX untuk menyeimbangkan penyaringan kebisingan dan tren menangkap.

  2. Mengoptimalkan parameter DMI untuk menyeimbangkan lag dan sensitivitas.

  3. Mengoptimalkan parameter CCI untuk menyeimbangkan frekuensi perdagangan dan menangkap pembalikan.

  4. Uji menambahkan atau memodifikasi indikator untuk kombinasi yang lebih baik.

  5. Uji pada produk yang berbeda untuk menemukan yang paling cocok.

  6. Mengoptimalkan ukuran posisi untuk mengendalikan risiko sambil mempertahankan pelacakan tren.

Kesimpulan

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))))


Lebih banyak