Die EMA-RSI-Kreuzungsstrategie identifiziert potentielle Kauf- oder Verkaufssignale durch die Kombination von zwei technischen Indikatoren, dem EMA und dem RSI. Wenn EMA und RSI sich kreuzen, zeigt dies eine mögliche Veränderung der Marktdynamik an. Zum Beispiel, wenn eine EMA in einem kürzeren Zeitraum über einen längeren Zeitraum hindurchgeht und ein Threshold auf dem RSI liegt, zeigt dies einen möglichen Aufwärtstrend an, der als Bollenkreuz bezeichnet wird. Im Gegenteil, wenn eine EMA in einem kürzeren Zeitraum über einen längeren Zeitraum hindurchgeht und ein RSI in einem nächsten Threshold steht, zeigt dies einen möglichen Abwärtstrend an, der als Bollenkreuz bezeichnet wird.
Die EMA-RSI-Kreuzstrategie ist eine einfache und einfach zu verwendende Trend-Tracking-Strategie, die durch die Kombination von zwei-dimensionalen Indikatoren von Trend und Dynamik die Richtung des Marktes umfassender beurteilen kann. Gleichzeitig werden einige Filterbedingungen und dynamische Stop-Loss-Blocking-Methoden angewendet, um die Signalqualität und die Risikokontrolle zu verbessern. Die Strategie hat jedoch auch einige Einschränkungen, wie Probleme mit Indikatorenverzögerungen, häufigen Transaktionen.
/*backtest start: 2023-05-28 00:00:00 end: 2024-06-02 00:00:00 period: 1d basePeriod: 1h 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/ // © pritom980 //@version=5 strategy("EMA RSI Cross", overlay=true, margin_long=100, margin_short=100) // add RSI rsi_period = input.int(7,"RSI Period") rsi_val = ta.rsi(close[1],rsi_period) plot(rsi_val, color=color.blue, linewidth=2, title="RSI") buyRsiFlag = rsi_val < 20 sellRsiFlag = rsi_val > 80 // add EMA ema = ta.ema(close, 50) plot(ema, color=color.red, linewidth=2, title="EMA") // check buy // buy when the price is below ema buyFlag = ema > close ? true : false // sell when the price is above ema sellFlag = ema < close ? true : false bgcolor(buyFlag and buyRsiFlag ? color.green : na ) bgcolor(sellFlag and sellRsiFlag ? color.red : na ) // Check if current candle's body is bigger than previous candle's body and of opposite color is_body_bigger_long = math.abs(close - open) > math.abs(close[1] - open[1]) and close > open != close[1] > open[1] greenCandle = close > close[1] redCandle = close < close[1] // Mark the candle bgcolor(is_body_bigger_long and greenCandle and buyFlag ? color.blue : na, transp=70) // ENTRY --------------------- // Input for ATR period atr_length = input(14, title="ATR Length") // Calculate ATR atr_value = ta.atr(atr_length) // Calculate stop loss and take profit levels candleBody = math.abs(close-open) slDist = atr_value + candleBody stop_loss_long = close - slDist take_profit_long = close + (1.2 * slDist) stop_loss_short = high + slDist take_profit_short = high - (1.2 * slDist) // Entry and exit conditions if (buyFlag and buyRsiFlag and strategy.opentrades >= 0 and greenCandle) strategy.entry("Long", strategy.long) strategy.exit("Take Profit/Stop Loss", "Long", stop=stop_loss_long, limit=take_profit_long) // Entry and exit conditions if (sellFlag and sellRsiFlag and strategy.opentrades <= 0 and redCandle) strategy.entry("Short", strategy.short) strategy.exit("Take Profit/Stop Loss", "Short", stop=stop_loss_short, limit=take_profit_short)