Strategi Tren Momentum ADX


Tanggal Pembuatan: 2024-01-16 15:57:17 Akhirnya memodifikasi: 2024-01-16 15:57:17
menyalin: 0 Jumlah klik: 762
1
fokus pada
1617
Pengikut

Strategi Tren Momentum ADX

Ringkasan

Strategi ini didasarkan pada indikator ADX untuk menilai tren pasar, dikombinasikan dengan indikator DMI untuk menilai arah kosong, menggunakan gradien ADX untuk menilai kekuatan tren, mengatur nilai kunci ADX untuk memfilter pasar non-trend, dan membantu memfilter sinyal perdagangan dengan rata-rata bergerak.

Prinsip Strategi

  1. Hitung ADX, DI+, DI-
  2. Slip ADX > 0, menunjukkan peningkatan tren; nilai kritis ditetapkan menjadi 23, untuk memfilter pasar non-trending.
  3. DI+ lebih tinggi dari DI-, menunjukkan kekuatan multihead lebih besar dari kekuatan udara, untuk melihat sinyal multi.
  4. Ketika filter moving average diaktifkan, sinyal multihead hanya akan dihasilkan jika harga close out lebih tinggi dari moving average.
  5. Ketika ADX bergeser < 0, posisi terendah menunjukkan penurunan tren.

Analisis Keunggulan

  1. Filter MA tambahan dapat mengurangi perdagangan bising di pasar non-trending.
  2. ADX bias penilaian, dapat menilai perkembangan tren secara akurat.
  3. DI menilai arah dengan ADX, membentuk sistem keputusan perdagangan tren yang lebih lengkap.
  4. Rasio penarikan dan pengembalian lebih baik daripada strategi rata-rata bergerak sederhana.

Analisis risiko

  1. Indikator ADX menetapkan parameter yang berbeda, dan hasilnya akan sangat berbeda.
  2. DMI belum sepenuhnya menentukan arah udara bebas, mungkin akan mengirimkan sinyal yang salah.
  3. Ada beberapa keterlambatan yang mengurangi efektivitas strategi.

Arah optimasi

  1. Mengoptimalkan ADX parameter, mencari parameter terbaik.
  2. Meningkatkan strategi stop loss untuk menghindari peningkatan kerugian tunggal.
  3. Cobalah untuk memfilter sinyal dengan indikator lain, misalnya RSI, Bollinger Bands.

Meringkaskan

Strategi ini memanfaatkan sepenuhnya keuntungan dari ADX untuk menilai tren dan kekuatan tren, bekerja sama dengan arah penilaian indikator DMI, membentuk sistem pelacakan tren yang lengkap. Pada saat yang sama, membantu rata-rata bergerak dapat secara efektif menyaring kebisingan pasar non-trending. Optimasi parameter dan kombinasi indikator dapat meningkatkan stabilitas dan efisiensi strategi lebih lanjut. Secara keseluruhan, strategi ini menggabungkan karakteristik penilaian tren dan penilaian arah, diharapkan untuk mendapatkan hasil yang baik.

Kode Sumber Strategi
/*backtest
start: 2024-01-08 00:00:00
end: 2024-01-15 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © millerrh with inspiration from @9e52f12edd034d28bdd5544e7ff92e 
//The intent behind this study is to look at ADX when it has an increasing slope and is above a user-defined key level (23 default). 
//This is to identify when it is trending.
//It then looks at the DMI levels.  If D+ is above D- and the ADX is sloping upwards and above the key level, it triggers a buy condition.  Opposite for short.
//Can use a user-defined moving average to filter long/short if desried.
// NOTE: THIS IS MEANT TO BE USED IN CONJUNCTION WITH MY "ATX TRIGGER" INDICATOR FOR VISUALIZATION. MAKE SURE SETTINGS ARE THE SAME FOR BOTH.

strategy("ADX | DMI Trend", overlay=true, initial_capital=10000, currency='USD', 
   default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.04)

// === BACKTEST RANGE ===
From_Year  = input(defval = 2019, title = "From Year")
From_Month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
From_Day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
To_Year    = input(defval = 9999, title = "To Year")
To_Month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
To_Day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
Start  = timestamp(From_Year, From_Month, From_Day, 00, 00)  // backtest start window
Finish = timestamp(To_Year, To_Month, To_Day, 23, 59)        // backtest finish window

// == INPUTS ==
// ADX Info
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Period")
keyLevel = input(23, title="Keylevel for ADX")
adxLookback = input(3, title="Lookback Period for Slope")

// == FILTERING ==
// Inputs
useMaFilter = input(title = "Use MA for Filtering?", type = input.bool, defval = true)
maType = input(defval="EMA", options=["EMA", "SMA"], title = "MA Type For Filtering")
maLength   = input(defval = 200, title = "MA Period for Filtering", minval = 1)

// Declare function to be able to swap out EMA/SMA
ma(maType, src, length) =>
    maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = ma(maType, close, maLength)
plot(maFilter, title = "Trend Filter MA", color = color.green, linewidth = 3, style = plot.style_line, transp = 50)

// Check to see if the useMaFilter check box is checked, this then inputs this conditional "maFilterCheck" variable into the strategy entry 
maFilterCheck = if useMaFilter == true
    maFilter
else
    close

// == USE BUILT-IN DMI FUNCTION TO DETERMINE ADX AND BULL/BEAR STRENGTH
[diplus, diminus, adx] = dmi(dilen, adxlen)

buySignal = (adx[0]-adx[adxLookback] > 0) and adx > keyLevel and diplus > diminus  and close >= maFilterCheck
// buySignalValue = valuewhen(buySignal, close, 0)
shortSignal = (adx[0]-adx[adxLookback] > 0) and adx > keyLevel and diplus < diminus  and close <= maFilterCheck
// shortSignalValue = valuewhen(shortSignal, close, 0)
sellCoverSignal = adx[0]-adx[adxLookback] < 0

// == ENTRY & EXIT CRITERIA
// Triggers to be TRUE for it to fire of the BUY Signal : (opposite for the SELL signal).
// (1): Price is over the 200 EMA line. (EMA level configurable by the user)
// (2): "D+" is OVER the "D-" line
// (3): RSI 7 is under 30 (for SELL, RSI 7 is over 70)
// 1* = The ultimate is to have a combination line of 3 EMA values, EMA 14, EMA 50 and EMA 200 - And if price is over this "combo" line, then it's a strong signal

// == STRATEGY ENTRIES/EXITS == 
strategy.entry("Long", strategy.long, when = buySignal)
strategy.close("Long", when = sellCoverSignal)
strategy.entry("Short", strategy.short, when = shortSignal)
strategy.close("Short", when = sellCoverSignal)
    
// == ALERTS == 
// alertcondition(buySignal, title='ADX Trigger Buy', message='ADX Trigger Buy')
// alertcondition(sellSignal, title='ADX Trigger Sell', message='ADX Trigger Sell')