Strategie für den Ausbruch von Handelsgeschäften mit linearem Regressionskanal

Schriftsteller:ChaoZhang, Datum: 2024-02-18 15:00:53
Tags:

img

Übersicht

Diese Strategie verwendet die oberen und unteren Bands des linearen Regressionskanals, kombiniert mit doppelter Standardabweichung, um Ausbruch-Kauf- und Verkaufssignale zu setzen, um Positionen zu etablieren, wenn die Preise ausbrechen.

Strategie Logik

Die Kernlogik dieser Strategie basiert auf dem oberen, unteren und mittleren Band des linearen Regressionskanals.

  1. Berechnen Sie den linearen Regressionswert linreg der Preise und den linearen Regressionswert linreg_p der nächsten Periode

  2. Berechnen Sie die Steigung Steigung und Schnitt Schnitt der linearen Regressionslinie auf der Grundlage von linreg

  3. Berechnung der Abweichung der Preise in Bezug auf die Regressionslinie

  4. Setzen Sie das Vielfache der Abweichung dev das Verschieben der oberen und unteren Bänder zu erhalten

  5. Wenn der Preis aus dem unteren Band nach oben bricht, setzen Sie Kaufsignal kaufen

  6. Wenn der Preis aus dem oberen Band nach unten bricht, setzen Sie Verkaufssignal verkaufen

  7. Wenn sich der Preis von der mittleren Linie des Kanals umkehrt, setzt sich das Gewinnsignal aus

  8. Einrichtung einer Handelslogik auf der Grundlage von Kauf-, Verkaufs- und Ausstiegssignalen

Analyse der Vorteile

Der größte Vorteil dieser Strategie besteht darin, dass sie den mittelfristigen und langfristigen Trend nutzt, der sich durch den linearen Regressionskanal widerspiegelt.

  1. Die oberen und unteren Bands können effektiv den normalen Bereich der Kursschwankungen widerspiegeln.

  2. Die mittlere Linie als Gewinnsignal kann die Gewinne maximieren und Verluste verhindern, die durch Umkehrungen nach Gewinn erzielt werden.

  3. Der lineare Regressionskanal weist eine gewisse Verzögerung auf, die kurzfristige Marktgeräusche effektiv filtern und Handelssignale zuverlässiger machen kann.

  4. Diese Strategie hat nur wenige Parameter und ist leicht umzusetzen und eignet sich für den algorithmischen Handel.

Risikoanalyse

Diese Strategie birgt einige Risiken:

  1. Die Verzögerung des linearen Regressionskanals kann Trends nach drastischen kurzfristigen Veränderungen verpassen.

  2. Eine unsachgemäße Einstellung des Abweichungsmultiplikators kann auch zu falschen Signalen führen.

  3. Wenn man sich ausschließlich auf Ausbruchssignale verlässt, kann dies zu Verlusten führen. Für die Signalfilterung können andere Indikatoren verwendet werden.

  4. Die Kombination mit anderen Kanalindikatoren oder das Testen verschiedener Datenquellen kann helfen.

Optimierungsrichtlinien

Die wichtigsten Optimierungsrichtungen für diese Strategie sind:

  1. Optimieren Sie die Länge des linearen Regressionskanals, um Verzögerung und Empfindlichkeit auszugleichen.

  2. Optimieren Sie den Abweichungsmultiplikator, um die Signalqualität zu verbessern und gleichzeitig die Risikokontrolle zu maximieren.

  3. Hinzufügen anderer Indikatoren zur Signalfilterung zur Verbesserung der Gewinnrate, z. B. EMA, KDJ usw.

  4. Hinzufügen von Stop-Loss-Mechanismen wie ATR Trailing Stop-Loss.

  5. Prüfung der Auswirkungen verschiedener Datenquellen auf die Strategie, z. B. angepasster Abschluss, Indexdaten usw.

  6. Dynamische Anpassung von Parametern oder Signalgewichten basierend auf den Marktbedingungen.

Schlussfolgerung

Zusammenfassend ist dies ein Breakout-System, das den linearen Regressionskanal als Signalindikator verwendet. Die Strategielogik ist klar und leicht zu verstehen, mit wenigen Parametern, was den Live-Handel relativ einfach umzusetzen macht. Wie man jedoch die Parameter dynamisch auf der Grundlage veränderter Marktbedingungen optimiert und andere Indikatoren zur Signalfilterung kombiniert, ist der Schlüssel zum Erfolg dieser Strategie. Durch kontinuierliche Tests und Optimierungen kann diese Strategie zu einem stabilen, gewinnbringenden quantitativen System werden.


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

Mehr