Strategi ini mengira Indeks Pergerakan Arah (DI) komoditi dan menggabungkannya dengan parameter had untuk melaksanakan perdagangan dua arah.
Penunjuk teras strategi ini adalah Indeks Pergerakan Arah (DI).
DI + = (DM + / Julat Benar) × 100 DI- = (DM- / Julat Benar) × 100
Di mana DM + mewakili Positif Pergerakan Arah, DM- mewakili Negatif Pergerakan Arah. Julat Benar mewakili turun naik baru-baru ini dengan mengira nilai maksimum harga tertinggi, harga terendah dan harga penutupan hari sebelumnya selama tiga hari.
Menurut definisi DI, apabila DI + > DI-, ia bermakna momentum pasaran semasa lebih kuat, yang tergolong dalam pasaran lembu; apabila DI- > DI+, ia bermakna momentum beruang lebih kuat daripada momentum lembu, yang tergolong dalam pasaran beruang.
Strategi ini menggunakan ciri ini dan menetapkan parameter had. Apabila DI + lebih besar daripada DI- dengan parameter had, ia menentukan bahawa pasaran semasa adalah pasaran lembu dan pergi panjang. Apabila DI- lebih besar daripada DI + dengan parameter had, ia menentukan bahawa pasaran semasa adalah pasaran beruang dan pergi pendek.
Sebagai contoh, jika parameter had ditetapkan kepada 3, peraturan perdagangan khusus adalah:
Oleh kerana terdapat perbezaan turun naik kecil antara DI + dan DI-, menetapkan parameter had dapat menapis beberapa dagangan tanpa arah yang ketara dan mengurangkan dagangan yang tidak perlu.
Kelebihan utama strategi ini ialah:
DI boleh dipercayai dalam menilai arah pasaran
DI secara langsung menilai trend pasaran dengan mengira kuasa lembu dan beruang. Teori ini mudah dan boleh dipercayai tanpa algoritma yang rumit seperti pemasangan lengkung.
Parameter had boleh menapis isyarat dengan berkesan
Parameter had menapis turun naik kecil tanpa arah yang signifikan, hanya memilih bahagian dengan arah yang signifikan untuk perdagangan, mengelakkan terperangkap.
Mencapai perdagangan dua arah automatik
Posisi panjang dan pendek boleh ditukar secara automatik berdasarkan penunjuk DI tanpa penilaian manual, mengurangkan kesukaran perdagangan.
Jangka masa dagangan yang boleh disesuaikan
Menyokong tetapan untuk hanya berdagang dalam julat tarikh yang boleh disesuaikan dan menutup semua kedudukan secara automatik selepas itu, fleksibel dan mudah.
Hanya boleh dipilih panjang atau pendek
Melalui suis panjang dan pendek, hanya isyarat satu arah boleh dipilih untuk melaksanakan strategi panjang atau pendek yang sesuai untuk persekitaran pasaran yang berbeza.
Terdapat juga beberapa risiko dengan strategi ini:
Kemungkinan DI memberi isyarat yang salah
DI boleh memberikan isyarat yang salah jangka pendek apabila turun naik pasaran yang drastik berlaku, yang membawa kepada perdagangan yang gagal.
Tetapan parameter had yang tidak betul
Tetapan parameter had tinggi atau rendah yang tidak betul boleh menyebabkan terlalu sedikit atau terlalu banyak isyarat perdagangan.
Tidak dapat menentukan titik akhir trend
DI hanya dapat menentukan arah trend semasa dan tidak dapat menilai sama ada trend telah berakhir atau berbalik.
Penyelesaian untuk risiko termasuk:
Gabungkan purata bergerak dan penunjuk lain untuk menapis isyarat DI
Sesuaikan parameter had berdasarkan hasil backtest
Gabungkan Volume, MACD dan lain-lain untuk menentukan sama ada pembalikan trend
Strategi ini boleh dioptimumkan lagi dengan cara berikut:
Gabungkan penunjuk penilaian trend lain seperti Profil Pasaran
Menggabungkan penunjuk seperti Profil Pasaran yang juga secara intuitif menilai kuasa pendek panjang dengan DI dapat meningkatkan ketepatan penilaian.
Tambah strategi henti keuntungan dan henti kerugian
Menetapkan penangguhan keuntungan, masa atau peratusan penangguhan kerugian boleh mengunci keuntungan dan mengurangkan kerugian.
Sesuaikan parameter untuk produk tertentu
Penyesuaian parameter had dan masa dagangan mengikut ciri produk yang berbeza dapat meningkatkan prestasi strategi.
Pengoptimuman dinamik menggunakan pembelajaran mesin
Menggunakan algoritma pembelajaran penguat untuk mengoptimumkan tetapan parameter secara dinamik berdasarkan isyarat langsung.
Ringkasnya, strategi ini agak mudah dan praktikal. Ia menggunakan pengiraan 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()