Strategi ini menghasilkan sinyal perdagangan berdasarkan persilangan indikator arah positif (DI +) dan indikator arah negatif (DI-) yang dihitung dari rentang rata-rata yang benar (ATR). Ini termasuk dalam strategi mengikuti tren yang mengidentifikasi titik pembalikan tren melalui persilangan DI + dan DI-. ATR digunakan untuk mengatur stop loss dan mengambil tingkat keuntungan.
Menghitung ATR(14): Menghitung rentang sebenarnya rata-rata selama 14 hari terakhir menggunakan harga tinggi, rendah dan dekat.
Menghitung DI+ dan DI-:
DI+ = 100 * RMA(MAX(UP,0),N) / ATNR
DI- = 100 * RMA(MAX(DOWN,0),N) / ATNR
Di mana UP adalah perbedaan antara tinggi saat ini dan penutupan sebelumnya, DOWN adalah perbedaan antara rendah saat ini dan penutupan sebelumnya, N adalah periode parameter, secara default menjadi 14, dan ATNR adalah ATR yang dihitung dari langkah 1.
Tentukan masuk dan keluar:
Ketika DI + melintasi DI-, sinyal beli dihasilkan.
Ketika DI+ melintasi di bawah DI-, sinyal jual dihasilkan.
Setel stop loss dan mengambil keuntungan:
Stop loss panjang adalah harga masuk dikurangi ATR dikalikan dengan stop loss multiplier
Long take profit adalah harga masuk ditambah ATR dikalikan dengan pengganda take profit
Stop loss pendek adalah harga masuk ditambah ATR dikalikan dengan stop loss multiplier
Short take profit adalah harga masuk dikurangi ATR dikalikan dengan multiplier take profit
Menggunakan DI+/DI- crossover untuk menentukan pembalikan tren memberikan sinyal tepat waktu untuk arah tren baru.
ATR sebagai indikator stop loss/take profit dinamis dapat menetapkan tingkat yang wajar berdasarkan volatilitas pasar.
Strategi ini memiliki beberapa parameter dan mudah dipahami dan diterapkan.
Hasil backtest menunjukkan strategi ini memiliki faktor keuntungan positif dan mengungguli buy & hold.
Risiko sinyal palsu dari penyambungan DI
Stop loss/take profit terlalu dekat
Tidak efektif di pasar yang terikat jangkauan
Risiko penarikan
Tambahkan filter seperti rata-rata bergerak untuk menghindari sinyal palsu dalam periode yang terikat kisaran.
Mengimplementasikan ukuran posisi seperti pecahan tetap atau Martingale untuk mengendalikan penarikan dan meningkatkan profitabilitas.
Mengoptimalkan parameter ATR agar sesuai dengan volatilitas instrumen perdagangan yang berbeda.
Optimasi parameter pada periode DI, periode ATR, ATR multiplier dll untuk menemukan kombinasi yang optimal.
Tambahkan logik malam dan awal sesi untuk menjalankan strategi 24/7.
Ini adalah strategi sederhana dan praktis yang menghasilkan sinyal dari DI crossover dan mengatur stop loss / take profit dinamis dengan ATR. Dengan beberapa parameter, mudah untuk diuji dan dioptimalkan. Tapi DI crossover kurang efektif selama konsolidasi. Ke depan, menggabungkan filter tambahan adalah area perbaikan utama. Secara keseluruhan strategi ini menunjukkan kinerja stabil yang cocok untuk perdagangan harian jangka pendek.
/*backtest start: 2022-11-06 00:00:00 end: 2023-11-12 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/ // © TheHulkTrading //@version=4 strategy("DI Crossing Daily Straregy HulkTrading", overlay=true) // ATR Multiplier. Recommended values between 1..4 atr_multiplier = input(1, minval=1, title="ATR Multiplier") //Length of DI. Recommended default value = 14 length = input(14, minval=1, title="Length di") up = change(high) down = -change(low) range = rma(tr, 14) //DI+ and DI- Calculations di_plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, length) / range) di_minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, length) / range) //Long and short conditions longCond = crossover(di_plus,di_minus) shortCond = crossunder(di_plus,di_minus) //Stop levels and take profits stop_level_long = strategy.position_avg_price - atr_multiplier*atr(14) take_level_long = strategy.position_avg_price + 2*atr_multiplier*atr(14) stop_level_short = strategy.position_avg_price + atr_multiplier*atr(14) take_level_short = strategy.position_avg_price - 2*atr_multiplier*atr(14) //Entries and exits strategy.entry("Long", strategy.long, when=longCond) strategy.exit("Close Long","Long", stop=stop_level_long, limit = take_level_long) strategy.entry("Short", strategy.short, when=shortCond) strategy.exit("Close Short","Short", stop=stop_level_short, limit = take_level_short)