Strategi ini menggunakan penunjuk momentum ADX, RSI dan Bollinger Bands untuk menentukan trend pasaran dan situasi overbought / oversold, untuk melaksanakan perdagangan automatik untuk membeli rendah dan menjual tinggi.
Indikator ADX menentukan trend. Apabila ADX lebih besar daripada 32, ia menunjukkan pasaran trend.
Indikator RSI menentukan tahap overbought / oversold. Apabila RSI melintasi di atas 30, ia menandakan pasaran oversold. Apabila RSI melintasi di bawah 70, ia menandakan pasaran overbought.
Bollinger Bands menentukan penyatuan dan pecah. Apabila harga menutup pecah di atas band atas, ia menandakan akhir penyatuan dan pecah ke atas. Apabila harga menutup pecah di bawah band bawah, ia menandakan akhir penyatuan dan pecah ke bawah.
Berdasarkan penunjuk di atas, strategi dagangan ditakrifkan seperti berikut:
Syarat beli:
Syarat jual:
Strategi ini menggunakan pelbagai penunjuk untuk menentukan keadaan pasaran, mengelakkan kemungkinan kesilapan apabila bergantung pada satu penunjuk. Dengan menentukan trend dan status overbought / oversold, ia dapat menangkap titik perubahan pasaran dengan berkesan dan mencapai harga jual rendah.
Perbandingan dengan menggunakan penunjuk trend sahaja, strategi ini dapat menangkap peluang jangka pendek dengan cara yang lebih tepat pada masanya. Berbanding dengan hanya menggunakan osilator, strategi ini dapat memahami arah trend dengan lebih baik. Oleh itu, ia mengekalkan kelebihan mengesan trend, sementara juga mempunyai fleksibiliti perdagangan pembalikan purata. Ini adalah strategi kuantitatif yang berpotensi cekap.
Risiko utama strategi ini termasuk:
Risiko isyarat palsu dari penunjuk. Penunjuk mungkin gagal apabila pasaran mengalami peristiwa melampau.
Risiko hentian terlalu ketat. turun naik pasaran jangka pendek boleh mengambil kedudukan jika hentian terlalu dekat.
Risiko terlalu sesuai: Jika parameter penunjuk hanya disesuaikan dengan data sejarah, kestabilan akan dipersoalkan dan mungkin tidak dapat menyesuaikan diri dengan perubahan dinamik pasaran.
Langkah pengurusan risiko:
Menyerang secara manual di bawah keadaan pasaran yang tidak normal untuk menghentikan strategi dan mengelakkan kerugian daripada isyarat palsu.
Tetapkan jarak henti yang munasabah, digabungkan dengan purata bergerak untuk menentukan tahap henti, mengelakkan henti sebelum waktunya.
Memperkenalkan modul Tuning Parameter, secara dinamik mengoptimumkan parameter menggunakan Walk Forward Analysis untuk memastikan ketahanan.
Aspek utama untuk meningkatkan strategi ini termasuk:
Mengoptimumkan parameter penunjuk, menggunakan algoritma pembelajaran mesin yang disesuaikan dengan setiap pasaran.
Kejuruteraan ciri, memperkenalkan lebih banyak penunjuk teknikal dan model latihan seperti SVM untuk meningkatkan ketepatan isyarat.
Menggabungkan strategi pecah berdasarkan ciri-ciri setiap pasaran menggunakan saluran harga, sokongan / rintangan dll untuk meningkatkan kestabilan.
Mengoptimumkan mekanisme mengambil keuntungan dan menghentikan kerugian dengan memperkenalkan hentian, hentian bergerak dan lain-lain untuk memaksimumkan keuntungan dan mengawal risiko dengan berkesan.
Strategi perdagangan kuantitatif jangka sederhana ini menggunakan beberapa penunjuk teknikal seperti ADX, RSI dan Bollinger Bands untuk menentukan keadaan pasaran dan meletakkan perdagangan apabila perubahan struktur yang signifikan dikenal pasti. Logiknya jelas dan dapat ditafsirkan, secara drastik mengurangkan pergantungan pada satu penunjuk sahaja. Sementara itu, risiko seperti isyarat palsu, berhenti terlalu ketat dan parameter yang berlebihan perlu ditangani melalui pengurusan risiko dan pengoptimuman model untuk meningkatkan kestabilan dan kecekapan.
/*backtest start: 2023-11-10 00:00:00 end: 2023-12-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("DAX Shooter 5M Strategy", overlay=true) //Creo ADX adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") th = input(title="threshold", type=input.integer, defval=20) dirmov(len) => up = change(high) down = -change(low) plusDM = na(up) ? na : up > down and up > 0 ? up : 0 minusDM = na(down) ? na : down > up and down > 0 ? down : 0 truerange = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, 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] = dirmov(dilen) sig = adx(dilen, adxlen) //Creo RSI src = close len = input(7, minval=1, title="Periodo RSI") up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down) bandainf = input(30, title="Livello Ipervenduto") bandasup = input(70, title="Livello Ipercomprato") //Creo Bande di Bollinger source = close length = input(50, minval=1, title="Periodo BB") mult = input(2.0, minval=0.001, maxval=50, title="Dev BB") basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev plot(basis, color=color.white) p1 = plot(upper, color=color.aqua) p2 = plot(lower, color=color.aqua) fill(p1, p2) //Stabilisco regole di ingresso if crossover(rsi, bandainf) and adx(dilen, adxlen) > 32 and low < lower strategy.entry("COMPRA", strategy.long, limit=upper, oca_name="DaxShooter", comment="COMPRA") else //strategy.exit("exit", "COMPRA", loss = 90) strategy.cancel(id="COMPRA") if crossunder(rsi, bandasup) and adx(dilen, adxlen) > 32 and high > upper strategy.entry("VENDI", strategy.short, limit=lower, oca_name="DaxShooter",comment="VENDI") else //strategy.exit("exit", "VENDI", loss = 90) strategy.cancel(id="VENDI") //Imposto gli alert buy= crossover(rsi, bandainf) and adx(dilen, adxlen) > 32 and low < lower sell= crossunder(rsi, bandasup) and adx(dilen, adxlen) > 32 and high > upper alertcondition(buy, title='Segnale Acquisto', message='Compra DAX') alertcondition(sell, title='Segnale Vendita', message='Vendi DAX') //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)