Die Linear Regression Moving Average Handelsstrategie erzeugt Kauf- und Verkaufssignale basierend auf den Überschreitungen zwischen einer linearen Regressionslinie und dem gleitenden Durchschnitt des Aktienkurses.
Die Strategie berechnet zunächst eine n-tägige lineare Regressionslinie und einen m-tägigen gleitenden Durchschnitt des Aktienkurses.
Wenn der gleitende Durchschnitt über die Regressionslinie geht, signalisiert er eine Stärkung der Aufwärtsdynamik und erzeugt ein Kaufsignal.
Insbesondere folgt die Strategie den folgenden Schritten zur Bestimmung von Handelssignalen:
Berechnen Sie die n-Tage-Lineare Regressionslinie der Preise
Berechnen Sie den einfachen gleitenden Durchschnitt von lrLine, genannt lrMA
Berechnen Sie den m-Tage exponentiellen gleitenden Durchschnitt der Preise, genannt ema
Wenn die EMA über der lrMA liegt, wird ein Kaufsignal erzeugt.
Wenn die EMA unter die IRMA geht, wird ein Verkaufssignal generiert.
Kaufsignale sollten nur dann in Betracht gezogen werden, wenn der Markt bullisch ist
Ausführung von Geschäften auf der Grundlage der Signale
Durch die Verwendung von Crossover zwischen Regressions- und gleitenden Durchschnitten zur Bestimmung von Einträgen kann die Strategie falsche Breaks effektiv herausfiltern und Umkehrungen für niedrigen Kauf und hohen Verkauf identifizieren.
Die Parameter sollten so eingestellt werden, dass sie die Perioden für gleitende Durchschnittswerte und Regressionslinien erhöhen und die Handelsfrequenz reduzieren. Zur Kontrolle der Risiken sollten angemessene Stop-Losses implementiert werden. Die Marktfilter können verbessert werden, um die Genauigkeit zu verbessern.
Die Strategie kann in mehreren Aspekten optimiert werden:
Optimierung des gleitenden Durchschnitts durch Prüfung verschiedener Arten von MA
Optimierung der Regressionslinie durch Anpassung der Berechnungszeit
Optimierung des Marktfilters durch Prüfung verschiedener Indikatoren
Optimierung der Parameter durch strenge Backtesting
Stop-Loss-Optimierung durch Versuchung verschiedener Stop-Loss-Logiken
Kostenoptimierung durch Anpassung der Handelshäufigkeit anhand der Kosten
Diese Optimierungen können die Stabilität und Rentabilität der Strategie weiter verbessern.
Die Lineare Regressions-MA-Strategie integriert Stärken der Trendanalyse und der linearen Regression zur effektiven Identifizierung von Umkehrungen und zum Kauf von niedrigen Verkaufshöhen. Die einfache Strategie eignet sich für die Auswahl von Aktien über mittelfristige bis langfristige Zeiträume. Mit Parameter-Tuning und Risikokontrolle kann die Strategie noch höhere Stabilität erreichen. Sie bietet einen tragfähigen technischen Handelsrahmen für die Marktanalyse.
/*backtest start: 2022-10-18 00:00:00 end: 2023-10-24 00:00:00 period: 1d basePeriod: 1h 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/ // © lazy_capitalist //@version=5 strategy('Linear Regression MA', overlay=true, initial_capital=10000) datesGroup = "Date Info" startMonth = input.int(defval = 1, title = "Start Month", minval = 1, maxval = 12, group=datesGroup) startDay = input.int(defval = 1, title = "Start Day", minval = 1, maxval = 31, group=datesGroup) startYear = input.int(defval = 2022, title = "Start Year", minval = 1970, group=datesGroup) averagesGroup = "Averages" lrLineInput = input.int(title="Linear Regression Line", defval=55, minval = 1, group=averagesGroup) lrMAInput = input.int(title="Linear Regression MA", defval=55, minval = 1, group=averagesGroup) emaInput = input.int(title="EMA Length", defval=55, minval = 1, group=averagesGroup) tradesGroup = "Execute Trades" executeLongInput = input.bool(title="Execute Long Trades", defval=true) executeShortInput = input.bool(title="Execute Short Trades", defval=true) executeStopLoss = input.bool(title="Execute Stop Loss", defval=true) fourHrSMAExpr = ta.sma(close, 200) fourHrMA = request.security(symbol=syminfo.tickerid, timeframe="240", expression=fourHrSMAExpr) bullish = close > fourHrMA ? true : false maxProfitInput = input.float( title="Max Profit (%)", defval=10.0, minval=0.0) * 0.01 stopLossPercentageInput = input.float( title="Stop Loss (%)", defval=1.75, minval=0.0) * 0.01 start = timestamp(startYear, startMonth, startDay, 00, 00) // backtest start window window() => time >= start ? true : false // create function "within window of time" showDate = input(defval = true, title = "Show Date Range") lrLine = ta.linreg(close, lrLineInput, 0) lrMA = ta.sma(lrLine, lrMAInput) ema = ta.ema(close, emaInput) longEntry = ema < lrMA longExit = lrMA < ema shortEntry = lrMA < ema shortExit = ema < lrMA maxProfitLong = strategy.opentrades.entry_price(0) * (1 + maxProfitInput) maxProfitShort = strategy.opentrades.entry_price(0) * (1 - maxProfitInput) stopLossPriceShort = strategy.position_avg_price * (1 + stopLossPercentageInput) stopLossPriceLong = strategy.position_avg_price * (1 - stopLossPercentageInput) if(executeLongInput and bullish) strategy.entry( id="long_entry", direction=strategy.long, when=longEntry and window(), qty=10, comment="long_entry") strategy.close( id="long_entry", when=longExit, comment="long_exit") // strategy.close( id="long_entry", when=maxProfitLong <= close, comment="long_exit_mp") if(executeShortInput and not bullish) strategy.entry( id="short_entry", direction=strategy.short, when=shortEntry and window(), qty=10, comment="short_entry") strategy.close( id="short_entry", when=shortExit, comment="short_exit") // strategy.close( id="short_entry", when=maxProfitShort <= close, comment="short_exit_mp") if(strategy.position_size > 0 and executeStopLoss) strategy.exit( id="long_entry", stop=stopLossPriceLong, comment="exit_long_SL") strategy.exit( id="short_entry", stop=stopLossPriceShort, comment="exit_short_SL") // plot(series=lrLine, color=color.green) plot(series=lrMA, color=color.red) plot(series=ema, color=color.blue)