Strategi perdagangan kuantitatif berdasarkan dekomposisi mode empiris


Tanggal Pembuatan: 2023-12-22 14:41:34 Akhirnya memodifikasi: 2023-12-22 14:41:34
menyalin: 0 Jumlah klik: 871
1
fokus pada
1623
Pengikut

Strategi perdagangan kuantitatif berdasarkan dekomposisi mode empiris

Ringkasan

Strategi ini didasarkan pada metode Empirical Mode Decomposition (EMD) untuk membongkar urutan harga, mengekstrak karakteristik dari berbagai band, dan menggabungkan nilai rata-rata untuk menghasilkan sinyal perdagangan. Strategi ini terutama berlaku untuk posisi garis panjang dan menengah.

Prinsip Strategi

  1. Menggunakan metode EMD untuk melakukan bandwidth filter pada harga, untuk mengekstrak karakteristik fluktuasi dalam harga
  2. Menghitung Moving Average dari Peak Sequence dan Valley Sequence
  3. Menciptakan sinyal perdagangan ketika garis rata-rata melebihi rasio tertentu dari garis puncak dan garis lembah
  4. Berdasarkan sinyal trading, lakukan multiply atau blank.

Analisis Keunggulan

  1. Menggunakan metode EMD dapat secara efektif memecah urutan harga untuk mengekstrak fitur yang berguna
  2. Garis puncak-lembah mengendalikan strategi untuk hanya berdagang jika harga berfluktuasi lebih besar dari tingkat tertentu
  3. Kombinasi dengan garis rata-rata, dapat secara efektif menyingkirkan terobosan palsu

Analisis risiko

  1. Salah memilih parameter metode EMD dapat menyebabkan overmatch
  2. Perlu siklus yang lebih lama untuk membentuk sinyal perdagangan, tidak dapat beradaptasi dengan perdagangan frekuensi tinggi
  3. Tidak mampu menghadapi kondisi pasar dengan harga yang sangat berfluktuasi

Arah optimasi

  1. Optimalkan parameter model EMD untuk meningkatkan adaptasi pasar
  2. Kombinasi dengan indikator lain sebagai sinyal stop loss
  3. Mencoba berbagai urutan harga sebagai input strategi

Meringkaskan

Strategi ini menggunakan metode pemecahan modus empiris untuk ekstraksi fitur dari urutan harga dan menghasilkan sinyal perdagangan berdasarkan fitur yang diekstraksi, untuk mencapai strategi perdagangan garis tengah yang stabil. Keuntungan dari strategi ini adalah kemampuan untuk secara efektif mengidentifikasi karakteristik berkala dalam harga dan mengeluarkan instruksi perdagangan dalam fluktuasi besar. Namun, ada juga risiko tertentu yang perlu dioptimalkan lebih lanjut untuk menyesuaikan diri dengan lingkungan pasar yang lebih kompleks.

Kode Sumber Strategi
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/04/2017
// The related article is copyrighted material from Stocks & Commodities Mar 2010
// You can use in the xPrice any series: Open, High, Low, Close, HL2, HLC3, OHLC4 and ect...
//
// 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="Empirical Mode Decomposition")
Length = input(20, minval=1)
Delta = input(0.5)
Fraction = input(0.1)
reverse = input(false, title="Trade reverse")
xPrice = hl2
beta = cos(3.1415 * (360 / Length) / 180)
gamma = 1 / cos(3.1415 * (720 * Delta / Length) / 180)
alpha = gamma - sqrt(gamma * gamma - 1)
xBandpassFilter = 0.5 * (1 - alpha) * (xPrice - xPrice[2]) + beta * (1 + alpha) * nz(xBandpassFilter[1]) - alpha * nz(xBandpassFilter[2])
xMean = sma(xBandpassFilter, 2 * Length)
xPeak =  iff (xBandpassFilter[1] > xBandpassFilter and xBandpassFilter[1] > xBandpassFilter[2], xBandpassFilter[1], nz(xPeak[1])) 
xValley =  iff (xBandpassFilter[1] < xBandpassFilter and xBandpassFilter[1] < xBandpassFilter[2], xBandpassFilter[1], nz(xValley[1])) 
xAvrPeak = sma(xPeak, 50)
xAvrValley = sma(xValley, 50)
nAvrPeak = Fraction * xAvrPeak
nAvrValley = Fraction * xAvrValley
pos = iff(xMean > nAvrPeak and xMean > nAvrValley, 1,
	     iff(xMean < nAvrPeak and xMean < nAvrValley, -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)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(xMean, color=red, title="Mean")
plot(nAvrPeak, color=blue, title="Peak")
plot(nAvrValley, color=blue, title="Valley")