
Die Strategie ist ein quantitativer Handelssystem, das auf einem nullverzögerten Moving Average und einem Trendstärke-Score basiert. Es identifiziert Markttrends durch die Beseitigung der Verzögerung des herkömmlichen Moving Averages in Kombination mit einem Volatilitätskanal und einem Trendstärke-Score, um kurzfristige Schwankungen der Preise zu erfassen. Die Strategie verwendet ein Zwei-Wege-Handelsmodell, um im Aufwärtstrend zu handeln, im Abwärtstrend zu verlieren und Stop-Losses zu setzen, um das Risiko zu kontrollieren.
Der Kern der Strategie besteht darin, die Verzögerung der herkömmlichen Moving Averages durch den Einsatz von null-verzögerten Moving Averages zu beseitigen. Die Methode besteht darin, zuerst die Differenz zwischen dem aktuellen Preis und dem verzögerten Preis zu berechnen, dann diese Differenz mit dem aktuellen Preis zu kombinieren und schließlich einen Moving Average für die Ergebnisse zu berechnen. Gleichzeitig wird ein Trendstärke-Score eingeführt, um die Trendstärke zu quantifizieren, indem die Preise über verschiedene Zeiträume hoch oder niedrig verglichen werden.
Die Strategie löst durch innovative Zero-Latency-Berechnungsmethoden und ein Trendstärke-Score-System die Probleme der herkömmlichen Trend-Tracking-Strategien. Gleichzeitig wird die Strategie durch die Einführung von dynamischen Volatilitätskanälen und verbesserten Risikokontrollmechanismen stabiler und zuverlässiger. Obwohl die Strategie in Bezug auf die Optimierung der Parameter und die Marktanpassungsfähigkeit noch verbessert werden kann, ist die Gesamtkonzeption klar und hat eine bessere praktische Anwendung.
/*backtest
start: 2024-11-14 00:00:00
end: 2025-02-19 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"DOGE_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © josephdelvecchio
//@version=6
strategy("Zero Lag Trend Strategy", overlay=true)
// -- Input Parameters --
timeframe = input.timeframe("10", "Timeframe")
zeroLagMovAvg = input.string("ema", "Zero Lag Moving Average", options=["ema", "sma"])
length = input.int(50, "Lookback Period")
volatility_mult = input.float(1.5, "Volatility Multiplier")
loop_start = input.int(1, "Loop Start")
loop_end = input.int(50, "Loop End")
threshold_up = input.int(5, "Threshold Up")
threshold_down = input.int(-5, "Threshold Down")
signalpct = input.float(8, "Signal Percentage")
stoppct = input.float(0, "Stop Percentage")
// -- Helper Variables --
nATR = ta.atr(length)
lag = math.floor((length - 1) / 2)
zl_basis = zeroLagMovAvg == "ema" ? ta.ema(2 * close - close[lag], length) : ta.sma(2 * close - close[lag], length)
volatility = ta.highest(nATR, length * 3) * volatility_mult
// -- Trend Strength Scoring Function --
forloop_analysis(basis_price, loop_start, loop_end) =>
int sum = 0 // Use 'sum' as you did originally, for the +/- logic
for i = loop_start to loop_end
if basis_price > basis_price[i]
sum += 1
else if basis_price < basis_price[i] // Explicitly check for less than
sum -= 1
// If they are equal, do nothing (sum remains unchanged)
sum
score = forloop_analysis(zl_basis, loop_start, loop_end)
// -- Signal Generation --
long_signal = score > threshold_up and close > zl_basis + volatility
short_signal = score < threshold_down and close < zl_basis - volatility
// -- Trend Detection (Ensure One Trade Until Reversal) --
var int trend = na
trend := long_signal ? 1 : short_signal ? -1 : trend[1]
trend_changed = trend != trend[1]
// -- Stop-Loss & Take-Profit --
stop_loss = close * (1 - stoppct / 100)
take_profit = close * (1 + signalpct / 100)
// -- Strategy Orders (Enter Only When Trend Changes) --
if long_signal
strategy.entry("Long", strategy.long)
else if short_signal
strategy.entry("Short", strategy.short)
// -- Strategy Exits --
strategy.exit("Exit Long", from_entry="Long", stop=stop_loss, limit=take_profit)
strategy.exit("Exit Short", from_entry="Short", stop=take_profit, limit=stop_loss)
// -- Visualization --
p_basis = zl_basis
plot(p_basis, title="Zero Lag Line", color=color.blue, linewidth=2)
// -- Buy/Sell Arrows --
plotshape(series=trend_changed and trend == 1, location=location.belowbar, color=color.green, style=shape.triangleup, size=size.large, title="Buy Signal")
plotshape(series=trend_changed and trend == -1, location=location.abovebar, color=color.red, style=shape.triangledown, size=size.large, title="Sell Signal")