Strategi Aliran Momentum ADX


Tarikh penciptaan: 2024-01-16 15:57:17 Akhirnya diubah suai: 2024-01-16 15:57:17
Salin: 0 Bilangan klik: 762
1
fokus pada
1617
Pengikut

Strategi Aliran Momentum ADX

Gambaran keseluruhan

Strategi ini berdasarkan kepada indikator ADX untuk menentukan trend pasaran, digabungkan dengan indikator DMI untuk menentukan arah kosong, menggunakan kemerosotan ADX untuk menentukan kekuatan trend, menetapkan nilai penting ADX untuk memfilterkan pasaran bukan trend, membantu penyaringan purata bergerak untuk memfilterkan isyarat perdagangan.

Prinsip Strategi

  1. Hitung ADX, DI+ dan DI-
  2. Slip ADX> 0, menunjukkan peningkatan trend; nilai kritikal ditetapkan sebagai 23, untuk penapisan pasaran bukan trend.
  3. DI+ lebih tinggi daripada DI-, menunjukkan kekuatan multihead lebih besar daripada kekuatan kosong, untuk melihat lebih banyak isyarat.
  4. Apabila penapis purata bergerak diaktifkan, isyarat berbilang kepala hanya dihasilkan apabila harga penutup lebih tinggi daripada purata bergerak.
  5. Apabila ADX bergelombang , ia menunjukkan penurunan trend.

Analisis kelebihan

  1. Penapisan MA membantu mengurangkan perdagangan bunyi bising di pasaran yang tidak sedang tren.
  2. Keputusan bias ADX, dapat menilai perkembangan trend dengan tepat.
  3. DI menilai arah berkerjasama dengan kebijaksanaan ADX, membentuk sistem keputusan perdagangan trend yang lebih lengkap.
  4. Pengunduran dan perbandingan keuntungan dan kerugian dijangka lebih baik daripada strategi purata bergerak yang mudah.

Analisis risiko

  1. Indeks ADX menetapkan parameter yang berbeza, dan hasilnya berbeza.
  2. DMI belum menentukan sepenuhnya arah udara bebas, dan mungkin akan menghantar isyarat yang salah.
  3. Terdapat ketidakselesaan dan penurunan keberkesanan strategi.

Arah pengoptimuman

  1. Mengoptimumkan ADX parameter untuk mencari parameter terbaik.
  2. Meningkatkan strategi hentikan kerugian untuk mengelakkan kerugian tunggal daripada berkembang.
  3. Cubalah menggabungkan isyarat penapisan dengan petunjuk lain. Contohnya RSI, Bollinger Bands.

ringkaskan

Strategi ini memanfaatkan sepenuhnya kelebihan ADX untuk menilai trend dan kekuatan trend, bekerjasama dengan arah penilaian indikator DMI, membentuk sistem penjejakan trend yang lengkap. Pada masa yang sama, purata bergerak dapat menyaring bunyi pasaran bukan trend dengan berkesan. Pengoptimuman parameter dan kombinasi indikator juga dapat meningkatkan kestabilan dan kecekapan strategi. Secara keseluruhan, strategi ini menggabungkan ciri-ciri penilaian trend dan arah, dan diharapkan dapat memperoleh pulangan yang baik.

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