Strategi Perdagangan Kuantitatif Berdasarkan Penguraian Mod Empirikal

Penulis:ChaoZhang, Tarikh: 2023-12-22 14:41:34
Tag:

img

Ringkasan

Strategi ini adalah berdasarkan kaedah Empirical Mode Decomposition (EMD) untuk memecahkan siri harga dan mengekstrak ciri-ciri dari jalur frekuensi yang berbeza, digabungkan dengan purata untuk menjana isyarat perdagangan.

Logika Strategi

  1. Gunakan kaedah EMD untuk menapis harga dan mengekstrak turun naik harga
  2. Mengira purata bergerak urutan puncak dan lereng
  3. Menghasilkan isyarat dagangan apabila garis purata melebihi peratusan tertentu daripada garis puncak dan bawah
  4. Panjang atau pendek berdasarkan isyarat dagangan

Analisis Kelebihan

  1. Kaedah EMD dapat menguraikan siri harga dengan berkesan dan mengekstrak ciri-ciri berguna
  2. Garis puncak dan bawah mengawal strategi untuk berdagang hanya apabila turun naik harga adalah lebih besar daripada amplitudo tertentu
  3. Digabungkan dengan garis purata, ia boleh menapis secara berkesan pecah palsu

Analisis Risiko

  1. Pemilihan parameter kaedah EMD yang tidak betul boleh menyebabkan pemasangan berlebihan
  2. Ia mengambil kitaran yang panjang untuk membentuk isyarat urus niaga dan tidak dapat menyesuaikan diri dengan perdagangan frekuensi tinggi
  3. Tidak dapat mengatasi keadaan pasaran dengan turun naik harga yang dramatik

Arahan pengoptimuman

  1. Mengoptimumkan parameter model EMD untuk meningkatkan kesesuaian dengan pasaran
  2. Menggabungkan penunjuk lain sebagai isyarat stop loss dan mengambil keuntungan
  3. Cuba siri harga yang berbeza sebagai input strategi

Ringkasan

Strategi ini menggunakan kaedah penguraian mod empirikal untuk mengekstrak ciri-ciri dari siri harga dan menghasilkan isyarat perdagangan berdasarkan ciri-ciri yang diekstrak, merealisasikan strategi perdagangan jangka menengah dan panjang yang stabil. Kelebihan strategi ini adalah bahawa ia dapat mengenal pasti ciri-ciri berkala dalam harga dan mengeluarkan pesanan dagangan semasa turun naik yang besar. Tetapi terdapat juga risiko tertentu, dan pengoptimuman lanjut diperlukan untuk menyesuaikan diri dengan persekitaran pasaran yang lebih kompleks.


/*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")

Lebih lanjut