
Die Strategie ist für den Schaukelhändler konzipiert, der in der Hoffnung ist, in der Kurzzeit nach einem Trendwechsel einen Mehrkopf-Position aufzubauen und gleichzeitig in die Luft zu gehen, wenn die Marktbedingungen für einen Abwärtstrend günstig sind. Die Strategie kombiniert SMA-Kreuzbestätigungstrends, feste Prozentzahl der Eintrittspunkte und ein anpassbares Risiko-Management-Parameter, um eine optimale Handelsausführung zu erzielen.
Der Kern der Strategie besteht darin, eine einfache Moving Average (SMA) von 10 und 25 Zyklen zu verwenden, um die Richtung des Trends zu bestätigen, und in Verbindung mit einer 150-Zyklen-Index-Moving Average (EMA) als zusätzliche Filterbedingung für leere Geschäfte. Mehrköpfige Geschäfte werden nicht sofort nach einer SMA-Kreuzung eingegeben, sondern warten, bis der Preis auf den angegebenen Prozentsatz zurückgegangen ist. Diese Methode optimiert den Einstiegspreis und erhöht die Risiko-Rendite.
Die Strategie funktioniert in folgenden Schlüsselbereichen:
Trendbestätigungsmechanismus:
Mehrere Rückrufmechanismen:
Eintrittsregeln:
Risikomanagement und Ausstiegsstrategien:
Die Strategie nutzt eine dauerhafte Variable, um die Rückrufsignale zu verfolgen, um sicherzustellen, dass der Einstieg zum richtigen Zeitpunkt erfolgt. Wenn keine Position mehr vorhanden ist, wird das System alle Kennzeichen und Ebenen zurücksetzen, um sich auf das nächste Handelssignal vorzubereiten.
Nach einer eingehenden Analyse des Codes zeigte sich, dass diese Strategie folgende wesentliche Vorteile aufweist:
Optimierte Einstiegszeiten:
Umfassendes Risikomanagement:
Trends ausgerichtet:
Bildfeedback:
Äußerst anpassungsfähig:
Obwohl diese Strategie viele Vorteile hat, gibt es folgende Risiken, die zu beachten sind:
Schnellmarktrisiken:
Marktschwankungen:
Die Grenzen des Risikomanagements mit festen Punkten:
Übermäßige Abhängigkeit von technischen Indikatoren:
Risiken der Parameteroptimierung:
Auf der Grundlage der Code-Analyse lassen sich folgende wichtige Optimierungsmöglichkeiten erkennen:
Dynamische Risikomanagement:
stopDistance = input.float(2.0) * ta.atr(14)BerechnungsweiseFilterung der Trendstärke:
Mehrfache Zeitrahmenanalyse:
Intelligente Rückmeldungserkennung:
Bestätigung des Transaktionsvolumens:
Anpassungsparameter:
Die Trend-Retracing-Strategie ist ein sorgfältig konzipiertes Handelssystem, das Trend-Erkennung, Optimierung des Eintritts und umfassendes Risikomanagement kombiniert. Durch die Wartezeit für eine Preisretracing und ein erneutes Eintritt erzielt die Strategie eine bessere Eintrittspreis-Risiko-Relation als ein einfaches SMA-Kreuzungssystem.
Die Kernvorteile der Strategie liegen in ihrer Flexibilität und Anpassbarkeit, die es dem Händler ermöglicht, die Parameter an die individuellen Risikopräferenzen und die Marktbedingungen anzupassen. Die integrierten Risikomanagementfunktionen (einschließlich Stop-Loss, Stop-Out und Sicherungspunkte) bieten jedoch umfassenden Schutz.
Die Strategie hat jedoch auch einige Einschränkungen, einschließlich der Leistung in turbulenten Märkten und der Einschränkungen der Risikomanagement von Fixed-Points. Durch die Umsetzung von Empfehlungen zur Optimierung, wie beispielsweise dynamisches Risikomanagement, Trendstärkefilter und Bestätigung von Handelsvolumen, kann die Stabilität und die Gesamtleistung der Strategie erheblich verbessert werden.
Es ist eine ideale Basisstrategie für Schaukelhändler und kann weiter nach individuellen Handelsstilen und Zielen angepasst werden. Mit vernünftigen Parameter-Sets und kontinuierlicher Überwachungsanpassung hat die Strategie das Potenzial, stabile Handelsergebnisse in verschiedenen Marktumgebungen zu liefern.
/*backtest
start: 2024-08-01 00:00:00
end: 2025-03-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("BTCUSD with adjustable sl,tp",
overlay=true,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=10,
calc_on_every_tick=true)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ USER INPUTS
// ─────────────────────────────────────────────────────────────────────────────
longSignalStyle = input.string("Label Up", title="Long Signal Style", options=["Label Up", "Arrow Up", "Cross"])
shortSignalStyle = input.string("Label Down", title="Short Signal Style", options=["Label Down", "Arrow Down", "Cross"])
// Adjustable exit parameters (in points)
tpDistance = input.int(1000, "Take Profit Distance (points)", minval=1)
slDistance = input.int(250, "Stop Loss Distance (points)", minval=1)
beTrigger = input.int(500, "Break-Even Trigger Distance (points)", minval=1)
// Adjustable retracement percentage for long pullback entry (e.g. 0.01 = 1%)
retracementPct = input.float(0.01, "Retracement Percentage (e.g. 0.01 for 1%)", step=0.001)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ INDICATORS: SMA & EMA
// ─────────────────────────────────────────────────────────────────────────────
sma10 = ta.sma(close, 10)
sma25 = ta.sma(close, 25)
ema150 = ta.ema(close, 150)
plot(sma10, color=color.blue, title="SMA 10")
plot(sma25, color=color.red, title="SMA 25")
plot(ema150, color=color.orange, title="EMA 150")
// ─────────────────────────────────────────────────────────────────────────────
// ▌ ENTRY CONDITIONS
// ─────────────────────────────────────────────────────────────────────────────
longCondition = ta.crossover(sma10, sma25)
shortCondition = ta.crossunder(sma10, sma25)
shortValid = close < ema150 // Only take shorts if price is below EMA150
// Plot immediate entry signals (for visual reference)
plotshape(longCondition and (strategy.position_size == 0), title="Long Signal",
style=(longSignalStyle == "Label Up" ? shape.labelup : (longSignalStyle == "Arrow Up" ? shape.triangleup : shape.cross)),
location=location.belowbar, color=color.green, text="Long", size=size.small)
plotshape(shortCondition and shortValid and (strategy.position_size == 0), title="Short Signal",
style=(shortSignalStyle == "Label Down" ? shape.labeldown : (shortSignalStyle == "Arrow Down" ? shape.triangledown : shape.cross)),
location=location.abovebar, color=color.red, text="Short", size=size.small)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ LONG PULLBACK ENTRY USING FIXED PERCENTAGE RETRACEMENT
// ─────────────────────────────────────────────────────────────────────────────
// We use persistent variables to track the pullback signal.
var bool longSignalActive = false
var float pullHigh = na // highest high since long signal activation
var float retraceLevel = na // level = pullHigh * (1 - retracementPct)
// Only consider new entries when no position is open.
if strategy.position_size == 0
// When a long crossover occurs, activate the signal and initialize pullHigh.
if longCondition
longSignalActive := true
pullHigh := high
// If signal active, update pullHigh and compute retracement level.
if longSignalActive
pullHigh := math.max(pullHigh, high)
retraceLevel := pullHigh * (1 - retracementPct)
// When price bounces upward and crosses above the retracement level, enter long
if ta.crossover(close, retraceLevel)
strategy.entry("Long", strategy.long)
longSignalActive := false
// Short entries: enter immediately if conditions are met
if shortCondition and shortValid
strategy.entry("Short", strategy.short)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ EXIT CONDITIONS WITH ADJUSTABLE TP, SL & BE
// ─────────────────────────────────────────────────────────────────────────────
var bool beLong = false
var bool beShort = false
// LONG EXIT LOGIC
if strategy.position_size > 0 and strategy.position_avg_price > 0
longEntry = strategy.position_avg_price
// Additional exit: if SMA(10) crosses below SMA(25) while price < EMA150, exit long
if ta.crossunder(sma10, sma25) and close < ema150
label.new(bar_index, low, "SMA Exit", style=label.style_label_down, color=color.red, textcolor=color.white)
strategy.close("Long", comment="SMA Cross Exit")
// Break-even trigger if price moves in favor by beTrigger points
if close >= longEntry + beTrigger
beLong := true
effectiveLongStop = beLong ? longEntry : (longEntry - slDistance)
if close <= effectiveLongStop
label.new(bar_index, low, (beLong ? "BE Hit" : "SL Hit"), style=label.style_label_down, color=color.red, textcolor=color.white)
strategy.close("Long", comment=(beLong ? "BE Hit" : "SL Hit"))
if close >= longEntry + tpDistance
label.new(bar_index, high, "TP Hit", style=label.style_label_up, color=color.green, textcolor=color.white)
strategy.close("Long", comment="TP Hit")
// SHORT EXIT LOGIC
if strategy.position_size < 0 and strategy.position_avg_price > 0
shortEntry = strategy.position_avg_price
// Basic stop logic
if close >= shortEntry + slDistance
label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))
// Take profit logic
if close <= shortEntry - tpDistance
label.new(bar_index, low, "TP Hit", style=label.style_label_down, color=color.green, textcolor=color.white)
strategy.close("Short", comment="TP Hit")
// Break-even trigger
if close <= shortEntry - beTrigger
beShort := true
effectiveShortStop = beShort ? shortEntry : (shortEntry + slDistance)
if close >= effectiveShortStop
label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))
// Reset BE flags when no position is open
if strategy.position_size == 0
beLong := false
beShort := false
// Reset the pullback signal
if not longSignalActive
pullHigh := na
retraceLevel := na