
Strategi Rata-rata Bergerak Adaptif (Mala Adaptive Moving Average Strategy) adalah strategi dagangan kuantitatif berdasarkan petunjuk rata-rata bergerak adaptasi MESA oleh John Ehlers. Strategi ini menggunakan gelombang sinkron untuk membuat keputusan perdagangan, membeli pada titik rendah dan menjual pada titik tinggi, dengan parameter penyesuaian geser yang membolehkan gelombang sinkron menyesuaikan diri dengan pelbagai jenis dan keadaan pasaran.
Strategi bergerak rata-rata yang beradaptasi menggunakan penjana gelombang sinkron untuk menghasilkan isyarat perdagangan. Gelombang sinkron ditentukan oleh bayangan yang diletakkan oleh vektor yang berputar (yang dipanggil faktor) pada sumbu lurus. Apabila vektor berputar 360 darjah, satu kitaran diselesaikan.
Khususnya, strategi ini mula-mula melakukan pengendalian harga yang lancar dan tidak trend, dan kemudian mengira dua peratusan gelombang sinkron: peratusan identik I dan peratusan positif Q. Kedua-dua peratusan ini ditumpuk dan digulung oleh pergeseran fasa, dan Re dan Im yang akhir dihasilkan. Re dan Im mencerminkan maklumat frekuensi gelombang sinkron, dan melaluiatan. Im / Re dapat menghasilkan tempoh kitaran.
Strategi purata bergerak yang beradaptasi mempunyai kelebihan berikut:
Menggunakan gelombang sinonim dan fasa sebagai isyarat perdagangan, menjadikan strategi lebih kuat dan tidak terjejas oleh bentuk gelombang zon waktu.
Siklus dan parameter boleh menyesuaikan secara dinamik untuk menyesuaikan diri dengan perubahan pasaran, dengan keupayaan penyesuaian yang kuat.
MAMA dan FAMA hanya bergantung kepada ciri-ciri harga itu sendiri, tanpa kelewatan, dan dapat menangkap perubahan trend tepat pada masanya.
Dengan parameter yang ditetapkan, anda boleh menyesuaikan kepekaan strategi untuk gaya peniaga yang berbeza.
Strategi logik yang jelas dan mudah, mudah difahami dan diubah suai, sesuai untuk penyelidikan dan pengajaran.
Ada juga risiko yang berkaitan dengan strategi moving average yang disesuaikan:
Oleh kerana bergantung kepada kitaran dan fasa kurva sinonim, isyarat salah akan dihasilkan apabila harga mengalami penyimpangan yang tidak normal.
Setting hard boundary in the periodic judgement, which makes the periodic change not smooth enough.
Kesan sel pada kedudukan dan kitaran akan menyebabkan kurva bergoyang di sekitar titik-titik penting dan mungkin terlepas Entries dan Exits terbaik.
Apabila turun naik pasaran meningkat, parameter dan kebolehan beradaptasi kurva akan menurun.
Sebagai penunjuk teknikal, strategi mudah berlaku dalam penembusan palsu dan isyarat salah di lokasi teknikal yang penting.
Risiko ini dapat dikurangkan dengan cara menetapkan parameter yang lebih halus, memfilterkannya dengan penunjuk lain, menyesuaikan saiz pegangan, dan sebagainya.
Strategi purata bergerak yang beradaptasi boleh dioptimumkan dalam beberapa aspek:
Peningkatan kaedah pengiraan kitaran dan parameter, menjadikan perubahannya lebih halus dan semula jadi. Sebagai contoh, kaedah statistik boleh diperkenalkan untuk pemodelan harga yang lebih baik.
Penapisan isyarat digabungkan dengan penunjuk seperti kadar turun naik, jumlah lalu lintas, untuk meningkatkan ketepatan. Ia juga boleh digabungkan dengan kebolehpercayaan isyarat untuk memahami asasnya.
Mengoptimumkan tetapan parameter dan kawalan titik geser, mengurangkan kos urus niaga, meningkatkan kestabilan sistem.
Memperkenalkan kaedah pembelajaran mesin dan algoritma genetik untuk mengoptimumkan parameter secara dinamik, menjadikan parameter sistem terus berkembang dan diperbaharui.
Menetapkan Entries dan Exits yang berbeza, menggabungkan trend dan sistem pembalikan, membina portfolio, meningkatkan keuntungan yang berterusan.
Strategi bergerak rata-rata yang beradaptasi menggunakan analisis gelombang sinkron untuk menghasilkan isyarat perdagangan, dengan parameter penyesuaian dinamik yang membolehkan sistem menyesuaikan diri dengan perubahan keadaan pasaran, mempunyai kecergasan yang lebih kuat dan kebolehgunaan yang luas. Berbanding dengan strategi bergerak rata-rata yang beradaptasi yang lain, ia mempunyai realistik dan kestabilan yang lebih tinggi.
/*backtest
start: 2022-11-30 00:00:00
end: 2023-12-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © dongyun
//@version=4
strategy("自适应移动平均的MESA系统", overlay=true)
fastlimit = input(0.5,'')
slowlimit = input(0.05,'')
smooth = 0.0
detrender = 0.0
I1 = 0.0
Q1 = 0.0
JI = 0.0
JQ = 0.0
I2 = 0.0
Q2 = 0.0
Re = 0.0
Im = 0.0
period = 0.0
smoothperiod = 0.0
phase = 0.0
deltaphase = 0.0
alpha = 0.0
MAMA = 0.0
FAMA = 0.0
price = 0.0
price := (high + low)/2
PI = 2 * asin(1)
if (bar_index > 5)
smooth := (4*price + 3*price[1] + 2*price[2] + price[3])/10
detrender := (.0962*smooth + .5769*nz(smooth[2]) - .5769*nz(smooth[4]) - .0962*nz(smooth[6]))*(.075*nz(period[1]) + .54)
// compute InPhase and Quadrature components
Q1 := (.0962*detrender + .5769*nz(detrender[2]) - .5769*nz(detrender[4]) - .0962*nz(detrender[6]))*(.075*nz(period[1]) + .54)
I1 := nz(detrender[3])
// advance the pulse of i1 and q1 by 90 degrees
JI := (.0962*I1 + .5769*nz(I1[2]) - .5769*nz(I1[4]) - .0962*nz(I1[6]))*(.075*nz(period[1]) + .54)
JQ := (.0962*Q1 + .5769*nz(Q1[2]) - .5769*nz(Q1[4]) - .0962*nz(Q1[6]))*(.075*nz(period[1]) + .54)
//phase addition for 3-bar averaging
I2 := I1 - JQ
Q2 := Q1 + JI
//smooth the i and q components before applying
I2 := .2*I2 + .8*nz(I2[1])
Q2 := .2*Q2 + .8*nz(Q2[1])
// hymodyne discriminator
Re := I2*I2[1] + Q2*nz(Q2[1])
Im := I2*Q2[1] + Q2*nz(I2[1])
Re := .2*Re + .8*nz(Re[1])
Im := .2*Im + .8*nz(Im[1])
if (Im != 0 and Re != 0)
period := 2 * PI/atan(Im/Re)
if (period > 1.5 * nz(period[1]))
period := 1.5*nz(period[1])
if (period < .67*nz(period[1]))
period := .67*nz(period[1])
if (period < 6)
period := 6
if (period > 50)
period := 50
period := .2*period + .8*nz(period[1])
smoothperiod := .33*period + .67*nz(smoothperiod[1])
if (I1 != 0)
phase := (180/PI) * atan(Q1/I1)
deltaphase := nz(phase[1]) - phase
if (deltaphase < 1)
deltaphase := 1
alpha := fastlimit/deltaphase
if(alpha < slowlimit)
alpha := slowlimit
MAMA := alpha*price + (1 - alpha)*nz(MAMA[1])
FAMA := .5*alpha*MAMA + (1 - .5*alpha)*nz(FAMA[1])
if (FAMA < MAMA)
strategy.entry("Long", strategy.long)
else
if (FAMA > MAMA)
strategy.entry("Short", strategy.short)