Dies ist eine quantitative Handelsstrategie, die doppelten gleitenden Durchschnitts-Crossover, RSI-Überkauf/Überverkaufsbedingungen und Risiko-Rendite-Ratio-Management kombiniert. Die Strategie bestimmt die Markttrendrichtung durch kurzfristige und langfristige gleitende Durchschnitts-Crossovers, während sie RSI-Indikatoren verwendet, um Überkauf/Überverkaufszonen für eine genauere Handelssignalfilterung zu identifizieren. Sie integriert auch ATR-basierte dynamische Stop-Loss-Einstellungen und ein festes Risiko-Rendite-Ratio-Gewinnzielmanagementsystem.
Die Strategie verwendet 9-Tage- und 21-Tage- gleitende Durchschnitte als Grundlage für die Trendbestimmung, wobei der RSI-Indikator überkaufte/überverkaufte Zonen (35/65) zur Signalbestätigung verwendet. Lange Eintrittsbedingungen erfordern den kurzfristigen MA über dem langfristigen MA und RSI im überverkauften Gebiet (unter 35); kurzer Eintritt erfordert den kurzfristigen MA unter dem langfristigen MA und RSI im überkauften Gebiet (über 65). Die Strategie verwendet den 1,5-fachen ATR-Wert für die Stop-Loss-Distanz und berechnet automatisch Gewinnziele auf der Grundlage eines 2: 1-Risiko-Rendite-Verhältnisses.
Diese Strategie baut durch die Koordinierung mehrerer technischer Indikatoren ein relativ vollständiges Handelssystem auf. Es konzentriert sich nicht nur auf die Eintrittssignalqualität, sondern auch auf das Risikomanagement und die Gewinnziele. Während es Bereiche zur Optimierung gibt, ist das Gesamtrahmendesign mit gutem praktischem Wert und Raum für Erweiterung angemessen. Das modulare Design bietet auch Bequemlichkeit für nachfolgende Optimierungen.
/*backtest start: 2024-10-01 00:00:00 end: 2024-10-31 23:59:59 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("JakeJohn", overlay=true) // Input parameters smaShortLength = input(9, title="Short SMA Length") smaLongLength = input(21, title="Long SMA Length") lengthRSI = input(14, title="RSI Length") rsiOverbought = input(65, title="RSI Overbought Level") rsiOversold = input(35, title="RSI Oversold Level") riskRewardRatio = input(2, title="Risk/Reward Ratio") // 2:1 atrMultiplier = input(1.5, title="ATR Multiplier") // Multiplier for ATR to set stop loss // Calculate indicators smaShort = ta.sma(close, smaShortLength) smaLong = ta.sma(close, smaLongLength) rsi = ta.rsi(close, lengthRSI) atr = ta.atr(14) // Entry conditions longCondition = (smaShort > smaLong) and (rsi < rsiOversold) // Buy when short SMA is above long SMA and RSI is oversold shortCondition = (smaShort < smaLong) and (rsi > rsiOverbought) // Sell when short SMA is below long SMA and RSI is overbought // Variables for trade management var float entryPrice = na var float takeProfit = na var int entryBarIndex = na // Entry logic for long trades if (longCondition and (strategy.position_size == 0)) entryPrice := close takeProfit := entryPrice + (entryPrice - (entryPrice - (atr * atrMultiplier))) * riskRewardRatio strategy.entry("Buy", strategy.long) entryBarIndex := bar_index // Record the entry bar index label.new(bar_index, high, "BUY", style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small) // Entry logic for short trades if (shortCondition and (strategy.position_size == 0)) entryPrice := close takeProfit := entryPrice - (entryPrice - (entryPrice + (atr * atrMultiplier))) * riskRewardRatio strategy.entry("Sell", strategy.short) entryBarIndex := bar_index // Record the entry bar index label.new(bar_index, low, "SELL", style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small) // Manage trade duration and exit after a minimum of 3 hours if (strategy.position_size != 0) // Check if the trade has been open for at least 3 hours (180 minutes) if (bar_index - entryBarIndex >= 180) // 3 hours in 1-minute bars if (strategy.position_size > 0) strategy.exit("Take Profit Long", from_entry="Buy", limit=takeProfit) else strategy.exit("Take Profit Short", from_entry="Sell", limit=takeProfit) // Background colors for active trades var color tradeColor = na if (strategy.position_size > 0) tradeColor := color.new(color.green, 90) // Light green for long trades else if (strategy.position_size < 0) tradeColor := color.new(color.red, 90) // Light red for short trades else tradeColor := na // No color when no trade is active bgcolor(tradeColor, title="Trade Background") // Plotting position tools if (strategy.position_size > 0) // Plot long position tool strategy.exit("TP Long", limit=takeProfit) if (strategy.position_size < 0) // Plot short position tool strategy.exit("TP Short", limit=takeProfit) // Plotting indicators plot(smaShort, color=color.green, title="Short SMA", linewidth=2) plot(smaLong, color=color.red, title="Long SMA", linewidth=2) // Visual enhancements for RSI hline(rsiOverbought, "Overbought", color=color.red) hline(rsiOversold, "Oversold", color=color.green) plot(rsi, color=color.blue, title="RSI", linewidth=2) // Ensure there's at least one plot function plot(close, color=color.black, title="Close Price", display=display.none) // Hidden plot for compliance