Indikator Momentum Strategi Pendek Panjang

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

img

Ringkasan

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.

Logika Strategi

  1. Mengira penunjuk ADX, DMI dan CCI.

    • ADX mengukur kekuatan trend. ADX yang tinggi menunjukkan trend yang kuat.
    • DMI termasuk DI + dan DI-. DI + menunjukkan kekuatan trend menaik manakala DI- menunjukkan kekuatan trend menurun. Jika DI + lebih besar daripada DI-, ia adalah trend menaik, dan sebaliknya.
    • CCI menilai tahap overbought/oversold. Di bawah -100 adalah oversold manakala di atas 100 adalah overbought.
  2. Tentukan arah trend.

    • Apabila DI + melintasi di atas DI-, aliran menaik dikenal pasti.
    • Apabila DI- melintasi di bawah DI +, trend penurunan dikenal pasti.
  3. Masukkan kedudukan.

    • Apabila trend menaik terbentuk, ADX tinggi, dan CCI < -100, pergi panjang.
    • Apabila trend menurun terbentuk, ADX tinggi, dan CCI > 100, pergi pendek.
  4. Posisi keluar dengan stop loss.

    • Apabila panjang, keluar apabila DI- melintasi di bawah DI +.
    • Apabila pendek, keluar apabila DI + melintasi di atas DI-.

Analisis Kelebihan

  1. ADX menapis perdagangan semasa trend lemah.

  2. DMI mengurangkan kesilapan dalam pengenalan trend.

  3. Memasuki CCI overextension meningkatkan masa dan mengurangkan risiko.

  4. Menggabungkan penunjuk momentum meningkatkan ketepatan.

  5. Hentikan kehilangan had kerugian setiap dagangan.

Risiko dan lindung nilai

  1. Whipsaws apabila ADX jatuh. Tingkatkan ambang ADX untuk memastikan trend yang cukup kuat.

  2. DMI ketinggalan trend peringkat awal. Tambah analisis lain untuk mengenal pasti peluang.

  3. Frekuensi perdagangan CCI yang tinggi.

  4. Pertimbangkan strategi neutral pasaran apabila panjang dan pendek, untuk lindung nilai risiko kedudukan keseluruhan.

Arahan pengoptimuman

  1. Mengoptimumkan parameter ADX untuk mengimbangi penapisan bunyi bising dan trend menangkap.

  2. Mengoptimumkan parameter DMI untuk mengimbangi lag dan kepekaan.

  3. Mengoptimumkan parameter CCI untuk mengimbangi kekerapan perdagangan dan menangkap pembalikan.

  4. Uji menambah atau mengubah suai penunjuk untuk kombinasi yang lebih baik. contohnya MACD, KDJ.

  5. Uji pada produk yang berbeza untuk mencari yang paling sesuai.

  6. Mengoptimumkan saiz kedudukan untuk mengawal risiko sambil mengekalkan penjejakan trend.

Kesimpulan

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


Lebih lanjut