Strategi ini menghitung Indeks Gerakan Arah (DI) komoditas dan menggabungkannya dengan parameter batas untuk menerapkan perdagangan dua arah.
Indikator inti dari strategi ini adalah Indeks Gerakan Arah (DI).
DI+ = (DM+ / True Range) × 100 DI- = (DM- / True Range) × 100
Di mana DM+ mewakili Positif Gerakan Arah, DM- mewakili Negatif Gerakan Arah. Jangkauan Sejati mewakili volatilitas baru-baru ini dengan menghitung nilai maksimum harga tertinggi, harga terendah dan harga penutupan hari sebelumnya selama tiga hari.
Menurut definisi DI, ketika DI+ > DI-, itu berarti momentum pasar saat ini lebih kuat, termasuk pasar bull; ketika DI- > DI+, itu berarti momentum bear lebih kuat daripada momentum bull, termasuk pasar bear.
Strategi ini memanfaatkan fitur ini dan menetapkan parameter batas. Ketika DI + lebih besar dari DI- dengan parameter batas, ia menentukan bahwa pasar saat ini adalah pasar bull dan pergi panjang. Ketika DI- lebih besar dari DI + dengan parameter batas, ia menentukan bahwa pasar saat ini adalah pasar beruang dan pergi pendek.
Misalnya, jika parameter batas ditetapkan menjadi 3, aturan perdagangan khusus adalah:
Karena sering ada perbedaan berfluktuasi kecil antara DI + dan DI-, menetapkan parameter batas dapat menyaring beberapa perdagangan tanpa arah yang signifikan dan mengurangi perdagangan yang tidak perlu.
Keuntungan utama dari strategi ini adalah:
DI dapat diandalkan dalam menilai arah pasar
DI secara langsung menilai tren pasar dengan menghitung kekuatan bulls dan bears.
Parameter batas dapat secara efektif menyaring sinyal
Parameter batas menyaring fluktuasi kecil tanpa arah yang signifikan, hanya memilih bagian dengan arah yang signifikan untuk perdagangan, menghindari terjebak.
Mencapai perdagangan dua arah otomatis
Posisi panjang dan pendek dapat secara otomatis beralih berdasarkan indikator DI tanpa penilaian manual, mengurangi kesulitan perdagangan.
Kerangka waktu perdagangan yang dapat disesuaikan
Mendukung pengaturan hanya untuk perdagangan dalam kisaran tanggal yang dapat disesuaikan dan menutup semua posisi secara otomatis setelahnya, fleksibel dan nyaman.
Hanya dapat dipilih panjang atau pendek
Melalui saklar panjang dan pendek, hanya sinyal satu arah yang dapat dipilih untuk menerapkan strategi panjang atau pendek yang cocok untuk lingkungan pasar yang berbeda.
Ada juga beberapa risiko dengan strategi ini:
Kemungkinan DI memberikan sinyal yang salah
DI dapat memberikan sinyal yang salah jangka pendek ketika terjadi fluktuasi pasar yang drastis, yang mengarah pada kegagalan perdagangan.
Pengaturan parameter batas yang tidak benar
Pengaturan parameter batas tinggi atau rendah yang tidak benar dapat menyebabkan terlalu sedikit atau terlalu banyak sinyal perdagangan.
Tidak dapat menentukan titik akhir tren
DI hanya dapat menentukan arah tren saat ini dan tidak dapat menilai apakah tren telah berakhir atau terbalik.
Solusi untuk risiko termasuk:
Menggabungkan rata-rata bergerak dan indikator lain untuk menyaring sinyal DI
Sesuaikan parameter batas berdasarkan hasil backtest
Gabungkan Volume, MACD dll untuk menentukan apakah pembalikan tren
Strategi dapat dioptimalkan lebih lanjut dengan cara berikut:
Menggabungkan indikator penilaian tren lainnya seperti Profil Pasar
Menggabungkan indikator seperti Market Profile yang juga secara intuitif menilai daya jangka pendek dengan DI dapat meningkatkan akurasi penilaian.
Tambahkan strategi stop profit dan stop loss
Menetapkan stop-profit, waktu atau persentase stop-loss dapat mengunci keuntungan dan mengurangi kerugian.
Sesuaikan parameter untuk produk tertentu
Mengatur parameter batas dan waktu perdagangan sesuai dengan karakteristik produk yang berbeda dapat meningkatkan kinerja strategi.
Optimasi dinamis menggunakan pembelajaran mesin
Menerapkan algoritma pembelajaran penguatan untuk mengoptimalkan pengaturan parameter secara dinamis berdasarkan sinyal langsung.
Singkatnya, strategi ini relatif sederhana dan praktis. Ini memanfaatkan perhitungan DI
/*backtest start: 2022-12-12 00:00:00 end: 2023-12-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Noro's DI Strategy", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") len = input(title="Length", defval=14) limit = input(3, title = "limit, %") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //DI TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1]))) DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0 SmoothedTrueRange = 0.0 SmoothedDirectionalMovementPlus = 0.0 SmoothedDirectionalMovementMinus = 0.0 SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 //Trend trend = 0 trend := DIPlus > DIMinus + limit ? 1 : DIPlus < DIMinus - limit ? -1 : trend[1] //Background col = trend == 1 ? lime : red bgcolor(col, transp = 80) //Lines plot(DIPlus, color=lime, title="DI+", linewidth = 3) plot(DIMinus, color=red, title="DI-", linewidth = 3) //Trading size = strategy.position_size lot = 0.0 lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1] if trend == 1 strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if trend == -1 strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all()