
Die Mala Adaptive Moving Average Strategy ist eine quantitative Handelsstrategie, die auf John Ehlers MESA Adaptive Moving Average-Indikator basiert. Die Strategie nutzt Sinuswellen für Handelsentscheidungen, bei niedrigen Punkten kauft und bei hohen Punkten verkauft, indem sie die Sinuswellen an die verschiedenen Sorten und Marktumgebungen anpasst.
Die Adaptive Moving-Average-Strategie verwendet einen Positivwellen-Generator, um ein Handelssignal zu erzeugen. Die Positivwellen werden durch den Schatten eines drehenden Vektors (das heißt der Faktor) auf die Achse des Rings bestimmt. Der Vektor dreht sich um 360 Grad und beendet einen Zyklus.
Die Strategie berechnet zunächst die Preise mit einer Smooth- und De-Trend-Behandlung und berechnet dann die zwei Anteile der Positivwellen: die Gleichphasenanteile I und die Positivschnittanteile Q. Diese beiden Anteile werden durch Phasenverlagerung überlagert und überschaltet, um die endgültigen Re und Im zu erhalten. Re und Im spiegeln die Frequenzinformationen der Positivwellen wider und können durch atanIm/Re eine Periodenzeit abgeleitet werden.
Die Adaptive Moving Average Strategie hat folgende Vorteile:
Die Verwendung von Sinuswellen und Phasen als Handelssignale macht die Strategie robuster und unbeeinflusst von Zeitzonenwellenformen.
Zyklen und Parameter können sich dynamisch an Marktveränderungen anpassen und haben eine starke Anpassungsfähigkeit.
Die MAMA- und FAMA-Kurven sind nur auf die Eigenschaften des Preises selbst angewiesen, ohne Verzögerung, um die Trendwende rechtzeitig zu erfassen.
Die Sensitivität der Strategie kann durch die Einstellung von Parametern angepasst werden, um sie für Händler mit unterschiedlichen Stilen zu verwenden.
Die Strategie ist klar und einfach zu verstehen und zu modifizieren und eignet sich sowohl für die Forschung als auch für die Lehre.
Eine adaptive Moving Average-Strategie birgt auch folgende Risiken:
Aufgrund der Abhängigkeit von der Phasen- und Zyklusphase der Synchronschleife erzeugen sich falsche Signale bei außergewöhnlichen Preisverzerrungen.
Bei der Beurteilung des Zyklus wurde eine Härtegrenze gesetzt, die die Veränderung des Zyklus nicht glatt genug macht.
Positions- und Phaseneffekte lassen die Kurve in der Nähe von Schlüsselpunkten schwanken und können die besten Eingänge und Ausgänge verpassen.
Die Anpassungsfähigkeit von Parametern und Kurven nimmt ab, wenn die Marktfluktuation zunimmt.
Als Technikindikator ist die Strategie anfällig für falsche Durchbrüche und Fehlsignale in wichtigen Technikpositionen.
Diese Risiken können durch die Einstellung von glatteren Parametern, Filterung in Verbindung mit anderen Indikatoren und Anpassung der Haltungsgröße gemildert werden.
Die Adaptive Moving Average-Strategie kann in folgenden Bereichen optimiert werden:
Verbesserung der Berechnungsmethoden für die Zyklen und Parameter, um ihre Veränderungen natürlicher zu gestalten. Zum Beispiel können statistische Methoden eingeführt werden, um die Preise besser zu modellieren.
Die Filterung der Signale mit Indikatoren wie Schwankungsrate und Verkehrsmenge erhöht die Genauigkeit. Sie können auch die Reliabilität der Signale mit einem grundlegenden Verständnis kombiniert werden.
Optimierung der Parameter-Einstellungen und Gleitpunkt-Kontrolle, Senkung der Transaktionskosten und Steigerung der Systemstabilität.
Die Einführung von Methoden wie maschinellem Lernen und genetischen Algorithmen zur dynamischen Optimierung der Parameter, so dass die Parameter des Systems ständig weiterentwickelt und aktualisiert werden.
Setzen Sie verschiedene Entries und Exits, kombinieren Sie Trends und Umkehrsysteme, erstellen Sie Portfolios und verbessern Sie die nachhaltige Profitabilität.
Die Adaptive Moving Average Strategie nutzt die Synchronwellenanalyse, um Handelssignale zu erzeugen. Durch die dynamische Anpassung der Parameter kann das System sich selbständig an die Veränderungen der Marktumgebung anpassen. Es ist robuster und anwendbarer. Im Vergleich zu anderen Adaptive Moving Average Strategien hat es eine höhere Realisierbarkeit und Stabilität.
/*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)