
Bei dieser Strategie handelt es sich um ein mehrstufiges Indikator-Overlay-Handelssystem, das auf dem Relative Strength Index (RSI) basiert. Die Strategie arbeitet innerhalb eines bestimmten Handelszeitfensters, identifiziert Handelsmöglichkeiten durch überkaufte und überverkaufte Signale des RSI-Indikators und kombiniert sie mit einem dynamischen Positionsanpassungsmechanismus, um die Gesamtrendite zu optimieren, indem Positionen in Stapeln aufgebaut werden, wenn sich der Markt in die entgegengesetzte Richtung bewegt. Die Strategie verwendet eine Zielgewinnmethode basierend auf dem durchschnittlichen Einstiegspreis für das Stop-Profit-Management.
Die Strategie basiert im Wesentlichen auf den folgenden Kernkomponenten:
Diese Strategie bildet durch die Kombination des RSI-Indikators mit dem Batch-Eröffnungsmechanismus ein relativ vollständiges Handelssystem. Der Hauptvorteil der Strategie liegt in ihrem mehrstufigen Signalfiltermechanismus und ihrer flexiblen Positionsverwaltungsmethode, gleichzeitig müssen jedoch auch Aspekte wie Trendmarktrisiken und Parameteroptimierung berücksichtigt werden. Die Gesamtleistung der Strategie kann durch das Hinzufügen von Trendfiltern, die Optimierung von Stop-Loss-Mechanismen und andere Verbesserungen noch gesteigert werden.
/*backtest
start: 2024-12-10 00:00:00
end: 2025-01-08 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=6
strategy("TonyM RSI", overlay=true)
// Input Settings
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
startHour = input.int(2, "Start Hour", minval=0, maxval=23, group="Trading Window")
endHour = input.int(4, "End Hour", minval=0, maxval=23, group="Trading Window")
// RSI Calculation
change = ta.change(rsiSourceInput)
up = ta.rma(math.max(change, 0), rsiLengthInput)
down = ta.rma(-math.min(change, 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
// Time Filter
inTradingWindow = (hour >= startHour and hour < endHour)
// Strategy Settings
buyLevel = 30
sellLevel = 70
scaleDistance = 1.0 // Distance in points to add to the position
takeProfitPoints = 1.5 // Profit target from average price
initialQty = 1 // Initial trade size
scalingQty = 1 // Additional trade size for scaling
// Trade Logic
if inTradingWindow
// Entry Logic
if rsi <= buyLevel and strategy.position_size == 0
strategy.entry("Buy", strategy.long, qty=initialQty)
if rsi >= sellLevel and strategy.position_size == 0
strategy.entry("Sell", strategy.short, qty=initialQty)
// Scaling Logic
if strategy.position_size > 0 and close <= strategy.position_avg_price - scaleDistance
strategy.entry("Scale Buy", strategy.long, qty=scalingQty)
if strategy.position_size < 0 and close >= strategy.position_avg_price + scaleDistance
strategy.entry("Scale Sell", strategy.short, qty=scalingQty)
// Exit Logic (based on average price)
if strategy.position_size > 0
strategy.exit("Take Profit Long", "Buy", limit=strategy.position_avg_price + takeProfitPoints)
if strategy.position_size < 0
strategy.exit("Take Profit Short", "Sell", limit=strategy.position_avg_price - takeProfitPoints)
// Plot RSI
plot(rsi, "RSI", color=color.blue, linewidth=1)
rsiUpperBand = hline(70, "RSI Upper Band", color=color.red)
rsiLowerBand = hline(30, "RSI Lower Band", color=color.green)
fill(rsiUpperBand, rsiLowerBand, color=color.new(color.gray, 90))