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.
Die Kernlogik dieser Strategie basiert auf dem oberen, unteren und mittleren Band des linearen Regressionskanals.
Berechnen Sie den linearen Regressionswert linreg der Preise und den linearen Regressionswert linreg_p der nächsten Periode
Berechnen Sie die Steigung Steigung und Schnitt Schnitt der linearen Regressionslinie auf der Grundlage von linreg
Berechnung der Abweichung der Preise in Bezug auf die Regressionslinie
Setzen Sie das Vielfache der Abweichung dev das Verschieben der oberen und unteren Bänder zu erhalten
Wenn der Preis aus dem unteren Band nach oben bricht, setzen Sie Kaufsignal kaufen
Wenn der Preis aus dem oberen Band nach unten bricht, setzen Sie Verkaufssignal verkaufen
Wenn sich der Preis von der mittleren Linie des Kanals umkehrt, setzt sich das Gewinnsignal aus
Einrichtung einer Handelslogik auf der Grundlage von Kauf-, Verkaufs- und Ausstiegssignalen
Der größte Vorteil dieser Strategie besteht darin, dass sie den mittelfristigen und langfristigen Trend nutzt, der sich durch den linearen Regressionskanal widerspiegelt.
Die oberen und unteren Bands können effektiv den normalen Bereich der Kursschwankungen widerspiegeln.
Die mittlere Linie als Gewinnsignal kann die Gewinne maximieren und Verluste verhindern, die durch Umkehrungen nach Gewinn erzielt werden.
Der lineare Regressionskanal weist eine gewisse Verzögerung auf, die kurzfristige Marktgeräusche effektiv filtern und Handelssignale zuverlässiger machen kann.
Diese Strategie hat nur wenige Parameter und ist leicht umzusetzen und eignet sich für den algorithmischen Handel.
Diese Strategie birgt einige Risiken:
Die Verzögerung des linearen Regressionskanals kann Trends nach drastischen kurzfristigen Veränderungen verpassen.
Eine unsachgemäße Einstellung des Abweichungsmultiplikators kann auch zu falschen Signalen führen.
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.
Die Kombination mit anderen Kanalindikatoren oder das Testen verschiedener Datenquellen kann helfen.
Die wichtigsten Optimierungsrichtungen für diese Strategie sind:
Optimieren Sie die Länge des linearen Regressionskanals, um Verzögerung und Empfindlichkeit auszugleichen.
Optimieren Sie den Abweichungsmultiplikator, um die Signalqualität zu verbessern und gleichzeitig die Risikokontrolle zu maximieren.
Hinzufügen anderer Indikatoren zur Signalfilterung zur Verbesserung der Gewinnrate, z. B. EMA, KDJ usw.
Hinzufügen von Stop-Loss-Mechanismen wie ATR Trailing Stop-Loss.
Prüfung der Auswirkungen verschiedener Datenquellen auf die Strategie, z. B. angepasster Abschluss, Indexdaten usw.
Dynamische Anpassung von Parametern oder Signalgewichten basierend auf den Marktbedingungen.
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)