Quantitative Handelsstrategie auf Basis von SMA und Rolling Trendline

Schriftsteller:ChaoZhang, Datum: 2024-02-04 15:18:12
Tags:

img

Übersicht

Diese Strategie kombiniert den einfachen gleitenden Durchschnitt (SMA) und die rollende lineare Regressions-Trendlinie. Sie setzt die lange Eintrittsbedingung, wenn der Schlusskurs sowohl über der SMA als auch über der Trendlinie liegt, und die Ausstiegsbedingung, wenn der Schlusskurs darunter liegt. Die Strategie nutzt hauptsächlich die SMA als Handelssignal und die rollende Trendlinie für die Kanalunterstützung. Sie tritt beim Ausbruch des Aufwärtskanals in den Handel ein und tritt beim Ausbruch des Abwärtskanals aus.

Strategie Logik

Zu den wichtigsten Bestandteilen dieser Strategie gehören:

  1. SMA: Einfacher gleitender Durchschnitt, der den durchschnittlichen Schlusskurs über einen Zeitraum (smaPeriod) als Signallinie berechnet.

  2. Rollende Trendlinie: Einfügen der besten linearen Regressionslinie über ein Fenster (Fenster) als Trendsignal. Berechnet mit der gewöhnlichen Mindestquadratmethode.

  3. Eintrittsbedingung: Long gehen, wenn der Schlusskurs > SMA und Trendlinie liegt.

  4. Ausgangszustand: Schließung der Position, wenn der Schließpreis < SMA und Trendlinie ist.

Die Strategie basiert daher hauptsächlich auf dem SMA-Signal-Breakout für den Einstieg und dem Kanal-Breakout für den Ausgang.

Analyse der Vorteile

Diese Strategie integriert einen doppelten Filter von MA und Trendlinie, der falsche Breakout-Trades effektiv reduzieren kann.

  1. Der doppelte Filtermechanismus verhindert einen falschen Ausbruch und verbessert die Entscheidungsgenauigkeit.
  2. Rollende Trendlinie bietet eine dynamische Kanalunterstützung für einen genaueren Kanalhandel.
  3. Einfache und intuitive Handelslogik, leicht zu verstehen und umzusetzen.
  4. Anpassungsfähige Parameter passen sich unterschiedlichen Marktumgebungen an.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Bei falschen Parametern der SMA und der Trendlinie kann es zu fehlenden Trades oder zu vielen falschen Ausbrüchen kommen.
  2. Auf stark volatilen Märkten kann die Kanalunterstützung durch SMA und Trendlinie abschwächen.
  3. Ein fehlgeschlagener Ausbruch kann zu Verlusten führen, ein strenger Stop-Loss ist erforderlich.

Einige Optimierungsrichtlinien für diese Risiken:

  1. Optimierung der Parameter für verschiedene Produkte.
  2. Erhöhen Sie den Stop-Loss-Bereich, um Einzelverluste zu reduzieren.
  3. Stoppen Sie den Handel auf einem volatilen Markt, um nicht gefangen zu werden.

Optimierung der Strategie

Diese Strategie kann in folgenden Aspekten optimiert werden:

  1. Hinzufügen dynamischer Anpassungsfunktionen für die SMA-Periode, Gleitparameter auf Basis von Marktregelungen.

  2. Entwickeln Sie einen elastischen Stop-Loss-Mechanismus. Setzen Sie einen Stop-Loss, wenn der Preis die Trendlinie bei einem Verhältnis bricht.

  3. Hinzufügen eines Filters aus anderen Indikatoren, z. B. Volumen, RSI, um die Entscheidungsgenauigkeit zu verbessern.

  4. Gehen Sie lang, wenn der Preis den Boden erreicht und den Abwärtstrend durchbricht.

Schlussfolgerung

Diese Strategie integriert die Handelssignale vom gleitenden Durchschnitt und der Kanalunterstützung von der rollenden Trendlinie, um Trends zu implementieren. Der Doppelfilter reduziert die Wahrscheinlichkeit eines falschen Ausbruchs und verbessert die Entscheidungsqualität.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SMA Strategy with Rolling Trendline", overlay=true)

// Input parameters
smaPeriod = input(14, title="SMA Period")
window = input(20, title="Trendline Window")
startDate = input(timestamp("2023-01-01"), title="Start Date")
endDate = input(timestamp("2023-12-31"), title="End Date")

// Calculating SMA
sma = sma(close, smaPeriod)

// Function to calculate linear regression trendline for a window
linreg_trendline(window) =>
    sumX = 0.0
    sumY = 0.0
    sumXY = 0.0
    sumX2 = 0.0
    for i = 0 to window - 1
        sumX := sumX + i
        sumY := sumY + close[i]
        sumXY := sumXY + i * close[i]
        sumX2 := sumX2 + i * i
    slope = (window * sumXY - sumX * sumY) / (window * sumX2 - sumX * sumX)
    intercept = (sumY - slope * sumX) / window
    slope * (window - 1) + intercept

// Calculating the trendline
trendline = linreg_trendline(window)

// Entry and Exit Conditions
longCondition = close > sma and close < trendline
exitLongCondition = close < sma and close > trendline

// Strategy logic
if (true)
    if (longCondition)
        strategy.entry("Long", strategy.long)
    if (exitLongCondition)
        strategy.close("Long")

// Plotting
plot(sma, title="Simple Moving Average", color=color.blue)
plot(trendline, title="Rolling Trendline", color=color.red)
plotshape(series=longCondition, title="Enter Trade", location=location.belowbar, color=color.green, style=shape.triangleup)
plotshape(series=exitLongCondition, title="Exit Trade", location=location.abovebar, color=color.red, style=shape.triangledown)


Mehr