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.
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:
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:
Die lang-kurz-lineare Regressions-Crossover-Strategie hat folgende Vorteile:
Trotz seiner vielen Vorteile birgt die Lang-Kurz-Linear-Regressions-Kreuzung-Strategie auch einige Risiken:
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)