Strategi ini dibina berdasarkan penunjuk DMI dengan memantau persilangan +DI dan -DI untuk menentukan arah trend harga saham, dan menggunakan penunjuk ADX untuk mengenal pasti kekuatan trend, untuk mencapai penjejakan trend. Apabila +DI melintasi di atas -DI, pergi panjang; apabila harga stop loss dicetuskan atau -DI melintasi di bawah +DI, tutup kedudukan.
Strategi ini menggunakan dua komponen penunjuk DMI: +DI dan -DI. +DI mengukur momentum menaik. Perpindahan menaik +DI ke atas -DI menunjukkan penguatan momentum menaik. -DI mengukur momentum menurun. Perpindahan menaik -DI di bawah +DI menunjukkan penguatan momentum menurun.
Apabila +DI melintasi di atas -DI, trend menaik muncul dan strategi berjalan panjang. Selepas memasuki kedudukan, stop loss linear yang menyusul mengesan peratusan tertentu daripada harga tertinggi. Apabila harga menarik balik, harga stop loss akan bergerak ke bawah dengan sewajarnya, mengunci beberapa keuntungan sebelumnya hingga tahap tertentu.
Apabila -DI melintasi di bawah +DI, trend menurun mengambil alih dan strategi menutup posisinya. Indikator ADX boleh digunakan untuk mengenal pasti kekuatan trend. Semakin tinggi ADX, semakin ketara trend. Oleh itu, strategi menggunakan ADX sebagai penunjuk tambahan untuk masuk, hanya memasuki kedudukan apabila ADX berada dalam julat tertentu.
Ringkasnya, strategi ini menangkap titik perubahan dalam trend harga untuk merealisasikan pengesanan trend purata bergerak.
Kelebihan utama strategi ini tercermin dalam tiga aspek:
Menggunakan penunjuk DMI untuk menentukan arah trend harga adalah tepat dan boleh dipercayai.
Menggunakan penunjuk ADX untuk mengenal pasti kekuatan trend mengelakkan perdagangan yang kerap di pasaran yang berbelit-belit, menjadikan strategi lebih kukuh.
Mekanisme hentian jejak linear dapat menyesuaikan kedudukan stop loss secara dinamik dan keluar lebih awal apabila trend berbalik, mengunci keuntungan separa untuk mengawal risiko dengan berkesan.
Peraturan strategi adalah mudah dan jelas, mudah difahami dan dilaksanakan, sesuai untuk perdagangan algoritma.
Risiko utama strategi ini ialah:
Kemungkinan bahawa penunjuk DMI gagal di pasaran khas tertentu. DMI tidak terpakai untuk semua pasaran. Ia boleh menghasilkan isyarat palsu apabila trend tidak jelas.
Risiko harga bergelombang di bawah tahap stop loss sebelum berbalik ke bawah lagi.
Risiko daripada tetapan parameter ADX yang tidak betul. Parameter ADX secara langsung mempengaruhi keputusan masa strategi. Prestasi akan terjejas jika ditetapkan terlalu tinggi atau terlalu rendah.
Kemudahan untuk dihentikan dalam trend menaik yang maju dengan cepat kerana kaedah berhenti trailing linear. Parameter berhenti trailing boleh diselaraskan berdasarkan situasi tertentu.
Risiko boleh dikurangkan lagi melalui penyesuaian parameter, kerugian berhenti yang ketat, mengoptimumkan seni bina program, dll.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Gunakan penunjuk lain seperti MACD, KDJ untuk penilaian tambahan untuk meningkatkan kestabilan strategi.
Uji kaedah stop loss yang berbeza seperti stop trailing kurva, stop trailing berdasarkan masa, dll.
Tambah mekanisme saiz kedudukan untuk membina kedudukan secara beransur-ansur selepas arah trend disahkan, meningkatkan keuntungan.
Menggabungkan faktor frekuensi tinggi, pembelajaran mesin dan lain-lain untuk mengoptimumkan parameter DMI dan ADX secara dinamik untuk kecerdasan yang lebih tinggi.
Tambah modul kawalan risiko programatik menggunakan belanjawan risiko dan lain-lain untuk menguruskan pengambilan maksimum.
Pelbagai cara boleh digabungkan untuk meningkatkan kecekapan, kestabilan dan keselamatan strategi dengan berkesan.
Logik keseluruhan strategi ini adalah jelas dan mudah difahami, menggunakan penunjuk DMI untuk menentukan arah trend harga dan penunjuk ADX sebagai penanda tambahan kekuatan trend, dengan hentian jejak linear yang mengawal risiko dengan berkesan. Strategi ini agak stabil tetapi masih memerlukan berhati-hati terhadap risiko tertentu. Melalui pengoptimuman dan ujian yang berterusan, penambahbaikan tambahan boleh dibuat kepada kekuatan dan kecekapan strategi.
/*backtest start: 2023-02-13 00:00:00 end: 2024-02-19 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ //@version=5 //1.0 - 240202 @caddjax strategy(title = "+DI Crossover", overlay=false) //DMI + ADX Chart w/ overlay // © jrregencia lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50) len = input.int(6, minval=1, title="DI Length") up = ta.change(high) down = -ta.change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) trur = ta.rma(ta.tr, len) plus = fixnan(100 * ta.rma(plusDM, len) / trur) minus = fixnan(100 * ta.rma(minusDM, len) / trur) sum = plus + minus adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig) adxmax = input.int(50, title="ADX Max Buying Area", minval=1, maxval=100) adxmin = input.int(0, title="ADX Min Buying Area", minval=0, maxval=99) //DI cross alert DIPcross = ta.crossover(plus, minus) ? plus : na plotshape(DIPcross, style = shape.cross , color=color.white, location=location.absolute) plot(adx, color=color.rgb(255, 238, 0, 23), title="ADX", linewidth=2) p1 = plot(plus, color=color.rgb(16, 137, 0, 31), title="+DI", linewidth=1) p2 = plot(minus, color=color.rgb(143, 82, 255, 25), title="-DI", linewidth=1) adxmaxl = hline(adxmax, title="ADX MaxLine", color=color.silver, linestyle=hline.style_solid) adxminl = hline(adxmin, title="ADX MinLine", color=color.silver, linestyle=hline.style_solid) fill(p1, p2, title="Cloud Fill", color = plus > minus ? color.teal : color.red, transp=50) fill(adxmaxl, adxminl, title="ADX Fill", color=color.silver, transp=90) // Configure trail stop level with input options (optional) longTrailPerc = input.float(3, title="Trail Long Loss (%)", minval=0.0, step=0.1) * 0.01 // Determine trail stop loss prices longStopPrice = 0.0 // Determine entry condition enterLong = ta.crossover(plus, minus) ? plus : na longStopPrice := if strategy.position_size > 0 stopValue = high[1] * (1 - longTrailPerc) math.max(stopValue, longStopPrice[1]) else 0 // Submit entry orders if enterLong strategy.entry("EL", strategy.long) // Submit exit orders for trail stop loss price if strategy.position_size > 0 strategy.exit("XL TRL STP", stop=longStopPrice)