Lineare MACD freischaltet die Magie der linearen Regression im TradingView

Schriftsteller:ChaoZhang, Datum: 15.12.2023
Tags:

img

Strategiebezeichnung: Momentumgetriebene lineare MACD-Strategie

Übersicht: Dies ist eine quantitative Strategie, die die lineare Regression nutzt, um die Aktienkurse in Kombination mit dem MACD-Indikator vorherzusagen. Sie nutzt die lineare Regressionsanalyse auf historische Preise und Volumina, um zukünftige Preistrends vorherzusagen. Sie verwendet dann den MACD-Indikator, um den Eintrittszeitpunkt zu bestimmen, wenn Gewinnmöglichkeiten entstehen.

Strategieprinzip:

  1. Berechnung der linearen Regressionskoeffizienten der Preise: Anpassen einer linearen Regressionslinie auf der Grundlage historischer Volumina, um zukünftige Preise vorherzusagen.
  2. Vorhersagte Preise zeichnen: Die Vorhersagelinie basierend auf Regressionskoeffizienten aus Schritt 1 zeichnen.
  3. Erzeugen Sie Kaufsignale: Wenn der vorhergesagte Preis zwischen dem Eröffnungs- und dem Schlusskurs liegt und der MACD steigt, erzeugen Sie Kaufsignale.
  4. Erstellen Sie Verkaufssignale: Wenn der MACD sinkt und der Preis unter dem vorhergesagten Preis liegt, erzeugen Sie Verkaufssignale.

Vorteilsanalyse: Diese Strategie kombiniert statistische Vorhersage und technisches Indikatorurteil. Sie leitet die Preisvorhersage mit linearer Regression ab und vermeidet subjektive Spekulationen. Mittlerweile kann der MACD-Indikator die Marktdynamik effektiv bestimmen und Chancen genau erfassen. Insgesamt hat diese Strategie ein hohes systematisches Niveau, eine genaue Vorhersage und kontrollierbare Risiken.

Risikoanalyse:
Die lineare Regression basiert ausschließlich auf historischen Daten und kann als Reaktion auf schwarze Schwanereignisse wie deutlich bärische Nachrichten falsche Signale erzeugen. Außerdem beeinflussen Parameter-Einstellungen wie Regressionszeitraumlängen die Strategieleistung. Wir empfehlen, vwma zu verwenden, um die vorhergesagte Kurskurve zu glätten, um Kurven jitters zu mildern, die die Strategie beeinflussen.

Optimierungsrichtlinien:
Wir sind der Ansicht, daß diese Strategie in folgenden Aspekten optimiert werden kann:

  1. Einbeziehen Sie einen Stop-Loss-Mechanismus. Schneiden Sie Verluste, wenn der Preis durch die Stop-Loss-Linien durchschreitet, indem Sie Positionen schließen. Dies kontrolliert effektiv Verluste, die durch gelegentliche falsche Signale verursacht werden.
  2. Einführung von Modellen des maschinellen Lernens, Annahme effizienterer Modelle zur Verbesserung der Vorhersagegenauigkeit.
  3. Einbeziehen Sie Stimmungsindizes, einschließlich Angstindizes, um die Stimmung des Marktes zu bestimmen und die Gewinnrate zu verbessern.
  4. Die Validierung von Vorhersagen über Zeiträume hinweg könnte eine kombinierte Strategie bilden, um die Einschränkungen eines einzigen Zeitrahmens zu überwinden.

Schlussfolgerung:
Diese Strategie erzeugt systematische Handelssignale, indem sie Preise mit linearer Regression prognostiziert und Einträge mit dem MACD-Indikator bestimmt. Zu ihren Vorteilen gehören eine klare vorausschauende Logik, kontrollierbare Risiken und ein ausreichender Optimierungsraum. Wir glauben, dass ihre Leistung durch kontinuierliche Optimierungen und Iterationen weiterhin hervorragend sein wird. Sie liefert Inspirationen für die Nutzung wissenschaftlicher Vorhersagemodelle zur Durchführung quantitativen Handels und verdient weitere Forschung und Anwendungen.


/*backtest
start: 2023-12-07 00:00:00
end: 2023-12-14 00:00:00
period: 1m
basePeriod: 1m
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 On MACD", overlay=true, margin_long=100, margin_short=100)



fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
tolerance = input.string(title="Risk tolerance", defval = "LOW", options=["LOW", "HIGH"])

chng = 0
obv = ta.cum(math.sign(ta.change(close)) * volume)
if close < close[1] and (open < close)
    chng := 1
else if close > close[1]
    chng := 1
else
    chng := -1
obvalt = ta.cum(math.sign(chng) * volume)
//src = input(title="Source", defval=close)
src = obvalt
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
//hline(0, "Zero Line", color=color.new(#787B86, 50))
//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
//plot(macd, title="MACD", color=col_macd)
//plot(signal, title="Signal", color=col_signal)
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)

//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 = 'Lookback')

// Calculate linear regression for stock price based on volume
[a, b] = linregs(price, vol, len)

// 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


// Plot predicted stock price
plot(predicted_price, color=color.rgb(218, 27, 132), linewidth=2, title="Predicted Stock Price")
plot(ta.vwma(predicted_price,len), color=color.rgb(199, 43, 64), linewidth=2, title="Predicted Stock Price")

//BUY Signal
lincrossunder = close > predicted_price
macdrise = ta.rising(macd,2)
//macdvollong = ta.crossover(macd, signal)
//macdlong = ta.crossover(macdLine, signalLine)
macdvollong = macd > signal
macdlong = macdLine > signalLine
longCondition=false
if macdlong and macdvollong and is_between and ta.rising(predicted_price,1)
    longCondition := true

if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)
//Sell Signal
lincrossover = close < predicted_price
macdfall = ta.falling(macd,1)
macdsell = macd < signal
shortCondition = false
risklevel = predicted_price
if (tolerance == "HIGH")
    risklevel := ta.vwma(predicted_price,len)


if macdfall and macdsell and (macdLine < signalLine) and (close < risklevel)
    shortCondition := true


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


Mehr