Lang-Kurz-Lineare Regressions-Crossover-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-03-27 17:52:02
Tags:

img

Übersicht

Die Long-Short Linear Regression Crossover Strategie ist eine technische Analyse-Strategie, die ein lineares Regressionsmodell verwendet, um die zukünftigen Kursbewegungen einer Aktie vorherzusagen. Das Grundprinzip der Strategie lautet: Aktienpreisbewegungen folgen oft einem bestimmten linearen Trend, und durch die Berechnung der linearen Regression des Preises kann der zukünftige Preis vorhergesagt werden. Die Strategie geht lang, wenn der vorhergesagte Preis über den aktuellen Preis überschreitet, und verlässt die Position, wenn er darunter überschreitet.

Strategieprinzipien

Die Strategie berechnet zunächst die lineare Regression des Aktienkurses über einen bestimmten Zeitraum. Die lineare Regression passt an eine gerade Linie anhand der Mindestquadratmethode, die den Trend der Preisänderung im Laufe der Zeit darstellt. Die Strategie zeichnet dann die vorhergesagte Preislinie und den aktuellen Preis auf dem Diagramm.

Die Strategie definiert zwei Signale:

  1. Langes Signal: wird ausgelöst, wenn der vorhergesagte Preis über den aktuellen Kurs steigt
  2. Kurzsignal: wird ausgelöst, wenn der vorhergesagte Preis unter den aktuellen Preis fällt

Wenn das Long-Signal angezeigt wird, eröffnet die Strategie eine Long-Position; wenn das Short-Signal angezeigt wird, schließt sie die Position.

Die wichtigsten Schritte der Strategie sind folgende:

  1. Berechnen Sie die lineare Regression des Preises über einen Zeitraum
  2. Zeichnen Sie die vorhergesagte Preislinie und den aktuellen Preis auf dem Diagramm
  3. Definition der langen und kurzen Signale
  4. Öffnen einer Long-Position, wenn das Long-Signal ausgelöst wird
  5. Schließen Sie die Position, wenn das Kurzsignal ausgelöst wird

Analyse der Vorteile

Die lang-kurz-lineare Regressions-Crossover-Strategie hat folgende Vorteile:

  1. Einfach und effektiv: Die Logik der Strategie ist klar und einfach umzusetzen und kann den linearen Kurstrend erfassen.
  2. Breite Anwendbarkeit: Die Strategie kann sowohl auf Trending- als auch auf Ranging-Märkten Handelssignale generieren.
  3. Starke Optimierbarkeit: Die Strategie enthält einige wichtige Parameter wie lineare Regressionszeit, gleitende Durchschnitte usw., die zur Verbesserung der Leistung optimiert werden können.

Risikoanalyse

Trotz seiner vielen Vorteile birgt die Lang-Kurz-Linear-Regressions-Kreuzung-Strategie auch einige Risiken:

  1. Trenderkennungsrisiko: Wenn die Preisbewegung nicht einem linearen Trend folgt, wie z. B. in einem Ranging-Markt, kann die Strategie falsche Signale erzeugen. Dieses Risiko kann durch Kombination mit anderen Indikatoren wie MACD reduziert werden.
  2. Parameter-Setting-Risiko: Die Performance der Strategie ist an die Parameter-Einstellungen angepaßt, und unangemessene Parameter können zu Verlusten führen.
  3. Überanpassungsrisiko: Wenn die Parameter überoptimiert sind, kann dies dazu führen, dass die Strategie die historischen Daten überanpasst und in Zukunft schlecht abschneidet.

Optimierungsrichtlinien

  1. Kombination mit anderen Indikatoren: Das lineare Regressionssignal kann mit anderen technischen Indikatoren wie MACD, Bollinger Bands usw. kombiniert werden, um die Genauigkeit der Signale zu verbessern.
  2. Dynamische Parameteroptimierung: Ein adaptiver Mechanismus für Parameter kann entwickelt werden, um die Parameter dynamisch an die Marktbedingungen anzupassen und die Anpassungsfähigkeit zu verbessern.
  3. Hinzufügen eines Risikokontrollmoduls: Risikokontrollmaßnahmen wie Stop-Loss und Geldmanagement in die Strategie einbeziehen, um das Risiko einer einzelnen Transaktion zu reduzieren und die kumulativen Renditen zu erhöhen.
  4. Optimierung des maschinellen Lernens: Algorithmen des maschinellen Lernens können verwendet werden, um das lineare Regressionsmodell kontinuierlich zu optimieren, um seine Vorhersagen genauer zu machen.

Zusammenfassung

Die Long-Short Linear Regression Crossover Strategie erzeugt Handelssignale basierend auf dem Vergleich des vorhergesagten Preises aus der linearen Regression mit dem aktuellen Preis. Die Logik der Strategie ist einfach und klar und kann den linearen Kurstrend erfassen und ist auf verschiedene Marktbedingungen anwendbar. Gleichzeitig ist die Strategie einfach zu implementieren und zu optimieren, und die Parameter können flexibel angepasst werden, in Kombination mit anderen Indikatoren, Risikokontrollmodule können hinzugefügt werden usw., um die Leistung der Strategie kontinuierlich zu verbessern. Die Strategie birgt jedoch auch Risiken wie ungenaue Trenderkennung, unangemessene Parameter-Einstellungen und Überfüllung historischer Daten, so dass Vorsicht in der praktischen Anwendung erforderlich ist. Insgesamt ist die Long-Short Linear Regression Crossover Strategie eine einfache und effektive quantitative Handelsstrategie, die es wert ist, weiter erforscht und optimiert zu werden.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © stocktechbot
//@version=5
strategy("Linear Cross", overlay=true, margin_long=100, margin_short=0)

//Linear Regression

vol = volume

// Function to calculate linear regression
linregs(y, x, len) =>
    ybar = math.sum(y, len)/len
    xbar = math.sum(x, len)/len
    b = math.sum((x - xbar)*(y - ybar),len)/math.sum((x - xbar)*(x - xbar),len)
    a = ybar - b*xbar
    [a, b]

// Historical stock price data
price = close

// Length of linear regression
len = input(defval = 21, title = 'Strategy Length')
linearlen=input(defval = 9, title = 'Linear Lookback')
[a, b] = linregs(price, vol, len)

// Calculate linear regression for stock price based on volume
//eps = request.earnings(syminfo.ticker, earnings.actual)
//MA For double confirmation

out = ta.sma(close, 200)
outf = ta.sma(close, 50)
outn = ta.sma(close, 90)
outt = ta.sma(close, 21)
outthree = ta.sma(close, 9)

// Predicted stock price based on volume
predicted_price = a + b*vol

// Check if predicted price is between open and close
is_between = open < predicted_price and predicted_price < close

//MACD
//[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)

// Plot predicted stock price
plot(predicted_price, color=color.rgb(65, 59, 150), linewidth=2, title="Predicted Price")
plot(ta.sma(predicted_price,linearlen), color=color.rgb(199, 43, 64), linewidth=2, title="MA Predicted Price")
//offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
plot(out, color=color.blue, title="MA200")
[macdLine, signalLine, histLine] = ta.macd(predicted_price, 12, 26, 9)

//BUY Signal

longCondition=false
mafentry =ta.sma(close, 50) > ta.sma(close, 90)
//matentry = ta.sma(close, 21) > ta.sma(close, 50)
matwohun = close > ta.sma(close, 200)
twohunraise = ta.rising(out, 2)
twentyrise = ta.rising(outt, 2)
macdrise = ta.rising(macdLine,2)
macdlong = ta.crossover(predicted_price, ta.wma(predicted_price,linearlen))  and (signalLine < macdLine)
if macdlong and macdrise
    longCondition := true

if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)
//Sell Signal
lastEntryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)
daysSinceEntry = len
daysSinceEntry := int((time - strategy.opentrades.entry_time(strategy.opentrades - 1)) / (24 * 60 * 60 * 1000))
percentageChange = (close - lastEntryPrice) / lastEntryPrice * 100
//trailChange = (ta.highest(close,daysSinceEntry) - close) / close * 100

//label.new(bar_index, high, color=color.black, textcolor=color.white,text=str.tostring(int(trailChange)))
shortCondition=false
mafexit =ta.sma(close, 50) < ta.sma(close, 90)
matexit = ta.sma(close, 21) < ta.sma(close, 50)
matwohund = close < ta.sma(close, 200)
twohunfall = ta.falling(out, 3)
twentyfall = ta.falling(outt, 2)
shortmafall = ta.falling(outthree, 1)
macdfall = ta.falling(macdLine,1)
macdsell = macdLine < signalLine
if macdfall and macdsell and (macdLine < signalLine) and ta.falling(low,2)
    shortCondition := true

if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)




Mehr