Breakout-Handelsstrategie basierend auf einem linearen Regressionskanal


Erstellungsdatum: 2024-02-18 15:00:53 zuletzt geändert: 2024-02-18 15:00:53
Kopie: 1 Klicks: 1045
1
konzentrieren Sie sich auf
1617
Anhänger

Breakout-Handelsstrategie basierend auf einem linearen Regressionskanal

Überblick

Die Strategie nutzt die Auf- und Abwärtsbahn des linearen Regressionskanals in Kombination mit dem Doppelstandard-Differenz-Setting, um die Kauf- und Verkaufssignale zu durchbrechen, um nach dem Preisbruch eine Position zu eröffnen. Die Kreuzung der Mittellinie des Kanals wird gleichzeitig als Flachlagersignal verwendet, um nach dem Gewinn zu stoppen.

Strategieprinzip

Die Kernlogik der Strategie basiert auf den oberen und unteren Bahnen der linearen Regressionskanäle sowie auf der Mittellinie. Die spezifische Berechnung erfolgt wie folgt:

  1. Berechnen Sie die lineare Regression des Preises linreg, sowie die lineare Regression des nächsten Zyklus linreg_p

  2. Die Steigung und der Schnittpunkt der Linearregration basierend auf den linearen Regressionswerten

  3. Berechnung der Abweichung des Preises von der Regression

  4. Setzen Sie die Multiplikatoren der Abweichung dev, um die Abweichung von Ober- und Unterbahn zu erhalten

  5. Setzen Sie ein Buy-Signal, wenn der Preis von der Unterbahn aufwärts bricht

  6. Wenn der Preis von der oberen Bahn nach unten bricht, wird ein Verkaufssignal gesetzt

  7. Wenn der Preis von der Mittellinie abweicht, setze ein Stoppsignal exit

  8. Die Handelslogik basierend auf den Signalen Kauf, Verkauf und Stopp

Analyse der Stärken

Der größte Vorteil dieser Strategie liegt in der Nutzung der mittleren und langen Preisentwicklung, die durch die lineare Rücklaufkanäle reflektiert wird. Dies zeigt sich insbesondere in folgenden Aspekten:

  1. Die oberen und unteren Schienen eines linearen Regressionskanals können den normalen Bereich der Preisschwankungen effektiv widerspiegeln und die Handelssignale mithilfe der Kanalräume einstellen, um falsche Signale zu reduzieren.

  2. Durch das Kreuzen der Mittellinie kann ein maximaler Gewinn gesichert werden, um Verluste zu vermeiden, die durch eine weitere Umkehrung nach dem Gewinn entstehen.

  3. Die lineare Regression hat eine gewisse Verzögerung und kann kurzfristigen Marktlärm ausfiltern und Handelssignale zuverlässiger machen.

  4. Die Strategie hat weniger Parameter, ist einfach zu implementieren und eignet sich für die Algorithmierung von quantifizierten Transaktionen.

Risikoanalyse

Die Strategie birgt auch einige Risiken, die sich in folgenden Punkten widerspiegeln:

  1. Lineare Regressionskanäle sind rückläufig und können kurzfristige Trends nach starken Veränderungen übersehen. Sie können den Kanalzyklus entsprechend verkürzen und die Parameter optimieren.

  2. Die falsche Einstellung der Abweichungsmenge kann auch zu Fehlsignalen führen. Sie kann mit Rückmessoptimierungsparametern kombiniert werden.

  3. Aufgrund von Durchbruchsignalen allein kann es zu Schwingungsverlusten kommen. Eine Filterung in Kombination mit anderen Indikatoren kann in Betracht gezogen werden.

  4. Es besteht ein gewisses Risiko für die Kurvenübereinstimmung. Es kann in Verbindung mit anderen Channel-Indikatoren in Betracht gezogen werden oder verschiedene Datenquellen getestet werden.

Optimierungsrichtung

Die Strategie kann vor allem in folgenden Bereichen optimiert werden:

  1. Optimierung der Längen der linearen Regressionskanäle und Ausgleich von Verzögerung und Reaktionsempfindlichkeit.

  2. Optimierung der Schwankungsmenge, Verbesserung der Signalqualität unter maximaler Risikokontrolle.

  3. Hinzufügen anderer Kennzahlen zur Signalfilterung, um die Strategie-Gewinnrate zu erhöhen. z. B. EMA, KDJ usw.

  4. Erhöhung der Stop-Loss-Mechanismen, z. B. ATR-Stopp, Tracking-Stopp usw.

  5. Testen Sie die Auswirkungen verschiedener Datenquellen auf die Strategie. Zum Beispiel mit Rückstellungsdaten, Indexdaten usw.

  6. In Kombination mit dem Marktumfeld ((Mehrfachmarkt) dynamische Anpassung der Parameter oder der Signalgewichtung.

Zusammenfassen

Die Strategie als Ganzes ist ein bahnbrechendes System, das die lineare Regressionskanal als Signalindikator verwendet. Die Strategie ist klar und leicht verständlich, die Parameter sind gering und die Implementierung in der Praxis ist nicht sehr schwierig. Aber wie man die Parameter anpasst, um die Dynamik der Marktumgebung zu optimieren und die Signale in Kombination mit anderen Indikatoren zu filtern, ist der Schlüssel zum Erfolg der Strategie. Durch ständige Tests und Optimierungen kann die Strategie zu einem stabilen, profitablen quantitativen System werden.

Strategiequellcode
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Robotrading
//@version=4

strategy("robotrading linreg", "linreg", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, commission_value = 0.1)

//Settings
source      = input(close)
length      = input(100, minval=1)
offset      = input(0, minval=0)
dev         = input(2.0, "Deviation")
smoothing   = input(1, minval=1)
mtf_val     = input("", "Resolution", input.resolution)
signals     = input("Recent", "Signals Display", options=["Recent", "All"])
goto        = input(0, "End At Bar Index")

//Lin.reg.
cc(x) => x=="Red"?color.red:x=="Lime"?color.lime:x=="Orange"?color.orange:x=="Teal"?color.teal:x=="Yellow"?color.yellow:x=="Black"?color.black:color.white
data(x) => sma(security(syminfo.tickerid, mtf_val!="" ? mtf_val : timeframe.period, x), smoothing)
linreg = data(linreg(source, length, offset))
linreg_p = data(linreg(source, length, offset+1))

//Deviation
x = bar_index
slope = linreg - linreg_p
intercept = linreg - x*slope
deviationSum = 0.0
for i = 0 to length-1
    deviationSum:= deviationSum + pow(source[i]-(slope*(x-i)+intercept), 2)  
deviation = sqrt(deviationSum/(length))
x1 = x-length
x2 = x
y1 = slope*(x-length)+intercept
y2 = linreg

//Cross
dm_current = -deviation*dev + y2
dp_current = deviation*dev + y2
ex_current = (dm_current + dp_current) / 2
buy = crossunder(close, dm_current)
sell = crossover(close, dp_current)
exit = crossover(close, ex_current) or crossunder(close, ex_current)

//Channel
updating = goto <= 0 or x < goto
// if updating
//     line b = line.new(x1, y1, x2, y2, xloc.bar_index, extend.right, color.aqua, width = 3)
//     line.delete(b[1])
//     line dp = line.new(x1, deviation*dev + y1, x2, deviation*dev + y2, xloc.bar_index, extend.right, color.red, width = 3)
//     line.delete(dp[1])
//     line dm = line.new(x1, -deviation*dev + y1, x2, -deviation*dev + y2, xloc.bar_index, extend.right, color.lime, width = 3)
//     line.delete(dm[1])

//Lines
plot(dm_current, color = color.lime)
plot(dp_current, color = color.red)
plot(ex_current)
    
//Trading
if ex_current > 0
    strategy.entry("Long", strategy.long, na, limit = dm_current)
    strategy.entry("Short", strategy.short, na, limit = dp_current)
    strategy.exit("ExitLong", "Long", limit = ex_current)
    strategy.exit("ExitShort", "Short", limit = ex_current)