Die Ressourcen sind geladen. Beförderung...

Trendumkehrstrategie auf der Grundlage gleitender Durchschnitte

Schriftsteller:ChaoZhang, Datum: 2024-02-21 17:03:31
Tags:

img

Übersicht

Der Hauptgedanke dieser Strategie ist es, kurzfristige Pullbacks entlang der Richtung des langfristigen Trends zu handeln. Insbesondere wird der 200-tägige einfache gleitende Durchschnitt verwendet, um die Richtung des langfristigen Trends zu bestimmen, und der 10-tägige einfache gleitende Durchschnitt wird verwendet, um die Richtung des kurzfristigen Trends zu bestimmen. Wenn der Preis über der 200-tägigen Linie liegt, ist es ein Bullenmarkt. Wenn der Preis unter der 200-tägigen Linie liegt, ist es ein Bärenmarkt. In einem Bullenmarkt gehen Sie lang, wenn der Preis auf die 10-tägige Linie fällt. In einem Bärenmarkt gehen Sie kurz, wenn der Preis auf die 10-tägige Linie steigt.

Strategie Logik

Diese Strategie verwendet den 200-Tage-einfachen gleitenden Durchschnitt und den 10-Tage-einfachen gleitenden Durchschnitt, um den Markttrend zu bestimmen. Wenn der Preis über die 200-Tage-Linie geht, gilt es als Eintritt in einen Bullenmarkt. Wenn der Preis unter die 200-Tage-Linie geht, gilt es als Eintritt in einen Bärenmarkt. In einem Bullenmarkt, wenn der Preis um die 10-Tage-Linie fällt, bedeutet es, eine kurzfristige Korrektur zu erleben. Zu diesem Zeitpunkt gehen Sie lang, mit dem Ziel der Fortsetzung des langfristigen bullischen Trends. In einem Bärenmarkt, wenn der Preis um die 10-Tage-Linie steigt, bedeutet es, einen kurzfristigen Rebound zu erleben. Zu diesem Zeitpunkt gehen Sie kurz, mit dem Ziel der Fortsetzung des langfristigen Bärentrends.

Speziell, wenn die folgenden Bedingungen erfüllt sind, gehen Sie lang, um den Markt zu betreten: Preis ist über der 200-Tage-Linie, Preis ist unter der 10-Tage-Linie, und es gab keine vorherige Position. Wenn die folgenden Bedingungen erfüllt sind, schließen Sie die Position, um den Markt zu verlassen: Preis ist über der 10-Tage-Linie, und es gab eine vorherige lange Position. Um riesige Verluste zu vermeiden, wird ein FAILSAFE-Stop-Loss eingestellt. Wenn der Rückschritt vom höchsten Punkt 10% übersteigt, direkt Stop-Loss zum Ausstieg.

Es kann gesehen werden, dass die Handelslogik dieser Strategie hauptsächlich auf dem goldenen Kreuz und dem Todeskreuz gleitender Durchschnitte basiert.

Analyse der Vorteile

Der größte Vorteil dieser Strategie ist die kostengünstige Trendverfolgung, um übermäßige Renditen zu erzielen.

  1. Die Verwendung einer Kombination aus langfristigen und kurzfristigen gleitenden Durchschnitten zur Bestimmung der Richtung der primären und sekundären Trends kann mittelfristige und langfristige Trendchancen effektiv einfangen und verhindern, dass man durch kurzfristige Marktbewegungen irregeführt wird.

  2. Durch den Einstieg auf Basis von kurzfristigen Pullbacks können die Einstiegskosten minimiert werden, um ein relativ hohes Gewinnpotenzial zu erzielen.

  3. Der FAILSAFE-Stop-Loss-Mechanismus kann einzelne Verluste effektiv kontrollieren, um das Konto zu schützen.

  4. Durch die Erlaubnis von Trend-Tracking-Ausgängen können mittelfristige und langfristige Trendchancen für Überzinsungen in Alpha-Rate voll ausgeschöpft werden.

  5. Die Einführung einer vollautomatisierten Handelsmethode vermeidet subjektive emotionale Auswirkungen und erleichtert die Umsetzung der Strategie.

Risikoanalyse

Die wichtigsten Risiken dieser Strategie sind:

  1. Die tatsächlichen Marktbedingungen können von den historischen Daten abweichen, was zu einer geringeren tatsächlichen Handelsleistung führt.

  2. Die Wahrscheinlichkeit, dass sich die Preise in der Nähe der gleitenden Durchschnitte umkehren, ist relativ groß, was leicht zu kleinen kumulierten Verlusten führen kann.

  3. Risiko einer Trendumkehr: Plötzliche Umkehrungen der mittelfristigen und langfristigen Trends sind üblich und können bei Positionen leicht zu relativ hohen Verlusten führen.

Die Gegenmaßnahmen sind:

  1. Erhöhung der Stichprobengröße und Verwendung mehrer historischer Daten für Robustheitstests, um zuverlässige Ergebnisse zu gewährleisten.

  2. Optimierung der Parameter durch Anpassung der Kombination von gleitenden Durchschnittssystemparametern zur Sicherstellung der Signalqualität.

  3. Sie müssen die Stop-Loss-Linien angemessen erweitern, um einige Kursrückschritte zu ermöglichen, um überempfindliche Stop-Losss zu vermeiden.

Optimierungsrichtlinien

Diese Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Zusätzliche Filterbedingungen wie Volumenfilterung, um unnötigen Handel durch falsche Ausbrüche wirksam zu reduzieren.

  2. Einbeziehung anderer Indikatoren wie KDJ und MACD zur Bildung von Kombinationssignalen zur Verbesserung der Qualität der Handelssignale.

  3. Verschiedene Halteperioden testen und Gewinn- und Stop-Loss-Strategien optimieren, um die Sharpe-Ratio weiter zu verbessern.

  4. Dynamische Anpassung der Parameter anhand der Marktbedingungen zur Bildung eines anpassungsfähigen Parameteroptimierungsmechanismus, um die Strategie robuster zu gestalten.

  5. Hinzufügen von algorithmischen Handelsmodulen, die maschinelles Lernen usw. verwenden, um automatisch Handelssignale zu generieren, um menschliches Eingreifen zu reduzieren.

Zusammenfassung

Die allgemeine Logik dieser Strategie ist klar und einfach umzusetzen, um mittel- und langfristige Trends kostengünstig zu verfolgen, um ein stetiges Alpha zu erreichen. Es besteht jedoch auch das Risiko, auf der falschen Seite des Trends gefangen zu werden, was eine weitere Optimierung zur Verbesserung der Robustheit erfordert. Im Allgemeinen ist diese Strategie aus einer Trendverfolgungsperspektive ausgelegt und lohnt sich für weitere Forschung und Anwendung.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © irfanp056
// @version=5

strategy("Simple Pullback Strategy", 
     overlay=true, 
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=1000, // 100% of balance invested on each trade
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.005) // Interactive Brokers rate

// Get user input
i_ma1           = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2           = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose    = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Get indicator values
ma1 = ta.sma(close, i_ma1)
ma2 = ta.sma(close, i_ma2)

// Check filter(s)
f_dateFilter = true

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
sellCondition   = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])
stopDistance    = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice       = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition   = strategy.position_size > 0 and stopDistance > i_stopPercent

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)

Mehr