Diese Strategie kombiniert den MACD-Momentumsindikator mit dem RSI-Overbought/Oversold-Indikator. Wenn der MACD nach oben oder unten kreuzt, überprüft er, ob der RSI auch die entsprechende Bottoming/Topping-Umkehrung über den Lookback-Zeitraum abschließt, um zuverlässigere Handelssignale zu generieren.
Berechnen Sie MACD DIFF, DEA und Histogramm. Das Crossover von DIFF über DEA gibt ein bullisches Crossover-Signal und das Crossover darunter gibt ein Todes-Cross-Signal.
Berechnen Sie den RSI, um Überverkauf und Überkauf zu identifizieren.
Wenn der MACD-Bullish-Crossover stattfindet, wird ein langes Signal erzeugt, wenn der RSI innerhalb des Lookback-Fensters von Überverkäufen zurückgeschlagen hat.
Stop-Loss-Einstellung nach dem Eintritt in die Risikokontrolle.
Der MACD identifiziert tendenzbedingte Veränderungen auf empfindliche Weise. Der RSI beurteilt effektiv Überkauf-/Überverkaufswerte.
Wenn sowohl MACD- als auch RSI-Signale benötigt werden, werden falsche Signale ausfiltert.
Das Rückblickfenster verbessert die Signalzuverlässigkeit.
Stop-Loss hilft beim Risikomanagement.
Ein Verzögerung des MACD und des RSI kann zu fehlenden optimalen Einträgen führen.
Eine geringere Wahrscheinlichkeit eines Dual-Indicator-Signals bedeutet weniger Trades.
Eine Überlegung über eine größere Trendrichtung birgt die Gefahr, dass man in die Falle gerät.
Eine schlechte Einstellung des Stoppverlustes kann zu breit oder zu eng sein.
Mögliche Lösungen:
MACD- und RSI-Parameter anpassen, um die Verzögerung zu verringern.
Erweitern Sie den Schwellenbereich der Indikatoren, um mehr Signale zu liefern.
Hinzufügen eines Trendfilters, um Gegentrend-Einträge zu vermeiden.
Versuche verschiedene Stop-Loss-Parameter für optimale Werte.
Testen Sie SMA und andere gleitende Durchschnitte.
Für flexible Stopps hinzufügen.
Einbeziehen Sie die Trendstärke, um die Qualität des Eingangs zu beurteilen.
Verwenden Sie maschinelles Lernen, um Indikatorbewegungen vorherzusagen.
Kombinieren Sie mehr Faktoren, um den Einstiegszeitplan zu optimieren.
Diese Strategie filtert nach zuverlässigen Umkehrsignalen mit koordinierten MACD und RSI. Die Logik ist klar und die Parameter flexibel für Verbesserungen wie Indikatorauswahl, Trendfilter, Stop-Loss-Techniken usw., um mehr Trades zu erwerben und gleichzeitig Stabilität zu erhalten, aber Überoptimierungsrisiken müssen vermieden werden.
/*backtest start: 2023-08-24 00:00:00 end: 2023-09-23 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //based on Range Strat - MACD/RSI // strategy("MACD/RSI - edited", // overlay=true, // default_qty_type=strategy.percent_of_equity, // default_qty_value=10, precision=2, initial_capital=100000, // pyramiding=2, // commission_value=0.05) //Backtest date range StartDate = input(timestamp("13 Jun 2022"), title="Start Date") EndDate = input(timestamp("13 Jun 2024"), title="Start Date") inDateRange = true // RSI Input Settings rsisrc = input(title="RSI Source", defval=close, group="RSI Settings") length = input(title="Length", defval=14, group="RSI Settings" ) overSold = input(title="Over Sold Threshold", defval=30, group="RSI Settings" ) overBought = input(title="Over Bought Threshold", defval=70, group="RSI Settings" ) rsi_lookback = input(title="RSI cross lookback period", defval=7, group="RSI Settings") // Calculating RSI vrsi = ta.rsi(rsisrc, length) co = ta.crossover(vrsi, overSold) cu = ta.crossunder(vrsi, overBought) // Function looking for a happened condition during lookback period f_somethingHappened(_cond, _lookback) => bool _crossed = false for i = 1 to _lookback if _cond[i] _crossed := true _crossed coCheck = f_somethingHappened(co, rsi_lookback) cuCheck = f_somethingHappened(cu, rsi_lookback) // MACD Input Settings macdsrc = input(title="MACD Source", defval=close, group="MACD Settings") fast_length = input(title="Fast Length", defval=12, group="MACD Settings") slow_length = input(title="Slow Length", defval=26, group="MACD Settings") signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9, group="MACD Settings") sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings") sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings") // Calculating MACD fast_ma = sma_source == "SMA" ? ta.sma(macdsrc, fast_length) : ta.ema(macdsrc, fast_length) slow_ma = sma_source == "SMA" ? ta.sma(macdsrc, slow_length) : ta.ema(macdsrc, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length) delta = macd - signal MACDcrossover = ta.crossover(delta, 0) MACDcrossunder = ta.crossunder(delta, 0) // Stop Loss Input Settings longLossPerc = input(title="Long Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01 shortLossPerc = input(title="Short Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01 // Calculating Stop Loss longStopPrice = strategy.position_avg_price * (1 - longLossPerc) shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc) // Strategy Entry if (not na(vrsi)) if (inDateRange and MACDcrossover and coCheck) strategy.entry("LONG", strategy.long, comment="LONG") if (inDateRange and MACDcrossunder and cuCheck) strategy.entry("SHORT", strategy.short, comment="SHORT") // Submit exit orders based on calculated stop loss price if (strategy.position_size > 0) strategy.exit(id="LONG STOP", stop=longStopPrice) if (strategy.position_size < 0) strategy.exit(id="SHORT STOP", stop=shortStopPrice)