Die adaptive lineare Regressionskanalstrategie ist eine quantitative Handelsstrategie, die auf linearer Regressionsanalyse basiert. Die Strategie erfolgt durch Berechnung der linearen Regressionsgleichung des Wertpapierpreises innerhalb eines bestimmten Zeitraums.
Im Zentrum der adaptive linearen Rückkehrschrittstrategie steht die Berechnung der Schlusspreis-Linear-Rückkehrgleichung für eine bestimmte Anzahl von K-Wurzel-K-Linien, die eine Mittellinie bilden, die die mittleren Preise repräsentiert, eine Auffahrt, die die Preisspitze repräsentiert, und eine Abfahrt, die die Preisspitzen repräsentiert. Die spezifische Berechnung ist wie folgt:
Sammeln Sie die unabhängige Variable x und die abhängige Variable y einer K-Strecke, deren Inputparameterlength angegeben ist. Hier ist x die ganze Zahl von 1 bis zur Länge und y der Schlusspreis der entsprechenden K-Strecke.
Berechnung des Regressionskoeffizienten:
Berechnen Sie den für jede K-Leitung entsprechenden linearen Regressionswert y, Standarddifferenz STDDEV
Die Mittellinie ist die Regressionsgleichung y
Mit der Ankunft der neuen K-Linie werden die oberen Berechnungen rollend aktualisiert und bilden einen oben-unteren Anpassungskanal.
Die Adaptive Linear Return Path Strategie hat folgende Vorteile gegenüber der traditionellen Mittellinie:
Wissenschaftlich vernünftiger und statistisch relevanter als die Mittellinie
Sie sind flexibler und passen sich automatisch an, wenn sich die Preise ändern.
Wiederholung wirkt besser, bei einigen Sorten deutlich besser als die Mittelstreckenstrategie
Die Echtzeit-Verifizierung funktioniert gut, die Echtzeit-Performance ist zufriedenstellend
Die Strategie besteht hauptsächlich aus folgenden Risiken:
Bei zu starken Preisbewegungen entstehen große Verluste. Die Lösung besteht darin, die Parameter zu optimieren und die Stop-Loss-Situation zu ändern.
Ein falscher Kanal führt zu schlechten Tracking-Effekten. Die Lösung besteht darin, die Parameter in Kombination mit anderen technischen Indikatoren anzupassen.
Die Wiederholungsergebnisse scheinen gut zu sein, aber in der Praxis sind sie schlecht. Die Lösung besteht darin, die Parameter anzupassen und vollständig zu überprüfen.
Die Strategie kann in folgenden Dimensionen weiter optimiert werden:
Test mehr Parameterkombinationen, um die besten zu finden
In Kombination mit anderen technischen Indikatoren verhindern Sie Signalstörungen bei starken Trends.
Erhöhung der Strategie zur Verlustbekämpfung, Risikomanagement und Kapitalschutz
Zusätzliche Positionsmanagement-Module, die Positionsgröße entsprechend der Marktlage anpassen
Die Adaptive-Linear-Return-Channel-Strategie ist insgesamt eine gute Quantitationsstrategie. Sie ist theoretisch solide, in der Praxis gut und lohnt sich für weitere Forschung und Optimierung. Sie kann ein wirksamer Bestandteil eines quantitativen Handelssystems sein.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Stealthy 7 Linear Regression Channel Strategy", overlay=true) source = open length = input(100, minval=1) mult1 = input(1, minval=0.001, maxval=50) mult2 = input(1, minval=0.001, maxval=50) DayTrader = input(title="Range Mode", type=bool, defval=false) //Making the first least squares line sum_x = length * (length + 1) / 2 sum_y = 0 sum_xy = 0 xyproductsum = 0 sum_xx = 0 for i = 1 to length sum_y := sum_y + close[i] sum_xy := i * close[i] + sum_xy sum_xx := i * i + sum_xx m = (length*sum_xy - (sum_x * sum_y)) / (length * sum_xx - (sum_x * sum_x)) b = sum_y / length - (m * sum_x / length) //Finding the first standard deviation from the line difference = 0 for i = 1 to length y = i * m + b difference := pow(abs(close[i] - y),2) + difference STDDEV = sqrt(difference / length) //Creating trading zones dev = mult1 * STDDEV dev2 = mult2 * STDDEV upper = b + dev lower = b - dev2 middle = b if DayTrader == false if crossover(source, upper) strategy.entry("RGLONG", strategy.long, oca_name="RegChannel", comment="RegLong") else strategy.cancel(id="RGLONG") if crossunder(source, lower) strategy.entry("RGSHORT", strategy.short, oca_name="RegChannel", comment="RegShort") else strategy.cancel(id="RGSHORT") if crossover(source, middle) and strategy.position_size < 0 strategy.close_all() if crossunder(source,middle) and strategy.position_size > 0 strategy.close_all() if DayTrader == true if crossover(source, lower) strategy.entry("RGLONG", strategy.long, oca_name="RegChannel", comment="RegLong") else strategy.cancel(id="RGLONG") if crossunder(source, upper) strategy.entry("RGSHORT", strategy.short, oca_name="RegChannel", comment="RegShort") else strategy.cancel(id="RGSHORT") plot(upper, title="UpperBand", color=purple, linewidth=1, style=line) plot(lower, title="LowerBand", color=purple, linewidth=1, style=line) plot(middle, title="MiddleBand", color=black, linewidth=1, style=line)