
Die Strategie basiert auf dem Kreuzungssignal zweier Index-Moving Averages (EMA). Wenn eine kurzfristige EMA über eine langfristige EMA liegt, wird eine Position erhöht; wenn eine kurzfristige EMA unter einer langfristigen EMA liegt, wird eine Position abgebrochen. Die Strategie führt auch einen Stop-Loss-Mechanismus und einen Handelszeitfilter ein, um das Risiko zu kontrollieren und die Strategie zu optimieren.
Die Strategie verwendet zwei unterschiedliche Perioden von EMAs als Grundlage für Trends. Die EMA reagiert schneller auf Preisveränderungen als der einfache bewegliche Durchschnitt (SMA) und die Gewichtsverteilung ist vernünftiger. Wenn ein kurzer EMA eine langfristige EMA durchläuft, bedeutet dies, dass der Preis möglicherweise einen Aufwärtstrend bildet und dann mehr Positionen aufnimmt.
Zusätzlich zu dem Meselinie-Cross-Signal führt die Strategie einen Stop-Loss-Mechanismus ein. Einerseits wird ein fester Prozentsatz-Stop eingestellt, d.h. ein Zwangs-Planning, um den Verlust zu kontrollieren, wenn der Preis gegenüber dem Eröffnungspreis über einen bestimmten Prozentsatz fällt. Andererseits kann auch ein Planning ausgewählt werden, wenn der Preis unter dem vorherigen K-Line-Knallpreis liegt. Beide Stop-Loss-Methoden können die Strategie effektiv kontrollieren.
Darüber hinaus wurde ein Zeitfilter für den Handel eingeführt. Der Benutzer kann den Start- und Endzeitpunkt des Handels selbst festlegen, um den Handel in bestimmten Zeitabschnitten (z. B. an Feiertagen, außerhalb des Handels) zu vermeiden.
Einfach und einfach zu bedienen: Die Strategie ist logisch klar, nur zwei EMAs als Handelssignale verwendet, leicht zu verstehen und umzusetzen.
Trendverfolgung: Die EMA ist in der Lage, schnell auf Preisänderungen zu reagieren, was es der Strategie ermöglicht, die Entstehung und Beendigung von Trends rechtzeitig zu erfassen und so die Vorteile von Trendverfolgung zu erzielen.
Risikokontrolle: Einführung eines festen Prozentsatzes für Stop-Losses und Stop-Losses basierend auf dem Schlusskurs der vorherigen K-Linie, um Einzelschäden und Rücknahmen effektiv zu kontrollieren.
Parameterflexibilität: Der Benutzer kann die EMA-Zyklus, den Stop-Loss-Prozentsatz, die Verwendung des Stop-Loss-Preises der vorherigen K-Linie, die Handelszeiträume usw. anpassen, um die Strategie zu optimieren.
Parameteroptimierungsrisiken: Die Performance der Strategie hängt von der Auswahl von Parametern wie EMA-Zyklen und Stop-Loss-Prozentsätzen ab. Unpassende Parameter können zu einer schlechten Strategieperformance führen. Daher müssen Parameteroptimierungen und Rückprüfungen anhand historischer Daten durchgeführt werden, um die optimalsten Parameter auszuwählen.
Marktrisiko: Diese Strategie gilt hauptsächlich für trendige Märkte. Häufige Transaktionen können zu starken Rückzügen führen, wenn der Markt in Schwung ist oder sich der Trend umkehrt. Daher ist es notwendig, die Strategieparameter an die Marktlage anzupassen oder die Strategie einzustellen.
Kostenrisiko: Diese Strategie kann zu einer höheren Anzahl von Transaktionen führen, was zu höheren Transaktionskosten führt. Daher ist es notwendig, die richtigen Handelsmarken und Handelsmengen zu wählen und die Kosten pro Transaktion zu kontrollieren.
Einführung von mehr technischen Indikatoren: Auf der Grundlage von EMA-Kreuzsignalen werden andere technische Indikatoren wie RSI, MACD usw. eingeführt, um ein Mehrfaktor-Handelssignal zu bilden und die Trendgenauigkeit zu verbessern.
Dynamische Stop-Loss: Anpassung der Stop-Loss-Position an die Marktschwankungen, ATR und andere Indikatoren, um die Gewinne und Verluste der Stop-Loss-Position so gering wie möglich zu halten, während die Risiken kontrolliert werden.
Positionsmanagement: Die Positionsgröße wird dynamisch angepasst, je nach der Stärke der Markttrends, der Abweichung der Preise von der Durchschnittslinie usw. Die Positionsgröße wird erhöht, wenn die Trends stark sind, und die Positionen werden reduziert, wenn die Trends schwächer oder unklar sind.
Optimierung durch maschinelles Lernen: Die Optimierung der Strategieparameter mit Hilfe von maschinellen Lernalgorithmen, die automatisch die optimale Kombination von Parametern auswählen, die Strategieerträge erhöhen und das Risiko von Überpassung verringern.
Die Doppel-Einheitliche-Kreuz-Quantifizierung-Strategie, die den Trend durch die Kreuzung der beiden EMA-Signale beurteilt und gleichzeitig einen Stop-Loss-Mechanismus und einen Handelszeit-Filter einführt, erzielt eine gute Balance zwischen Trend-Tracking-Fähigkeit und Risikokontrolle. Obwohl die Strategie einfach in der Logik ist, können nach vernünftiger Parameter-Optimierung und Risikokontrolle stabile Erträge in trendigen Märkten erzielt werden. In Zukunft kann die Strategie verbessert werden, indem mehr technische Kennzahlen, dynamische Stop-Loss-Positions, Management und Machine-Learning-Optimierung eingeführt werden, um die Strategie noch weiter zu verbessern.
/*backtest
start: 2023-03-02 00:00:00
end: 2024-03-07 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/
// © ZenAndTheArtOfTrading / www.PineScriptMastery.com
// @version=5
strategy("EMA strategy",
overlay=true,
initial_capital=50000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100, // 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.ema(close, i_ma1)
ma2 = ta.ema(close, i_ma2)
// Check filter(s)
f_dateFilter = true
// Check buy/sell conditions
var float buyPrice = 0
buyCondition = close > ma1 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)