Strategie zur Umkehrung des dynamischen Mustertrends

Schriftsteller:ChaoZhang, Datum: 2023-12-13 16:52:34
Tags:

img

Übersicht

Die Dynamic Pattern Trend Reversal Strategie verwendet lineare Regression, um Preise und gleitende Durchschnittslinien vorherzusagen, um ein Muster für die Erzeugung von Handelssignalen zu bilden.

Strategie Logik

  1. Berechnung der linearen Regression des Aktienkurses basierend auf dem Handelsvolumen, um den prognostizierten Preis zu erhalten
  2. Berechnung gleitender Durchschnitte unter verschiedenen Bedingungen
  3. Erzeugen Sie ein Kaufsignal, wenn der prognostizierte Preis den gleitenden Durchschnitt nach oben überschreitet
  4. Erzeugen Sie ein Verkaufssignal, wenn der prognostizierte Preis den gleitenden Durchschnitt nach unten überschreitet
  5. Einbeziehung des MACD-Indikators zur Bestimmung des Zeitpunktes der Trendumkehrung

Die Kombination der oben genannten Signale mit mehreren Bestätigungen verhindert falsche Ausbrüche und verbessert die Genauigkeit.

Analyse der Vorteile

  • Verwenden Sie lineare Regression, um den Preistrend vorherzusagen und die Signalgenauigkeit zu verbessern
  • Erfassen von Trendumkehrungen über gleitende Durchschnittsmuster
  • Regression basierend auf dem Handelsvolumen hat eine bessere wirtschaftliche Bedeutung
  • Mehrfache Bestätigungen durch den MACD usw. verringern falsche Signale

Risikoanalyse

  • Parameter der linearen Regression wirken sich signifikant auf die Ergebnisse aus
  • Die Einstellungen für gleitende Durchschnittswerte beeinflussen auch die Signalqualität
  • Trotz der Bestätigung bleiben falsche Signale ein Risiko.
  • Der Code kann weiter optimiert werden, um die Handelshäufigkeit zu reduzieren und die Gewinnrate zu verbessern

Optimierungsrichtlinien

  • Optimierung von Parametern der linearen Regression und gleitenden Durchschnittswerte
  • Mehr Bestätigungsbedingungen hinzufügen, um die Falschsignalrate zu senken
  • Einbeziehung weiterer Faktoren zur Bewertung der Qualität von Trendumkehrungen
  • Verbesserung der Stop-Loss-Strategien zur Verringerung der Risiken für einzelne Trades

Schlussfolgerung

Die Dynamic Pattern Trend Reversal Strategie integriert die lineare Regressionsvorhersage und gleitende Durchschnittsmuster, um Trendumkehrungen zu erfassen. Im Vergleich zu Einzelindikatorstrategien hat sie eine höhere Zuverlässigkeit. Weitere Verbesserungen bei Parametern, Bestätigungen und anderen Optimierungen können die Signalqualität und Rentabilität verbessern.


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 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 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