Die Bybit EMA RSI Trend-Following und Momentum Strategie ist eine quantitative Handelsstrategie, die exponentielle gleitende Durchschnitte (EMA) und den Relative Strength Index (RSI) kombiniert. Die Strategie verwendet zwei EMA mit verschiedenen Perioden, um Markttrends zu bestimmen, und den RSI-Indikator, um die Gültigkeit der Trends zu bestätigen. Wenn die schnelle EMA über die langsame EMA überschreitet und der RSI unter einer bestimmten unteren Schwelle liegt, erzeugt die Strategie ein langes Signal. Umgekehrt, wenn die schnelle EMA unter die langsame EMA überschreitet und der RSI über eine bestimmte obere Schwelle liegt, erzeugt die Strategie ein kurzes Signal. Die Strategie umfasst auch verschiedene Provisionsprozentsätze basierend auf dem Bybit-Konto und integrierte Gewinn- und Stop-Loss-Funktionen, um das Risiko effektiv zu managen.
Die Bybit EMA RSI Trend-Following und Momentum Strategie ist eine quantitative Handelsstrategie, die Trend-Following und Momentum-Indikatoren kombiniert. Durch die Verwendung von EMAs und RSI zusammen kann sie effektiv Markttrends erfassen. Die Strategie umfasst integrierte Take-Profit- und Stop-Loss-Funktionen und setzt Provisionsprozentsätze basierend auf dem Bybit-Konto-Niveau, wodurch das Risiko effektiv verwaltet und sich an verschiedene Benutzer-Handelsbedingungen anpasst. Allerdings gibt es noch Raum für Optimierungen in der Strategie, wie Parameteroptimierung, Einführung anderer technischer Indikatoren und Optimierung von Take-Profit- und Stop-Loss-Einstellungen.
/*backtest start: 2024-03-21 00:00:00 end: 2024-03-28 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @BryanAaron //@version=5 strategy("Bybit EMA RSI Strategy", overlay=true) // Input parameters fastLength = input(90, title="Fast EMA Length") slowLength = input(300, title="Slow EMA Length") rsiLength = input(5, title="RSI Length") rsiUpperThreshold = input(85, title="RSI Upper Threshold") rsiLowerThreshold = input(45, title="RSI Lower Threshold") takeProfitPerc = input(5, title="Take Profit %") stopLossPerc = input(3, title="Stop Loss %") bybitAccountLevel = input.string("VIP 0", title="Bybit Account Level", options=["VIP 0", "VIP 1", "VIP 2", "VIP 3", "VIP 4"]) // Calculate moving averages fastMA = ta.ema(close, fastLength) slowMA = ta.ema(close, slowLength) // Calculate RSI rsi = ta.rsi(close, rsiLength) // Trading conditions longCondition = (fastMA > slowMA) and (rsi < rsiLowerThreshold) shortCondition = (fastMA < slowMA) and (rsi > rsiUpperThreshold) // Set commission based on Bybit account level commissionPerc = switch bybitAccountLevel "VIP 0" => 0.075 "VIP 1" => 0.065 "VIP 2" => 0.055 "VIP 3" => 0.045 "VIP 4" => 0.035 => 0.075 // Calculate entry prices with commission var float longEntryPrice = na var float shortEntryPrice = na longEntryPriceWithCommission = close * (1 + commissionPerc / 100) shortEntryPriceWithCommission = close * (1 - commissionPerc / 100) // Calculate take profit and stop loss prices takeProfitPrice(entryPrice) => entryPrice * (1 + takeProfitPerc / 100) stopLossPrice(entryPrice) => entryPrice * (1 - stopLossPerc / 100) // Plot entry prices plotchar(longCondition, title="Long Entry Price", char="LE", location=location.belowbar, color=color.green) plotchar(shortCondition, title="Short Entry Price", char="SE", location=location.abovebar, color=color.red) // Draw position on the chart longColor = color.green shortColor = color.red profitColor = color.new(color.green, 80) lossColor = color.new(color.red, 80) plotshape(longCondition and strategy.position_size > 0, title="Long Position", text="Long", location=location.belowbar, style=shape.labelup, size=size.small, color=longColor, textcolor=color.white) plotshape(shortCondition and strategy.position_size < 0, title="Short Position", text="Short", location=location.abovebar, style=shape.labeldown, size=size.small, color=shortColor, textcolor=color.white) if (strategy.position_size > 0) line.new(bar_index, longEntryPrice, bar_index + 1, longEntryPrice, color=longColor, width=2) longProfitLine = line.new(bar_index, takeProfitPrice(longEntryPrice), bar_index + 1, takeProfitPrice(longEntryPrice), color=profitColor, width=1) longLossLine = line.new(bar_index, stopLossPrice(longEntryPrice), bar_index + 1, stopLossPrice(longEntryPrice), color=lossColor, width=1) else if (strategy.position_size < 0) line.new(bar_index, shortEntryPrice, bar_index + 1, shortEntryPrice, color=shortColor, width=2) shortProfitLine = line.new(bar_index, stopLossPrice(shortEntryPrice), bar_index + 1, stopLossPrice(shortEntryPrice), color=profitColor, width=1) shortLossLine = line.new(bar_index, takeProfitPrice(shortEntryPrice), bar_index + 1, takeProfitPrice(shortEntryPrice), color=lossColor, width=1) // Entry if (longCondition) strategy.entry("Long", strategy.long) longEntryPrice := longEntryPriceWithCommission else if (shortCondition) strategy.entry("Short", strategy.short) shortEntryPrice := shortEntryPriceWithCommission