Strategi perdagangan kuantitatif berdasarkan penguraian mod empirikal


Tarikh penciptaan: 2023-12-22 14:41:34 Akhirnya diubah suai: 2023-12-22 14:41:34
Salin: 0 Bilangan klik: 871
1
fokus pada
1623
Pengikut

Strategi perdagangan kuantitatif berdasarkan penguraian mod empirikal

Gambaran keseluruhan

Strategi ini adalah berdasarkan kaedah Empirical Mode Decomposition (EMD) untuk menguraikan urutan harga, mengekstrak ciri-ciri dari pelbagai gelombang, dan menghasilkan isyarat perdagangan dengan nilai rata-rata. Strategi ini terutama digunakan untuk memegang kedudukan garis panjang dan menengah.

Prinsip Strategi

  1. Menggunakan kaedah EMD untuk melakukan penyaringan pita pada harga untuk mengekstrak ciri-ciri pergerakan dalam harga
  2. Mengira purata bergerak dari siri puncak dan siri jurang
  3. Menjana isyarat dagangan apabila garis nilai rata-rata melebihi garis puncak dan garis lembah dalam perkadaran tertentu
  4. Melakukan banyak atau kosong mengikut isyarat perdagangan

Analisis kelebihan

  1. Menggunakan kaedah EMD dapat menguraikan urutan harga dengan berkesan untuk mendapatkan ciri yang berguna
  2. Garis puncak dan lembah mengawal strategi untuk berdagang hanya apabila turun naik harga melebihi satu tahap tertentu
  3. Gabungan dengan garis purata, boleh menghapuskan penembusan palsu dengan berkesan

Analisis risiko

  1. Pilihan parameter kaedah EMD yang tidak betul boleh menyebabkan overfit
  2. Perlu jangka masa yang lebih lama untuk membentuk isyarat dagangan, tidak dapat menyesuaikan diri dengan perdagangan frekuensi tinggi
  3. Tidak mampu menghadapi harga pasaran yang bergelombang

Arah pengoptimuman

  1. Mengoptimumkan parameter model EMD dan meningkatkan kesesuaian dengan pasaran
  2. Bersama-sama dengan petunjuk lain sebagai isyarat henti henti
  3. Cuba pelbagai urutan harga sebagai input strategi

ringkaskan

Strategi ini menggunakan kaedah pemecahan modular empirik untuk mengekstrak ciri-ciri urutan harga, dan menghasilkan isyarat perdagangan berdasarkan ciri-ciri yang diambil, untuk mewujudkan strategi perdagangan garis tengah yang stabil. Kelebihan strategi ini adalah dapat mengenal pasti ciri-ciri kitaran dalam harga dengan berkesan, dan mengeluarkan arahan perdagangan dalam turun naik yang besar.

Kod 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")