Der McGinley MA-Indikator ist eine verbesserte Version von gleitenden Durchschnitten, die die Preisentwicklung besser verfolgen kann.
Die Strategie verwendet hauptsächlich zwei gleitende Durchschnitte, einen 21-Perioden-EMA und einen 42-Perioden-EMA. Wenn der kürzere MA über den längeren MA überschreitet, gilt er als Kaufsignal. Wenn der kürzere MA unter den längeren MA überschreitet, gilt er als Verkaufssignal.
Darüber hinaus erfordert die Strategie auch, dass der Preis über dem McGinley Dynamic MA liegt und über dem kürzeren MA bricht, um ein Kaufsignal zu generieren. Für das Verkaufssignal muss der Preis auch unter dem McGinley MA liegen und unter dem kürzeren MA bricht.
Insbesondere wird das Kaufsignal ausgelöst, wenn: der kürzere MA über den längeren MA überschreitet, der Schlusskurs über den McGinley MA, der Schlusskurs unter den kürzeren MA fällt. Das Verkaufssignal wird ausgelöst, wenn: der kürzere MA unter den längeren MA überschreitet, der Schlusskurs unter dem McGinley MA, der Schlusskurs über den kürzeren MA fällt.
Der McGinley MA wird berechnet als: MDIt = MDIt-1 + (Close - MDIt-1) / Max(k * Periode * (Close / MDIt-1) ^ 4, 1). Wo MDIt der aktuelle Wert ist, MDIt-1 der vorherige Wert, Close der Schlusskurs, k die Glättungskonstante und Periode der Berechnungszeitraum. Diese Formel ermöglicht es dem MA, Preisänderungen in Echtzeit zu verfolgen.
McGinley MA verbessert die Verzögerung der traditionellen MA und kann schnell Trendveränderungen erfassen.
Die Verwendung von doppelten MAs zur Erzeugung von Signalen kann falsche Ausbrüche effektiv filtern.
Durch das Hinzufügen eines Preises über/unter der McGinley MA wird ein übermäßiger Handel auf den Märkten mit Bandbreiten vermieden.
Die Verwendung der EMA macht die MA empfindlicher auf die jüngsten Preisänderungen.
Whipsaws können in seitlichen Märkten falsche Signale erzeugen, was zu Verlusten führt.
Es kann vorkommen, dass durch die Öffnung der Lücken nicht rechtzeitig die Einreise möglich ist.
Eine unzureichende Einstellung der Parameter kann die Strategieleistung beeinträchtigen.
Lange Haltezeiten bergen systemische Risiken.
Versuche verschiedene MA-Längen, um optimale Kombinationen zu finden.
Hinzufügen anderer Indikatoren wie KD, MACD zur Verbesserung der Ein-/Ausfahrtszeit.
Anpassung des k-Wertes anhand verschiedener Produkte und Märkte zur Optimierung der McGinley MA-Berechnung.
Einbeziehung von Volatilitätsmaßnahmen für die dynamische Positionsgröße und Risikokontrolle.
Setzen Sie einen Stop-Loss, um Verluste zu kontrollieren.
Diese Strategie nutzt die Schnellverfolgungsfähigkeit von McGinley MA in Kombination mit Preis-Breakout-Signalen, um Trends effektiv zu verfolgen und Positionen zu wechseln, wenn sich der Trend umkehrt. Im Vergleich zu traditionellen Dual-MA-Strategien kann sie Trendänderungen schneller erfassen.
/*backtest start: 2022-11-07 00:00:00 end: 2023-11-13 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/ // © LucasZancheta //@version=4 strategy(shorttitle="Maguila", title="McGinley Dynamic Indicator", overlay=true) //Médias móveis MA1Period=input(21, title="MA1") MA2Period=input(42, title="MA2") MA1 = ema(close, MA1Period) MA2 = ema(close, MA2Period) aboveAverage = MA1 >= MA2 hunderAverage = MA2 >= MA1 //Período do backtest startDate = input(title="Start Date", type=input.integer, defval=28, minval=1, maxval=31) startMonth = input(title="Start Month", type=input.integer, defval=5, minval=1, maxval=12) startYear = input(title="Start Year", type=input.integer, defval=2019, minval=1800, maxval=2100) endDate = input(title="End Date", type=input.integer, defval=28, minval=1, maxval=31) endMonth = input(title="End Month", type=input.integer, defval=5, minval=1, maxval=12) endYear = input(title="End Year", type=input.integer, defval=2030, minval=1800, maxval=2100) //Verifica se o candle está dentro do período do backtest inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0)) //Número de periodos da média móvel period = input(title="Períodos", type=input.integer, defval=20) //Constante K (0.6) k = input(title="Constante K", type=input.float, defval=0.6) //Preço de fechamento closePrice = input(title="Preço", type=input.source, defval=close) mdi = 0.0 //Fórmula de McGinley mdi := na(mdi[1]) ? closePrice : mdi[1] + (closePrice - mdi[1]) / max((k * period * pow(closePrice / mdi[1], 4)), 1) //Regra de coloração mdiColor = closePrice > mdi ? color.green : closePrice < mdi ? color.red : color.black //Inserindo as informações no gráfico plot(MA1, color=color.blue, linewidth=2) plot(MA2, color=color.purple, linewidth=2) barcolor(mdiColor) //Estratégia buySignal = aboveAverage and closePrice > mdi and crossunder(low, MA1) and close > MA1 buyLoss = closePrice < mdi and close < MA1 and close < MA2 if (inDateRange) strategy.entry("Compra", strategy.long, qty=1, when= buySignal) strategy.exit("Gain da compra", "Compra", qty=1, profit=20) strategy.close("Compra", qty=1, when= buyLoss, comment="Loss na operação") sellSignal = hunderAverage and closePrice < mdi and crossover(high, MA1) and close < MA1 sellLoss = closePrice > mdi and close > MA1 and close > MA2 if (inDateRange) strategy.entry("Venda", strategy.short, qty=1, when= sellSignal) strategy.exit("Gain da venda", "Venda", qty=1, profit=20) strategy.close("Venda", qty=1, when= sellLoss, comment="Loss na operação") if (not inDateRange) strategy.close_all()