
Bei dieser Strategie handelt es sich um ein Trendverfolgungs-Handelssystem, das auf dem 5-Tage-Exponential-Moving-Average (EMA) basiert. Es analysiert die Positionsbeziehung zwischen Preis und EMA und kombiniert die dynamische Anpassung von Stop-Loss- und Gewinnzielen, um den Markttrend zu erfassen. Die Strategie basiert auf einer Methode des prozentualen Positionsmanagements und berücksichtigt Transaktionskostenfaktoren, was sie äußerst praktisch und flexibel macht.
Die Kernlogik der Strategie besteht darin, den Einstiegszeitpunkt basierend auf der Interaktion zwischen Preis und 5-Tage-EMA zu bestimmen. Insbesondere wenn der höchste Preis des aktuellen Zeitraums niedriger ist als der EMA und im aktuellen Zeitraum ein Durchbruch erfolgt, gibt das System ein Long-Signal aus. Gleichzeitig enthält die Strategie auch eine optionale Zusatzbedingung, die erfordert, dass der Schlusskurs höher ist als im Vorzeitraum, um die Zuverlässigkeit des Signals zu erhöhen. Zur Risikokontrolle bietet die Strategie zwei Stop-Loss-Methoden: dynamischen Stop-Loss auf Basis vorheriger Tiefststände und Stop-Loss auf Basis fixer Punkte. Gewinnziele werden dynamisch auf Grundlage des Risiko-Rendite-Verhältnisses festgelegt, um das Gewinnpotenzial der Transaktion sicherzustellen.
Dies ist eine gut durchdachte und logische Trendfolgestrategie, die durch die Kombination von EMA-Indikatoren und Preisverhalten Markttrends effektiv erfassen kann. Die Strategie verfügt über relativ vollständige Mechanismen zur Risikokontrolle und zum Renditemanagement und bietet mehrere Optimierungsmöglichkeiten mit hohem praktischem Wert und Verbesserungspotenzial. Anschließend können die Stabilität und Rentabilität der Strategie durch Hinzufügen einer Mehrperiodenanalyse, Anpassen des Stop-Loss-Mechanismus usw. weiter verbessert werden.
/*backtest
start: 2024-12-29 00:00:00
end: 2025-01-05 00:00:00
period: 30m
basePeriod: 30m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Demo GPT - PowerOfStocks 5EMA", overlay=true)
// Inputs
enableSL = input.bool(false, title="Enable Extra SL")
usl = input.int(defval=5, title="SL Distance in Points", minval=1, maxval=100)
riskRewardRatio = input.int(defval=3, title="Risk to Reward Ratio", minval=3, maxval=25)
showSell = input.bool(true, title="Show Sell Signals")
showBuy = input.bool(true, title="Show Buy Signals")
buySellExtraCond = input.bool(false, title="Buy/Sell with Extra Condition")
startDate = input(timestamp("2018-01-01 00:00"), title="Start Date")
endDate = input(timestamp("2069-12-31 23:59"), title="End Date")
// EMA Calculation
ema5 = ta.ema(close, 5)
// Plot EMA
plot(ema5, "EMA 5", color=color.new(#882626, 0), linewidth=2)
// Variables for Buy
var bool longTriggered = na
var float longStopLoss = na
var float longTarget = na
// Variables for Sell (used for signal visualization but no actual short trades)
var bool shortTriggered = na
var float shortStopLoss = na
var float shortTarget = na
// Long Entry Logic
if true
if (showBuy)
longCondition = high[1] < ema5[1] and high[1] < high and (not buySellExtraCond or close > close[1])
if (longCondition and not longTriggered)
entryPrice = high[1]
stopLoss = enableSL ? low[1] - usl * syminfo.mintick : low[1]
target = enableSL ? entryPrice + (entryPrice - stopLoss) * riskRewardRatio : high[1] + (high[1] - low[1]) * riskRewardRatio
// Execute Buy Order
strategy.entry("Buy", strategy.long, stop=entryPrice)
longTriggered := true
longStopLoss := stopLoss
longTarget := target
label.new(bar_index, entryPrice, text="Buy@ " + str.tostring(entryPrice), style=label.style_label_up, color=color.green, textcolor=color.white)
// Short Signal Logic (Visual Only)
if (true)
if (showSell)
shortCondition = low[1] > ema5[1] and low[1] > low and (not buySellExtraCond or close < close[1])
if (shortCondition and not shortTriggered)
entryPrice = low[1]
stopLoss = enableSL ? high[1] + usl * syminfo.mintick : high[1]
target = enableSL ? entryPrice - (stopLoss - entryPrice) * riskRewardRatio : low[1] - (high[1] - low[1]) * riskRewardRatio
// Visual Signals Only
label.new(bar_index, entryPrice, text="Sell@ " + str.tostring(entryPrice), style=label.style_label_down, color=color.red, textcolor=color.white)
shortTriggered := true
shortStopLoss := stopLoss
shortTarget := target
// Exit Logic for Buy
if longTriggered
// Stop-loss Hit
if low <= longStopLoss
strategy.close("Buy", comment="SL Hit")
longTriggered := false
// Target Hit
if high >= longTarget
strategy.close("Buy", comment="Target Hit")
longTriggered := false
// Exit Logic for Short (Signals Only)
if shortTriggered
// Stop-loss Hit
if high >= shortStopLoss
shortTriggered := false
// Target Hit
if low <= shortTarget
shortTriggered := false