Saluran purata bergerak berganda dengan strategi pengesanan trend

Penulis:ChaoZhang, Tarikh: 2023-11-06 15:41:23
Tag:

img

Ringkasan

Strategi ini menggunakan purata bergerak pantas dan perlahan untuk membina sistem dua rel, digabungkan dengan indeks trend ADX untuk penilaian trend dan indeks arah DMI untuk menentukan arah trend, untuk mengesan trend selepas ia ditubuhkan dan keluar pada waktunya apabila trend berbalik, mengelakkan mengejar puncak dan menjual bahagian bawah.

Logik Perdagangan

  1. purata bergerak pantas dan perlahan membina sistem saluran dua rel. Apabila MA pantas melintasi MA perlahan, ia adalah isyarat masuk salib emas untuk masa yang lama. Apabila MA pantas melintasi di bawah MA perlahan, ia adalah isyarat keluar salib kematian.

  2. ADX menilai kewujudan dan kekuatan trend. Apabila ADX berada di atas tahap utama, ia menunjukkan bahawa trend wujud dan kuat. Isyarat perdagangan hanya dihasilkan apabila trend kuat.

  3. DI + DMI menentukan arah trend. Apabila DI + positif, ia menunjukkan trend menaik. Apabila DI + negatif, ia menunjukkan trend menurun. Isyarat perdagangan hanya dihasilkan apabila arah trend sepadan.

  4. Ujian julat masa menguji semula keberkesanan strategi dalam tempoh masa yang berbeza untuk pengesahan.

Analisis Kelebihan

  1. Sistem dua rel menyaring penyebaran untuk mengelakkan isyarat palsu.

  2. ADX mengelakkan perdagangan berlebihan semasa penyatuan dengan memerlukan trend.

  3. DMI memastikan dagangan sepadan dengan arah trend, mencegah dagangan yang bertentangan dengan trend.

  4. Ujian julat masa mengesahkan parameter dan mengoptimumkan tetapan.

Analisis Risiko

  1. Saluran boleh membentuk perangkap, yang memerlukan hentian untuk mengelakkan whipsaws.

  2. Kelewatan ADX mungkin kehilangan peluang awal, memerlukan tahap kunci yang lebih rendah.

  3. Kelewatan arah DMI juga mungkin terlepas trend awal, memerlukan tempoh yang lebih pendek.

  4. Parameter mungkin perlu diselaraskan dalam julat masa.

Pengoptimuman

  1. Uji kombinasi parameter untuk mencari tetapan optimum.

  2. Tambah penapis seperti Bollinger Bands untuk kualiti isyarat.

  3. Memasukkan stop loss untuk mengehadkan kerugian.

  4. Mengoptimumkan parameter dengan pembelajaran mesin.

  5. Sertakan lebih banyak faktor seperti sentimen dan berita.

Kesimpulan

Strategi ini menggabungkan kekuatan purata bergerak, indeks trend dan indeks arah untuk mengenal pasti dan mengesan trend. Semasa mengesahkan kesahihan parameter, pengoptimuman berterusan diperlukan untuk menyesuaikan diri dengan lebih banyak keadaan pasaran dengan menyesuaikan parameter, menambah berhenti, mensintesis lebih banyak faktor, dan sebagainya, untuk meningkatkan ketahanan dan keuntungan. Secara keseluruhan, ia menyediakan trend yang boleh dipercayai mengikut metodologi untuk perdagangan kuantitatif.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// author: codachang0726
strategy(title = "(S)MA+ADX+DI+time", shorttitle = "(S)MA+ADX+DI+time", overlay = true)

// === INPUT MA LENGTHS ===
fastMA    = input(defval = 7,   title = "FastMA",          minval = 1, step = 1)
slowMA    = input(defval = 14,   title = "SlowMA",          minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 9,    title = "From Month",      minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        minval = 1, maxval = 31)
thruYear  = input(defval = 2022, title = "Thru Year",       minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

// === MA LOGIC ===
crossOv   =  sma(close, fastMA) > sma(close, slowMA)     // true when fastMA over slowMA
crossUn   =  sma(close, fastMA) < sma(close, slowMA)     // true when fastMA under slowMA

// DI+ADX
adxlen      = input(14, title="ADX Smoothing")
dilen       = input(14, title="DI Period")
keyLevel    = input(20, title="Keylevel for ADX")
[diplus, diminus, adx] = dmi(dilen, adxlen)
di = (diplus - diminus)

buy = di > 0 and crossOv and adx > keyLevel
sell = di < 0 and crossUn and adx > keyLevel

buy_time = buy and not buy[1]
sell_time = sell and not sell[1]

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy_time)    // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and sell_time)                   // exit long when "within window of time" AND crossunder         

// === PLOTTING ===
bgcolor(color = showDate and window() ? color.gray : na, transp = 90)                                     // plot "within window of time"
plot(sma(close, fastMA), title = 'FastMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.aqua,   linewidth = 2, style = plot.style_line)  // plot SlowMA


Lebih lanjut