Strategi Perdagangan Kuantitatif Purata Pergerakan Eksponen Sifar Lag Suai


Tarikh penciptaan: 2024-02-19 15:38:02 Akhirnya diubah suai: 2024-02-19 15:38:02
Salin: 0 Bilangan klik: 841
1
fokus pada
1617
Pengikut

Strategi Perdagangan Kuantitatif Purata Pergerakan Eksponen Sifar Lag Suai

Gambaran keseluruhan

Strategi Perdagangan Kuantitatif Eksponen Bergerak Rata-rata Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak Bergerak

Prinsip Strategi

Idea teras strategi ini berasal dari teori penapis nol-lag John Ehlers. Walaupun purata bergerak indeks adalah petunjuk teknikal yang terkenal, ia mempunyai masalah lag secara semula jadi. Dengan memasukkan faktor pembetulan kesilapan dalam formula pengiraan purata bergerak indeks, Ehlers dapat menghapuskan lag secara berkesan, menjadikan purata bergerak indeks nol-lag lebih sensitif untuk mengesan perubahan harga.

Dalam strategi EMA penyesuaian sifar, kami menggunakan kaedah pengukuran frekuensi masa nyata untuk mengoptimumkan parameter kitaran purata bergerak indeks penyesuaian sifar. Pengukuran frekuensi masa nyata terbahagi kepada kedua-dua kaedah rantai dan sinapsis, yang dapat mengukur kitaran dominan perubahan urutan harga. Kami mengesan kitaran terbaik yang dikira oleh kedua-dua kaedah pengukuran ini dalam masa nyata, secara dinamik menetapkan parameter kitaran indeks penyesuaian indeks penyesuaian sifar, menjadikannya lebih sesuai dengan persekitaran pasaran semasa.

Apabila garis cepat ((Zero Lagging Index Moving Average) di atas merentasi garis perlahan ((Ordinary Index Moving Average) di atas melakukan lebih banyak, di bawah melakukan kosong, ini membentuk isyarat strategi perdagangan yang serupa dengan persimpangan rata-rata bergerak.

Kelebihan Strategik

Strategi EMA penyesuaian sifar yang bersesuaian menggabungkan penapis sifar yang bersesuaian dan kaedah pengoptimuman kitaran penyesuaian, dengan kelebihan berikut:

  1. Menghapuskan lag dan menjadikan isyarat lebih sensitif dan dipercayai
  2. Parameter kitaran penyesuaian diri, menyesuaikan diri dengan persekitaran pasaran yang lebih luas
  3. Lebih sedikit parameter strategi, mudah diuji dan dioptimumkan
  4. Pengaturan titik hentian kerugian tetap, risiko mudah dikawal

Risiko Strategik

Strategi EMA beradaptasi dengan ketinggalan sifar juga mempunyai beberapa risiko, terutama yang ditunjukkan oleh:

  1. Dalam keadaan pasaran tertentu, parameter kitaran yang dioptimumkan untuk menyesuaikan diri mungkin tidak berfungsi
  2. Tetapan yang tidak betul pada stop loss yang ditetapkan boleh menyebabkan kerugian atau kerugian yang berlebihan
  3. Pemeriksaan optimasi parameter yang tidak mencukupi boleh menyebabkan prestasi cakera keras yang tidak baik

Untuk mengawal risiko-risiko ini, kita perlu menguji sepenuhnya parameter-setting di bawah pelbagai persekitaran pasaran, menyesuaikan titik-titik berhenti-rugi dengan betul, dan melakukan pengesahan yang mencukupi dalam pengukuran semula untuk memodelkan persekitaran yang nyata.

Arah pengoptimuman strategi

Strategi EMA untuk menyesuaikan diri dengan ketinggalan sifar mempunyai ruang yang luas untuk pengoptimuman, dengan arah utama termasuk:

  1. Cuba kaedah pengukuran kitaran penyesuaian yang berbeza, seperti MA penyesuaian kadar turun naik
  2. Tambah syarat penapis tambahan seperti jumlah dagangan, pasangan purata bergerak dan sebagainya
  3. Mengoptimumkan strategi hentian kerugian seperti trailing stop, Chandelier Exit dan sebagainya
  4. Pengaturan dinamik saiz kedudukan, bersama dengan pengurusan risiko
  5. Pengesahan pelbagai kitaran masa untuk meningkatkan kualiti isyarat

Melalui kaedah pengoptimuman ini, ia dijangka dapat meningkatkan lagi kadar kemenangan, kadar keuntungan, indikator penyesuaian risiko dan sebagainya.

ringkaskan

Strategi EMA penyesuaian sifar yang berjaya menggabungkan penapis penyesuaian sifar dan idea pengoptimuman kitaran dinamik, merupakan strategi perdagangan kuantitatif dengan parameter yang lebih sedikit, mudah dikendalikan dan dioptimumkan. Ia mempunyai ciri-ciri yang sensitif dan beradaptasi, berfungsi dengan baik di pasaran yang sedang berkembang. Dengan pengendalian kerugian dan pengurusan kedudukan yang sesuai, kestabilan dan keuntungan dapat ditingkatkan.

Kod sumber strategi
/*backtest
start: 2024-01-19 00:00:00
end: 2024-02-18 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Adaptive Zero Lag EMA v2", shorttitle="AZLEMA", overlay = true)

src = input(title="Source",  defval=close)
Period = input(title="Period",  defval = 20)
adaptive = input(title="Adaptive Method", options=["Off", "Cos IFM", "I-Q IFM", "Average"], defval="Off")
GainLimit = input(title="Gain Limit",  defval = 10)
Threshold = input(title="Threshold", type = float, defval=0.05, step=0.01)
fixedSL = input(title="SL Points", defval=70)
fixedTP = input(title="TP Points", defval=5)
risk = input(title='Risk', defval=0.01, step=0.01)

//##############################################################################
//I-Q IFM
//#############################################################################
range = input(title="Max Period",  defval=60, minval=8, maxval=100)

PI = 3.14159265359
imult = 0.635
qmult = 0.338
inphase = 0.0
quadrature = 0.0
re = 0.0
im = 0.0
deltaIQ = 0.0
instIQ = 0.0
lenIQ = 0.0
V = 0.0

P = src - src[7]
inphase := 1.25*(P[4] - imult*P[2]) + imult*nz(inphase[3])
quadrature := P[2] - qmult*P + qmult*nz(quadrature[2])
re := 0.2*(inphase*inphase[1] + quadrature*quadrature[1]) + 0.8*nz(re[1])
im := 0.2*(inphase*quadrature[1] - inphase[1]*quadrature) + 0.8*nz(im[1])
if (re!= 0.0)
    deltaIQ := atan(im/re)
for i=0 to range
    V := V + deltaIQ[i]
    if (V > 2*PI and instIQ == 0.0)
        instIQ := i
if (instIQ == 0.0)
    instIQ := nz(instIQ[1])
lenIQ := 0.25*instIQ + 0.75*nz(lenIQ[1])

//##############################################################################
//COSINE IFM
//#############################################################################
s2 = 0.0
s3 = 0.0
deltaC = 0.0
instC = 0.0
lenC = 0.0
v1 = 0.0
v2 = 0.0
v4 = 0.0

v1 := src - src[7]
s2 := 0.2*(v1[1] + v1)*(v1[1] + v1) + 0.8*nz(s2[1])
s3 := 0.2*(v1[1] - v1)*(v1[1] - v1) + 0.8*nz(s3[1])
if (s2 != 0)
    v2 := sqrt(s3/s2)
if (s3 != 0)
    deltaC := 2*atan(v2)
for i = 0 to range
    v4 := v4 + deltaC[i]
    if (v4 > 2*PI and instC == 0.0)
        instC := i - 1
if (instC == 0.0)
    instC := instC[1]
lenC := 0.25*instC + 0.75*nz(lenC[1])

if (adaptive == "Cos IFM")
    Period := round(lenC)
if (adaptive == "I-Q IFM")
    Period := round(lenIQ)
if (adaptive == "Average")
    Period := round((lenC + lenIQ)/2)

//##############################################################################
//ZERO LAG EXPONENTIAL MOVING AVERAGE
//##############################################################################
LeastError = 1000000.0
EC = 0.0
Gain = 0.0
EMA = 0.0
Error = 0.0
BestGain = 0.0

alpha =2/(Period + 1)
EMA := alpha*src + (1-alpha)*nz(EMA[1])

for i = -GainLimit to GainLimit
    Gain := i/10
    EC := alpha*(EMA + Gain*(src - nz(EC[1]))) + (1 - alpha)*nz(EC[1])
    Error := src - EC
    if(abs(Error)<LeastError)
        LeastError := abs(Error)
        BestGain := Gain

EC := alpha*(EMA + BestGain*(src - nz(EC[1]))) + (1-alpha)*nz(EC[1])

plot(EC, title="EC", color=orange, linewidth=2)
plot(EMA, title="EMA", color=red, linewidth=2)

buy = crossover(EC,EMA) and 100*LeastError/src > Threshold
sell = crossunder(EC,EMA) and 100*LeastError/src > Threshold
strategy.initial_capital = 50000
if (time>timestamp(2016, 1, 1 , 0, 0))
    //LONG
    balance = strategy.initial_capital + strategy.netprofit
    lots = ((risk * balance)/fixedSL)*1
    strategy.entry("BUY", strategy.long, qty=lots, oca_name="BUY",  when=buy)
    strategy.exit("B.Exit", "BUY", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP)
    //SHORT
    strategy.entry("SELL", strategy.short, qty=lots, oca_name="SELL", when=sell)
    strategy.exit("S.Exit", "SELL", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP)