DiNapoli Menghalang Strategi Osilator

Penulis:ChaoZhang, Tarikh: 23 September 2023 15:48:40
Tag:

Ringkasan

Strategi ini menghasilkan isyarat perdagangan berdasarkan DiNapoli Detrended Oscillator. Ia mencerminkan tahap overbought / oversold dengan perbezaan antara harga dan purata bergerak, bertujuan untuk mengenal pasti peluang pembalikan. Isyarat dihasilkan apabila osilator melintasi ambang.

Logika Strategi

Komponen utama ialah:

  1. Purata bergerak: Mengira garis asas trend.

  2. Penunjuk perbezaan: Harga dikurangkan purata bergerak membentuk osilator.

  3. Garis ambang: Melalui tahap ini mencetuskan isyarat.

  4. Isyarat panjang: Oscillator melintasi sempadan.

  5. Isyarat pendek: Oscillator melintasi di bawah ambang.

  6. Pilihan terbalik: Flip isyarat panjang / pendek.

Strategi ini bertujuan untuk menangkap pembalikan jangka pendek dengan mengenal pasti perbezaan antara harga dan trend. Logiknya mudah dan intuitif.

Kelebihan

Berbanding dengan strategi pembalikan lain, kelebihan adalah:

  1. Logik yang mudah dan intuitif, mudah dilaksanakan.

  2. Parameter minimum, ujian belakang yang mudah.

  3. Fleksibiliti dalam penyesuaian parameter untuk tempoh yang berbeza.

  4. Pilihan terbalik yang boleh disesuaikan dengan pasaran yang berbeza.

  5. Hapus berhenti dan keluar kawalan risiko.

  6. Pengurangan yang agak kecil, boleh disesuaikan melalui parameter.

  7. Potensi untuk mengoptimumkan dengan pembelajaran mesin.

  8. Secara keseluruhan profil risiko / ganjaran yang baik untuk perdagangan jangka pendek.

Risiko

Walau bagaimanapun, risiko utama adalah:

  1. Terlalu bergantung pada pengoptimuman parameter risiko overfitting.

  2. Kelewatan dalam purata bergerak dan osilator.

  3. Kekurangan pengesahan dari pembolehubah lain.

  4. Kesan masa mungkin merosot di pasaran yang berubah.

  5. Sukar untuk menghasilkan alfa secara berterusan, memerlukan penyesuaian yang kerap.

  6. Perlu memantau nisbah ganjaran / risiko dan kelancaran kurva.

  7. Frekuensi perdagangan yang tinggi meningkatkan kos transaksi.

  8. Ketahanan di seluruh pasaran memerlukan pengesahan.

Peningkatan

Berdasarkan analisis, penambahbaikan mungkin melibatkan:

  1. Ujian parameter purata bergerak yang berbeza.

  2. Menambah pengesahan jumlah.

  3. Melaksanakan berhenti dan keluar untuk mengawal risiko.

  4. Menilai ketahanan di pasaran dan jangka masa yang berbeza.

  5. Pengujian balik tingkap bergelombang untuk pengesahan berterusan.

  6. Menyesuaikan saiz kedudukan ke frekuensi yang lebih rendah.

  7. Menggabungkan pembelajaran mesin untuk parameter yang lebih baik.

  8. Mengoptimumkan keseluruhan strategi pengurusan risiko.

  9. Iterasi berterusan untuk menyesuaikan diri dengan pasaran yang berubah.

Kesimpulan

Ringkasnya, ini adalah idea strategi pembalikan purata yang agak mudah. Penyesuaian parameter yang betul boleh menghasilkan hasil yang baik. Tetapi mencegah overfit dan mencapai kejayaan yang berterusan memerlukan pengujian balik, pengoptimuman dan peningkatan yang berterusan dari pelbagai dimensi.


/*backtest
start: 2023-08-23 00:00:00
end: 2023-09-22 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version = 2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 05/12/2016
// DiNapoli Detrended Oscillator Strategy
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="DiNapoli Detrended Oscillator Strategy Backtest")
Length = input(14, minval=1)
Trigger = input(0)
reverse = input(true, title="Trade reverse")
hline(Trigger, color=gray, linestyle=line)
xSMA = sma(close, Length)
nRes = close - xSMA
pos = iff(nRes > Trigger, 1,
	   iff(nRes <= Trigger, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
         iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
plot(nRes, color=blue, title="DiNapoli")
barcolor(possig == -1 ? red: possig == 1 ? green : blue )

Lebih lanjut