
Dies ist eine Trendfolgestrategie, die auf dem SuperTrend-Indikator, dem exponentiellen gleitenden Durchschnitt (EMA) und dem durchschnittlichen wahren Bereich (ATR) basiert. Diese Strategie verwendet mehrere technische Indikatoren in Verbindung mit einem anfänglichen Stop-Loss und einem gleitenden Stop-Loss, um eine dynamische Verfolgung von Markttrends und eine Risikokontrolle zu erreichen. Der Kern der Strategie besteht darin, Änderungen der Trendrichtung durch den SuperTrend-Indikator zu erfassen, EMA zur Trendbestätigung zu verwenden und einen doppelten Stop-Loss-Mechanismus zum Schutz der Gewinne einzurichten.
Die Strategie basiert auf den folgenden Kernkomponenten:
Wenn die SuperTrend-Richtung nach unten dreht und der Schlusskurs über dem EMA liegt, gibt das System ein Long-Signal aus, ohne eine Position zu halten. Im Gegenteil, wenn die SuperTrend-Richtung nach oben dreht und der Schlusskurs unter dem EMA liegt, sendet das System ein kurzes Signal.
Dies ist eine vollständige Handelsstrategie, die mehrere technische Indikatoren und Risikokontrollmechanismen kombiniert. Durch die Erfassung von Trends durch den SuperTrend-Indikator, die Bestätigung der Richtung durch EMA und die Koordination mit dem doppelten Stop-Loss-Mechanismus wird ein besseres Risiko-Rendite-Verhältnis erreicht. Der Optimierungsspielraum der Strategie liegt hauptsächlich in der dynamischen Anpassung von Parametern, der Beurteilung des Marktumfelds und der Verbesserung des Risikomanagementsystems. In tatsächlichen Anwendungen wird empfohlen, ausreichend historische Daten-Backtests durchzuführen und die Parameter entsprechend den Merkmalen bestimmter Handelsprodukte anzupassen.
/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-15 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy(" nifty supertrend triton", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Input parameters
atrPeriod = input.int(16, "ATR Length", step=1)
factor = input.float(3.02, "Factor", step=0.01)
maPeriod = input.int(49, "Moving Average Period", step=1)
trailPoints = input.int(70, "Trailing Points", step=1) // Points after which trailing stop activates
initialStopLossPoints = input.int(50, "Initial Stop Loss Points", step=1) // Initial stop loss of 50 points
// Calculate Supertrend
[_, direction] = ta.supertrend(factor, atrPeriod)
// Calculate EMA
ema = ta.ema(close, maPeriod)
// Variables to track stop loss levels
var float trailStop = na
var float entryPrice = na
var float initialStopLoss = na // To track the initial stop loss
// Generate buy and sell signals
if ta.change(direction) < 0 and close > ema
if strategy.position_size == 0 // Only open a new long position if no current position
strategy.entry("Buy", strategy.long)
entryPrice := close // Record the entry price for the long position
initialStopLoss := entryPrice - initialStopLossPoints // Set initial stop loss for long position
trailStop := na // Reset trailing stop for long
if ta.change(direction) > 0 and close < ema
if strategy.position_size == 0 // Only open a new short position if no current position
strategy.entry("Sell", strategy.short)
entryPrice := close // Record the entry price for the short position
initialStopLoss := entryPrice + initialStopLossPoints // Set initial stop loss for short position
trailStop := na // Reset trailing stop for short
// Apply initial stop loss for long positions
if (strategy.position_size > 0) // Check if in a long position
if close <= initialStopLoss // If the price drops to or below the initial stop loss
strategy.close("Buy", "Initial Stop Loss Hit") // Exit the long position
// Apply trailing stop logic for long positions
if (strategy.position_size > 0) // Check if in a long position
if (close - entryPrice >= trailPoints) // If the price has moved up by the threshold
trailStop := na(trailStop) ? close - trailPoints : math.max(trailStop, close - trailPoints) // Adjust trailing stop upwards
if not na(trailStop) and close < trailStop // If the price drops below the trailing stop
strategy.close("Buy", "Trailing Stop Hit") // Exit the long position
// Apply initial stop loss for short positions
if (strategy.position_size < 0) // Check if in a short position
if close >= initialStopLoss // If the price rises to or above the initial stop loss
strategy.close("Sell", "Initial Stop Loss Hit") // Exit the short position
// Apply trailing stop logic for short positions
if (strategy.position_size < 0) // Check if in a short position
if (entryPrice - close >= trailPoints) // If the price has moved down by the threshold
trailStop := na(trailStop) ? close + trailPoints : math.min(trailStop, close + trailPoints) // Adjust trailing stop downwards
if not na(trailStop) and close > trailStop // If the price rises above the trailing stop
strategy.close("Sell", "Trailing Stop Hit") // Exit the short position