Strategie zur Umkehrung des doppelten gleitenden Durchschnitts

Schriftsteller:ChaoZhang, Datum: 2023-11-22 10:07:19
Tags:

img

Übersicht

Die Hauptidee dieser Strategie besteht darin, die Überschneidung von schnellen und langsamen gleitenden Durchschnitten zu nutzen, um Markttrends zu beurteilen und Positionen zu ergreifen, wenn sich kurz- und langfristige gleitende Durchschnitte umkehren, um den Effekt der Trendverfolgung zu erzielen.

Strategie Logik

  1. Festlegen von kurzfristigen gleitenden Durchschnittsperioden shortma (Standstillstand von 7 Tagen) und langfristigen gleitenden Durchschnittsperioden longma (Standstillstand von 77 Tagen)
  2. Wenn der kurze MA den langen MA überschreitet, wird er als Kaufsignal und Rekordbar seit mabuy bestimmt. Der lange MA impliziert, dass ein Aufwärtstrend begonnen hat. Wenn der kurze MA unter den langen MA überschreitet, wird er als Verkaufssignal und Rekordbar seit masell bestimmt. Der lange MA impliziert, dass der Aufwärtstrend beendet ist.
  3. Je mehr Bars seit dem Abstieg des kurzen MA, desto länger hält sich der Aufwärtstrend an. Je mehr Bars seit dem Abstieg des kurzen MA, desto stärker ist das Umkehrsignal.
  4. Wenn der Barssinn für das Verkaufssignal größer ist als der Barssinn für das Kaufsignal, wird ein Kaufsignal ausgelöst.
  5. Im Wesentlichen handelt es sich um eine doppelte MA-Umkehrstrategie, bei der umgekehrte Umkehrungen von schnellen und langsamen MA verwendet werden, um Trendumkehrpunkte zu erkennen.

Vorteile

  1. Benutzt doppelte MAs, um einige falsche Signale zu filtern.
  2. Hinzugefügt, da der Vergleich falsche Brechungen und nahe Preisumkehrungen vermeidet
  3. Einfach zu verstehen und umzusetzen
  4. Anpassbare MA-Parameter für verschiedene Zeiträume und Märkte

Risiken

  1. Bei Dual-MA-Strategien treten häufiger Handelssignale auf
  2. Eine schlechte Abstimmung der MA-Parameter kann längere Trends verpassen
  3. Stop-Loss bei Ausfall von langfristigen MAs kann weit entfernt sein, was zu größeren Abzügen führt
  4. Kann Spulen und Schwingungen nicht effektiv filtern

Anweisungen zur Verbesserung

  1. Hinzufügen anderer Indikatoren zur Vermeidung von Whipsaws auf verschiedenen Märkten
  2. Hinzufügen von Stop-Loss-Mechanismen
  3. Optimieren von MA-Parameterkombinationen
  4. Dynamische Abstimmung der MA-Parameter auf Basis des Marktzyklus

Zusammenfassung

Die Strategie hat insgesamt eine klare, leicht verständliche Logik, wobei schnelle und langsame MA-Umkehrungen verwendet werden, um Trendumkehrpunkte zu erkennen. Theoretisch kann sie Trends effektiv verfolgen.


/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Up Down", "Up Down", precision = 6, pyramiding = 1, default_qty_type = strategy.percent_of_equity, default_qty_value = 99, commission_type = strategy.commission.percent, commission_value = 0.0, initial_capital = 1000, overlay = true)

buy = close > open and open > close[1]
sell = close < open and open < close[1]

longma = input(77,"Long MA Input")
shortma = input(7,"Short MA Input")
long = sma(close,longma)
short = sma(close, shortma)
mabuy = crossover(short,long) or buy and short > long
masell = crossunder(short,long) or sell and short > long

num_bars_buy = barssince(mabuy)
num_bars_sell = barssince(masell)
//plot(num_bars_buy, color = teal)
//plot(num_bars_sell, color = orange)

xbuy = crossover(num_bars_sell, num_bars_buy)
xsell = crossunder(num_bars_sell, num_bars_buy)
plotshape(xbuy,"Buy Up Arrow", shape.triangleup, location.belowbar, white, size = size.tiny)
plotshape(xsell,"Sell Down Arrow", shape.triangledown, location.abovebar, white, size = size.tiny)
plot(long,"Long MA", fuchsia, 2)

// Component Code Start
// Example usage:
// if testPeriod()
//   strategy.entry("LE", strategy.long)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(7, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

if testPeriod()
    strategy.entry("buy", true, when = xbuy, limit = close)
    strategy.close("buy", when = xsell)


Mehr