
Die Strategie basiert auf der Schräglage des beweglichen Durchschnitts (MA) und der relativen Position des Preises gegenüber dem MA. Die Strategie kauft, wenn die MA-Schräglage größer ist als die minimale Schräglage und der Preis höher ist als der MA. Gleichzeitig verwendet die Strategie einen Trailing Stop Loss, um das Risiko zu verwalten und unter bestimmten Bedingungen wieder einzutreten. Die Strategie zielt darauf ab, Chancen im Aufwärtstrend zu erfassen und gleichzeitig die Erträge und Risiken durch dynamische Stop-Loss- und Wiedereintrittsmechanismen zu optimieren.
Die Strategie beurteilt Trends anhand der Schräglage des Moving Averages und der relativen Position des Preises gegenüber dem Moving Average und verwaltet die Transaktionen mit einem Mechanismus zur Verfolgung von Stopps und bedingten Wiedereintritten. Der Vorteil der Strategie liegt in der Fähigkeit, Trends zu verfolgen, dynamische Stop-Loss-Schutz und die Erfassung von Wiedereintrittschancen. Die Strategie hat jedoch auch potenzielle Probleme wie Parameter-Sensitivität, Trenderkennungsfehler, Stop-Loss-Frequenz und Wiedereintrittsrisiken.
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MA Incline Strategy with Trailing Stop-Loss and Conditional Re-Entry", overlay=true, calc_on_every_tick=true)
// Input parameters
windowSize = input.int(10, title="Window Size")
maLength = input.int(150, title="Moving Average Length")
minSlope = input.float(0.001, title="Minimum Slope")
trailingStopPercentage = input.float(2.8, title="Trailing Stop Percentage (%)") / 100
reEntryPercentage = input.float(4.2, title="Re-Entry Percentage Above MA (%)") / 100
// Calculate the moving average
ma = ta.sma(close, maLength)
// Calculate the slope of the moving average over the window size
previousMa = ta.sma(close[windowSize], maLength)
slopeMa = (ma - previousMa) / windowSize
// Check conditions
isAboveMinSlope = slopeMa > minSlope
isAboveMa = close > ma
// Variables to track stop loss and re-entry condition
var bool stopLossOccurred = false
var float trailStopPrice = na
// Buy condition
buyCondition = isAboveMinSlope and isAboveMa and ((not stopLossOccurred) or (stopLossOccurred and low < ma * (1 + reEntryPercentage)))
// Execute strategy
if (buyCondition and strategy.opentrades == 0)
if (stopLossOccurred and close < ma * (1 + reEntryPercentage))
strategy.entry("Long", strategy.long)
stopLossOccurred := false
else if (not stopLossOccurred)
strategy.entry("Long", strategy.long)
// Trailing stop-loss
if (strategy.opentrades == 1)
// Calculate the trailing stop price
trailStopPrice := close * (1 - trailingStopPercentage)
// Use the built-in strategy.exit function with the trailing stop
strategy.exit("Trail Stop", "Long", stop=close * (1 - trailingStopPercentage))
// Exit condition
sellCondition = ta.crossunder(close, ma)
if (sellCondition and strategy.opentrades == 1)
strategy.close("Long")
// Check if stop loss occurred
if (strategy.closedtrades > 0)
lastExitPrice = strategy.closedtrades.exit_price(strategy.closedtrades - 1)
if (not na(trailStopPrice) and lastExitPrice <= trailStopPrice)
stopLossOccurred := true
// Reset stop loss flag if the price crosses below the MA
if (ta.crossunder(close, ma))
stopLossOccurred := false