Strategi ini menghasilkan isyarat perdagangan berdasarkan persilangan penunjuk arah positif (DI +) dan penunjuk arah negatif (DI-) yang dikira dari julat sebenar purata (ATR).
Mengira ATR(14): Mengira julat sebenar purata selama 14 hari yang lalu menggunakan harga tinggi, rendah dan dekat.
Mengira DI+ dan DI-:
DI+ = 100 * RMA(MAX(UP,0),N) / ATNR
DI- = 100 * RMA(MAX(DOWN,0),N) / ATNR
Di mana UP adalah perbezaan antara paras tertinggi semasa dan penutupan sebelumnya, DOWN adalah perbezaan antara paras rendah semasa dan penutupan sebelumnya, N adalah tempoh parameter, lalai kepada 14, dan ATNR adalah ATR yang dikira dari langkah 1.
Menentukan masuk dan keluar:
Apabila DI + melintasi DI-, isyarat beli dihasilkan.
Apabila DI + melintasi di bawah DI-, isyarat jual dihasilkan.
Tetapkan stop loss dan mengambil keuntungan:
Stop loss panjang ialah harga masuk dikurangkan ATR didarabkan dengan pengganda stop loss
mengambil keuntungan panjang adalah harga masuk ditambah ATR didarabkan dengan pengganda mengambil keuntungan
Stop loss pendek ialah harga kemasukan ditambah ATR didarabkan dengan pengganda stop loss
Keuntungan mengambil pendek adalah harga masuk dikurangkan ATR dikalikan dengan pengganda mengambil keuntungan
Menggunakan silang DI + / DI- untuk menentukan pembalikan trend memberikan isyarat tepat pada masanya untuk arah trend baru.
ATR sebagai penunjuk stop loss/take profit dinamik boleh menetapkan tahap yang munasabah berdasarkan turun naik pasaran.
Strategi ini mempunyai beberapa parameter dan mudah difahami dan dilaksanakan.
Hasil ujian belakang menunjukkan strategi ini mempunyai faktor keuntungan positif dan melebihi beli & pegang.
Risiko isyarat palsu daripada persilangan DI
Stop loss/take profit terlalu dekat
Tidak berkesan di pasaran terhad
Risiko penggunaan
Tambah penapis seperti purata bergerak untuk mengelakkan isyarat palsu dalam tempoh julat.
Melaksanakan saiz kedudukan seperti pecahan tetap atau Martingale untuk mengawal pengeluaran dan meningkatkan keuntungan.
Mengoptimumkan parameter ATR untuk memadankan turun naik instrumen dagangan yang berbeza.
Pengoptimuman parameter pada tempoh DI, tempoh ATR, pengganda ATR dan lain-lain untuk mencari kombinasi yang optimum.
Tambah logik malam dan sesi awal untuk menjalankan strategi 24/7.
Ini adalah strategi yang mudah dan praktikal menghasilkan isyarat dari crossover DI dan menetapkan stop loss / mengambil keuntungan dinamik dengan ATR. Dengan beberapa parameter, ia mudah untuk diuji dan dioptimumkan. Tetapi crossover DI kurang berkesan semasa penyatuan. Ke hadapan, menggabungkan penapis tambahan adalah kawasan utama penambahbaikan. Secara keseluruhan strategi ini menunjukkan prestasi yang stabil yang sesuai 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)