Strategi perdagangan harian lintas DI ganda

Penulis:ChaoZhang, Tanggal: 2023-11-13 11:32:08
Tag:

img

Gambaran umum

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.

Logika Strategi

  1. Menghitung ATR(14): Menghitung rentang sebenarnya rata-rata selama 14 hari terakhir menggunakan harga tinggi, rendah dan dekat.

  2. 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.

  3. Tentukan masuk dan keluar:

    • Ketika DI + melintasi DI-, sinyal beli dihasilkan.

    • Ketika DI+ melintasi di bawah DI-, sinyal jual dihasilkan.

  4. 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

Analisis Keuntungan

  1. Menggunakan DI+/DI- crossover untuk menentukan pembalikan tren memberikan sinyal tepat waktu untuk arah tren baru.

  2. ATR sebagai indikator stop loss/take profit dinamis dapat menetapkan tingkat yang wajar berdasarkan volatilitas pasar.

  3. Strategi ini memiliki beberapa parameter dan mudah dipahami dan diterapkan.

  4. Hasil backtest menunjukkan strategi ini memiliki faktor keuntungan positif dan mengungguli buy & hold.

Risiko dan Solusi

  1. Risiko sinyal palsu dari penyambungan DI

    • Menyaring sinyal dengan moving average dll untuk menghindari false breakout.
  2. Stop loss/take profit terlalu dekat

    • Sesuaikan pengganda ATR untuk menyesuaikan volatilitas.
  3. Tidak efektif di pasar yang terikat jangkauan

    • Gabungkan dengan indikator lain untuk menyaring sinyal dalam konsolidasi.
  4. Risiko penarikan

    • Penarikan dapat diterima tetapi tidak dapat dihindari untuk strategi sistematis.

Saran Optimalisasi

  1. Tambahkan filter seperti rata-rata bergerak untuk menghindari sinyal palsu dalam periode yang terikat kisaran.

  2. Mengimplementasikan ukuran posisi seperti pecahan tetap atau Martingale untuk mengendalikan penarikan dan meningkatkan profitabilitas.

  3. Mengoptimalkan parameter ATR agar sesuai dengan volatilitas instrumen perdagangan yang berbeda.

  4. Optimasi parameter pada periode DI, periode ATR, ATR multiplier dll untuk menemukan kombinasi yang optimal.

  5. Tambahkan logik malam dan awal sesi untuk menjalankan strategi 24/7.

Kesimpulan

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)



Lebih banyak