
Die Strategie ist eine Kombinationsstrategie, die RSI, MACD und Moving Averages verwendet. Sie kombiniert die Überkauf-Überverkauf-Signale des RSI, die Empfindlichkeit des MACD und die Indikatorwirkung des Moving Averages, um den Zeitpunkt des Markteintritts zu bestimmen.
Die Strategie basiert auf folgenden vier Kriterien:
Die Strategie platziert einen Stop-Loss, wenn zwei der folgenden Bedingungen erfüllt sind:
Auf diese Weise wird die Strategie bei einem Ertragsrückzug zeitnah eingestellt, um größere Verluste zu vermeiden.
Der größte Vorteil dieser Strategie liegt in der Kombination von Indikatoren, die die Vorteile der einzelnen Indikatoren ausüben, nämlich:
Es gibt zwei große Risiken bei dieser Strategie:
Das größte Risiko bei Trendstrategien wie beispielsweise Moving Averages besteht in einem größeren Rückzug, der durch eine Marktumkehr verursacht wird. Der Rückzug kann durch eine Verringerung der Positionsgröße und die Stop-Loss-Einstellungen aktiv kontrolliert werden.
Die Parameteroptimierung ist sehr schwierig. Die Einstellung und Optimierung der Parameter einer Mehrindikator-Kombinationsstrategie ist sehr schwierig. Parameteroptimierungsmethoden wie Schritt-und-Schritt-Prozesse und genetische Algorithmen können verwendet werden, um die optimalen Parameter zu ermitteln.
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Hinzufügen von zusätzlichen Bedingungen zur weiteren Filterung falscher Signale, z. B. in Verbindung mit Handelsvolumen- und Volatilitätsindikatoren.
Verschiedene Sorten mit unterschiedlichen Parameter-Einstellungen testen. Parameter für mehr Sorten anpassen.
Optimieren Sie die Einstellung der Moving Average-Parameter. Testen Sie die Unterschiede zwischen den Parametern der verschiedenen Längen.
Die Studie verwendet einen adaptiven Moving Average.
Diese Strategie ist eine typische Optimierung der Moving Average- und Trend-Tracking-Strategie. Sie nutzt die Vorzüge mehrerer Mainstream-Indikatoren wie MACD, RSI und andere und ist einzigartig in der Bestimmung der Markteintrittszeit und des Stop-Losses. Als nächstes können Sie in verschiedenen Bereichen wie Parameteroptimierung und Risikokontrolle verbessern, um die Strategie-Parameter robuster und an mehr Sorten anzupassen, um eine höhere Stabilität zu erzielen.
/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Improved RSI MACD Strategy with Moving Averages", overlay=true)
// Inputs
src = input(close, title="RSI Source")
// RSI Settings
lengthRSI = input.int(14, minval=1)
// Stop Loss Settings
stopLossPct = input.float(0.09, title="Stop Loss Percentage")
takeProfitPct = input.float(0.15, title="Take Profit Percentage")
// MACD Settings
fastlen = input(12)
slowlen = input(26)
siglen = input(9)
// Strategy Settings
longEntry = input(0, title="Long Entry Level")
exitLevel = input(0, title="Exit Level")
// EMA Settings
emaShortLength = input(8, title="Short EMA Length")
emaLongLength = input(21, title="Long EMA Length")
atrMultiplier = input.float(2, title="atrMultiplier")
atrLength = input.int(20, title="atrLength")
// Indicators
rsi1 = ta.rsi(src, lengthRSI)
[macd, signal, hist] = ta.macd(src, fastlen, slowlen, siglen)
// Calculate EMAs
emaShort = ta.ema(src, emaShortLength)
emaLong = ta.ema(src, emaLongLength)
// Calculate ATR
atr = ta.atr(atrLength)
// Variables
var bool canEnterLong = na
// Strategy conditions
longCondition = hist > longEntry and rsi1 > 50 and emaShort > emaLong and close > emaLong + atrMultiplier * atr
// Entries and Exits
if hist < exitLevel and emaShort < emaLong
canEnterLong := true
strategy.close("Long")
// Store last entry price
var lastEntryPrice = float(na)
var lastEntryPrice2 = float(na)
if longCondition
strategy.entry("Long", strategy.long)
canEnterLong := false
lastEntryPrice := close
if lastEntryPrice < close
lastEntryPrice := close
// Calculate Stop Loss and Take Profit Levels based on last entry price
stopLossLevel = lastEntryPrice * (1 - stopLossPct)
// Check for stop loss and take profit levels and close position if triggered
if (strategy.position_size > 0)
last_buy = strategy.opentrades[0]
if (close < stopLossLevel)
strategy.close("Long", comment="Stop Loss Triggered")
if (close * (1 - takeProfitPct) > strategy.opentrades.entry_price(strategy.opentrades - 1) )
strategy.close("Long", comment="Take Profit Triggered")