Es handelt sich um eine mehrstufige mobile Stop-Strategie, die auf zwei Supertrend-Indikatoren basiert. Die Strategie nutzt zwei verschiedene Supertrend-Indikatoren, um die Markttrends zu beurteilen, und tritt in die Richtung der Trends. Der Kern der Strategie besteht darin, eine mehrstufige mobile Stop-Strategie zu verwenden, um Profit schrittweise zu sichern, indem Sie mehrere Stop-Ziele setzen, während Sie einen Teil der Position behalten, um die größere Situation zu erfassen.
Doppel-Supertrend-Indikator: Die Strategie verwendet zwei Parameter, die verschiedene Supertrend-Indikatoren setzen, um den Trend zu beurteilen. Wenn zwei Indikatoren gleichzeitig einen Aufwärtstrend zeigen, wird ein Mehrsignal ausgelöst; wenn zwei Indikatoren gleichzeitig einen Abwärtstrend zeigen, wird ein Abbruchsignal ausgelöst. Diese Doppel-Bestätigungsmechanismen können falsche Signale wirksam reduzieren.
Mehrschrittlicher Stop-Off: Die Strategie setzt 4 einstellbare Stop-Off-Ziele. Jedes Ziel hat einen entsprechenden Stop-Off-Prozentsatz und eine Friedens-Positionsquote. Zum Beispiel kann das erste Stop-Off-Ziel bei 6% Gewinn 12% der Positionen auslöschen, das zweite Ziel bei 12% Gewinn 8% der Positionen auslöschen, und so weiter.
Flexible Handelsrichtung: Die Strategie erlaubt Benutzern, nur zu handeln, nur zu handeln oder in beide Richtungen zu handeln, um sich an unterschiedliche Marktbedingungen und Handelspräferenzen anzupassen.
Dynamische Stopps: Obwohl es keine eindeutigen Stop-Loss-Einstellungen im Code gibt, wird die Strategie automatisch platziert, wenn der Supertrend-Indikator umkehrt, was tatsächlich eine Rolle bei den dynamischen Stopps spielt.
Optimierung des Risikomanagements: Die mehrstufige mobile Stop-Off-Methode verbessert die Risiko-Gewinn-Relation der Strategie erheblich. Durch die schrittweise Sperrung der Gewinne kann die Strategie das Rücknahmerisiko verringern, während der Aufstiegsraum erhalten wird.
Verringerung von Falschsignalen: Die Verwendung von doppelten Supertrend-Indikatoren reduziert die Auswirkungen von Falschsignalen erheblich und erhöht die Genauigkeit und Zuverlässigkeit des Handels.
Anpassungsfähigkeit: Die Strategie kann die Handelsrichtung und die Stoppparameter flexibel an die Präferenzen der Benutzer und die Marktbedingungen anpassen und ist für verschiedene Handelsarten und Zeiträume geeignet.
Hohe Automatisierungsstufe: Die Strategie ist vollständig automatisiert und benötigt keine manuelle Intervention von der Einfahrt, dem Stopp bis zur Ausfahrt, was die Wahrscheinlichkeit von emotionalen Auswirkungen und Handlungsfehlern erheblich reduziert.
Flexibilität beim Geldmanagement: Durch die Einrichtung verschiedener Stop-Loss-Raten ermöglicht die Strategie flexible Geldmanagement, um sowohl eine schnelle Sperrung eines Teils der Gewinne zu gewährleisten, als auch die verbleibenden Positionen weiterhin profitabel zu machen.
Parameter-Sensitivität: Die Leistung der Strategie hängt stark von den Einstellungen der Supertrend-Indikatoren und der Stopp-Parameter ab. Unzulängliche Parameter können zu überhändeln oder wichtige Gelegenheiten verpassen.
Trend-Abhängigkeit: Eine Trend-Following-Strategie, bei der es zu unnötigen Handelskosten kommt, wenn die Märkte im Umbruch häufig ein- und ausgehen.
Auslaufrisiko: Bei schnellen Verhältnissen kann die Ausführung von mehrstufigen Stopps durch Auslaufrisiken beeinflusst werden, und der tatsächliche Ausführungspreis kann von der erwarteten Abweichung abweichen.
Risiko einer Überoptimierung: Die Strategie hat mehrere anpassbare Parameter, die leicht in die Überoptimierungsfalle fallen können, was zu einer großen Abweichung der Rückmeldungsergebnisse von der Realplattenperformance führt.
Einführung von Volatilitätsfiltern: Berücksichtigung der Kombination von ATR oder anderen Volatilitätsindikatoren, Verringerung der Handelsfrequenz während der niedrigen Volatilität und Verbesserung der Anpassungsfähigkeit der Strategie in verschiedenen Marktumgebungen.
Dynamische Parameter-Anpassungen: Es kann erforscht werden, wie sich die Supertrend-Parameter und die Stop-Stop-Ziele mit Hilfe von Adaptive-Algorithmen dynamisch anpassen lassen, um besser an Marktveränderungen anzupassen.
Erhöhung der Stop-Loss-Funktion: Obwohl die Supertrend-Umkehrung eine gewisse Stop-Loss-Funktion bietet, kann man erwägen, eine flexiblere Stop-Loss-Funktion hinzuzufügen, z. B. die Verfolgung von Stopps, um das Risiko weiter zu kontrollieren.
In Kombination mit anderen technischen Indikatoren: Es kann in Erwägung gezogen werden, andere technische Indikatoren wie RSI, MACD einzuführen, um die Genauigkeit von Einstieg und Ausstieg durch Multi-Indikator-Resonanz zu verbessern.
Optimierung des Geldmanagements: Es können komplexere Geldmanagementstrategien erforscht werden, z. B. die dynamische Anpassung der Positionsgröße an die Ertragslage des Kontos, um Risiken und Erträge besser auszugleichen.
Optimierung der Rückmeldung: Eine umfassendere Rückmeldung, einschließlich einer Analyse der Performance unter verschiedenen Zeitrahmen und unter verschiedenen Marktbedingungen, um die optimalen Einsatzszenarien und Parameter-Einstellungen für die Strategie zu ermitteln.
Die Multi-Step-Mobil-Stopp-Strategie basiert auf zwei Supertrend-Indikatoren, die Risiko und Ertrag durch eine flexible Multi-Stopp-Mechanismus ausgleichen. Die Hauptvorteile der Strategie liegen in ihrer hervorragenden Risikomanagement-Fähigkeit und Sensibilität für Trends.
/*backtest
start: 2024-05-21 00:00:00
end: 2024-06-20 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Strategic Multi-Step Supertrend Trader - Strategy [presentTrading]", overlay=true )
// this strategy utilizes a double Supertrend indicator to determine entry and exit conditions for both long and short trades, with user-configurable take profit levels and trade direction settings.
// The strategy dynamically updates highest and lowest prices during trades and exits positions based on multi-step profit targets or opposing Supertrend signals.
// User inputs for take profit settings
// Grouping Take Profit settings
useTakeProfit = input.bool(true, title="Use Take Profit", group="Take Profit Settings")
takeProfitPercent1 = input.float(6.0, title="Take Profit % Step 1", group="Take Profit Settings")
takeProfitPercent2 = input.float(12.0, title="Take Profit % Step 2", group="Take Profit Settings")
takeProfitPercent3 = input.float(18.0, title="Take Profit % Step 3", group="Take Profit Settings")
takeProfitPercent4 = input.float(50.0, title="Take Profit % Step 4", group="Take Profit Settings")
takeProfitAmount1 = input.float(12, title="Take Profit Amount % Step 1", group="Take Profit Settings")
takeProfitAmount2 = input.float(8, title="Take Profit Amount % Step 2", group="Take Profit Settings")
takeProfitAmount3 = input.float(4, title="Take Profit Amount % Step 3", group="Take Profit Settings")
takeProfitAmount4 = input.float(0, title="Take Profit Amount % Step 4", group="Take Profit Settings")
numberOfSteps = input.int(3, title="Number of Take Profit Steps", minval=1, maxval=4, group="Take Profit Settings")
// Grouping Trade Direction
tradeDirection = input.string("Both", title="Trade Direction", options=["Long", "Short", "Both"], group="Trade Direction")
// Grouping Supertrend settings
atrPeriod1 = input(10, title="ATR Length for Supertrend 1", group="Supertrend Settings")
factor1 = input.float(3.0, title="Factor for Supertrend 1", step=0.01, group="Supertrend Settings")
atrPeriod2 = input(5, title="ATR Length for Supertrend 2", group="Supertrend Settings")
factor2 = input.float(4.0, title="Factor for Supertrend 2", step=0.01, group="Supertrend Settings")
// Function to calculate Supertrend
supertrend(factor, atrPeriod) =>
[a, direction] = ta.supertrend(factor, atrPeriod)
direction
// Calculate Double Supertrend
supertrend1 = supertrend(factor1, atrPeriod1)
supertrend2 = supertrend(factor2, atrPeriod2)
// Entry conditions
longCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Long" or tradeDirection == "Both")
shortCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Short" or tradeDirection == "Both")
// Exit conditions
longExitCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Long" or tradeDirection == "Both")
shortExitCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Short" or tradeDirection == "Both")
// Variables to store the highest and lowest prices during the trade
var float highestPrice = na
var float lowestPrice = na
// Get the entry price from open trades
entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)
// Reset highestPrice or lowestPrice when entering new trades
if (longCondition and strategy.position_size <= 0)
highestPrice := na // Reset the highest price
strategy.entry("My Long Entry Id", strategy.long) // Enter long position
strategy.close("My Short Entry Id", "Short Exit") // Close short position if any
if (shortCondition and strategy.position_size >= 0)
lowestPrice := na // Reset the lowest price
strategy.entry("My Short Entry Id", strategy.short) // Enter short position
strategy.close("My Long Entry Id", "Long Exit") // Close long position if any
// Exit trades based on conditions
if (longExitCondition and strategy.position_size > 0)
strategy.close("My Long Entry Id", "Long Exit") // Exit long position
if (shortExitCondition and strategy.position_size < 0)
strategy.close("My Short Entry Id", "Short Exit") // Exit short position
if (strategy.position_size > 0)
// Update the highest price for long positions
highestPrice := na(highestPrice) ? high : math.max(highestPrice, high)
// Step 1
if (useTakeProfit and numberOfSteps >= 1)
strategy.exit("Take Profit 1", from_entry="My Long Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 + takeProfitPercent1 / 100))
// Step 2
if (useTakeProfit and numberOfSteps >= 2)
strategy.exit("Take Profit 2", from_entry="My Long Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 + takeProfitPercent2 / 100))
// Step 3
if (useTakeProfit and numberOfSteps >= 3)
strategy.exit("Take Profit 3", from_entry="My Long Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 + takeProfitPercent3 / 100))
// Step 4
if (useTakeProfit and numberOfSteps == 4)
strategy.exit("Take Profit 4", from_entry="My Long Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 + takeProfitPercent4 / 100))
if (strategy.position_size < 0)
// Update the lowest price for short positions
lowestPrice := na(lowestPrice) ? low : math.min(lowestPrice, low)
// Step 1
if (useTakeProfit and numberOfSteps >= 1)
strategy.exit("Take Profit 1", from_entry="My Short Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 - takeProfitPercent1 / 100))
// Step 2
if (useTakeProfit and numberOfSteps >= 2)
strategy.exit("Take Profit 2", from_entry="My Short Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 - takeProfitPercent2 / 100))
// Step 3
if (useTakeProfit and numberOfSteps >= 3)
strategy.exit("Take Profit 3", from_entry="My Short Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 - takeProfitPercent3 / 100))
// Step 4
if (useTakeProfit and numberOfSteps == 4)
strategy.exit("Take Profit 4", from_entry="My Short Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 - takeProfitPercent4 / 100))