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.
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.
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.
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.
Ujian julat masa menguji semula keberkesanan strategi dalam tempoh masa yang berbeza untuk pengesahan.
Sistem dua rel menyaring penyebaran untuk mengelakkan isyarat palsu.
ADX mengelakkan perdagangan berlebihan semasa penyatuan dengan memerlukan trend.
DMI memastikan dagangan sepadan dengan arah trend, mencegah dagangan yang bertentangan dengan trend.
Ujian julat masa mengesahkan parameter dan mengoptimumkan tetapan.
Saluran boleh membentuk perangkap, yang memerlukan hentian untuk mengelakkan whipsaws.
Kelewatan ADX mungkin kehilangan peluang awal, memerlukan tahap kunci yang lebih rendah.
Kelewatan arah DMI juga mungkin terlepas trend awal, memerlukan tempoh yang lebih pendek.
Parameter mungkin perlu diselaraskan dalam julat masa.
Uji kombinasi parameter untuk mencari tetapan optimum.
Tambah penapis seperti Bollinger Bands untuk kualiti isyarat.
Memasukkan stop loss untuk mengehadkan kerugian.
Mengoptimumkan parameter dengan pembelajaran mesin.
Sertakan lebih banyak faktor seperti sentimen dan berita.
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