
Strategi ini memungkinkan perdagangan dua arah barang dengan menghitung indeks pergerakan barang ((DI) dan menggabungkan parameter pembatasan. Lakukan lebih banyak ketika DI + lebih besar dari DI - satu parameter pembatasan, dan kosong ketika DI - lebih besar dari DI + satu parameter pembatasan.
Indikator inti dari strategi ini adalah indeks dinamika ((DI)). DI dihitung dengan rumus berikut:
DI+ = (DM+ / real range) × 100 DI- = (DM- / real range) × 100
Di mana DM+ mewakili pergerakan multihead, DM- mewakili pergerakan kosong kepala. Sementara itu, real range mewakili volatilitas baru-baru ini dengan menghitung nilai maksimum dari tiga hari harga tertinggi, harga terendah dan harga penutupan kemarin.
Menurut definisi DI, ketika DI+ > DI- , menunjukkan bahwa kekuatan multihead lebih besar dari kekuatan kosong, termasuk pasar multihead; ketika DI- > DI+ , menunjukkan kekuatan kosong lebih kuat dari kekuatan multihead, termasuk pasar kosong.
Strategi ini menggunakan fitur ini untuk menetapkan parameter pembatasan. Jika DI+ lebih besar dari DI-satu parameter pembatasan, maka dipastikan bahwa saat ini adalah pasar multihead, lakukan over; Jika DI-lebih besar dari DI+ satu parameter pembatasan, maka dipastikan saat ini adalah pasar kosong, lakukan over.
Misalnya, jika parameter pembatasan disetel ke 3, maka aturan transaksi spesifiknya adalah:
Karena sering ada perbedaan yang lebih kecil antara DI+ dan DI- , pengaturan parameter pembatasan dapat memfilter beberapa sinyal perdagangan yang tidak memiliki arah yang jelas, mengurangi perdagangan yang tidak perlu, yang merupakan keuntungan dari strategi tersebut.
Strategi ini memiliki beberapa keuntungan utama:
DI menilai tren pasar secara langsung dengan menghitung kekuatan kedua belah pihak secara langsung, tanpa algoritma rumit seperti pencocokan kurva, teorinya sederhana dan dapat diandalkan.
Dengan membatasi filter parameter tidak ada volatilitas kecil yang jelas arah, hanya memilih segmen yang jelas arah yang lebih kuat untuk perdagangan, untuk menghindari terikat.
Posisi multi-kosong dapat beralih secara otomatis berdasarkan indikator DI, tanpa penilaian manual, mengurangi kesulitan transaksi.
Pengaturan yang mendukung perdagangan hanya dalam jangka waktu tanggal yang disesuaikan, posisi kosong otomatis setelah berakhir, fleksibilitas dan kemudahan.
Dengan multi-switch hanya dapat memilih untuk mengambil sinyal satu arah, untuk mencapai hanya melakukan lebih banyak atau hanya melakukan kosong, beradaptasi dengan lingkungan pasar yang berbeda.
Strategi ini juga memiliki beberapa risiko:
Ketika terjadi fluktuasi besar di pasar, DI dapat mengirimkan sinyal yang salah dalam jangka pendek, yang menyebabkan kegagalan perdagangan. Perlu dikombinasikan dengan indikator lain untuk pemeriksaan.
Penetapan parameter yang terlalu besar atau terlalu kecil dapat menyebabkan terlalu sedikit atau terlalu banyak sinyal perdagangan, yang perlu disesuaikan dengan pasar.
DI hanya dapat menilai arah tren saat ini, tidak dapat menentukan apakah tren berakhir atau berbalik, membutuhkan kombinasi indikator lain.
Solusi untuk mengatasi risiko meliputi:
Menyaring sinyal DI dari indikator seperti moving averages
Penyesuaian parameter pembatasan berdasarkan hasil pengukuran ulang
Pengertian dari Volume, MACD, dan lain-lain
Strategi ini dapat terus dioptimalkan dengan cara:
Indikator yang lebih intuitif untuk menilai kekuatan udara, seperti peta hujan, dikombinasikan dengan DI, dapat meningkatkan akurasi penilaian.
Tetapkan stop loss yang bergerak, waktu atau stop loss rasio, untuk mengunci keuntungan dan mengurangi kerugian.
Adaptasi parameter pembatasan dan waktu perdagangan sesuai dengan karakteristik perdagangan varietas yang berbeda dapat meningkatkan efektivitas strategi.
Menggunakan teknik seperti pembelajaran intensif untuk mengatur parameter optimasi sinyal berdasarkan disk solid.
Strategi ini secara keseluruhan relatif sederhana dan praktis. Strategi ini menggunakan metode perhitungan DI untuk menentukan arah tren; dengan membatasi parameter filter sinyal; dapat melakukan perdagangan dua arah, atau hanya dapat melakukan lebih banyak atau kosong; mendukung pengaturan jangka waktu perdagangan. Keuntungan utama adalah reliabilitas yang tinggi, sinyal filter yang efektif.
/*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()