La stratégie de rétrogradation linéaire longue courte est une stratégie d'analyse technique qui utilise un modèle de régression linéaire pour prédire les mouvements de prix futurs d'un stock. Le principe de base de la stratégie est le suivant: les mouvements de prix des actions suivent souvent une certaine tendance linéaire, et en calculant la régression linéaire du prix, le prix futur peut être prédit.
La stratégie calcule d'abord la régression linéaire du prix des actions sur une certaine période de temps. La régression linéaire correspond à une ligne droite en utilisant la méthode des moindres carrés, qui représente la tendance du prix à changer au fil du temps. La stratégie trace ensuite la ligne de prix prévue et le prix actuel sur le graphique.
La stratégie définit deux signaux:
Lorsque le signal long apparaît, la stratégie ouvre une position longue; lorsque le signal court apparaît, elle ferme la position.
Les principales étapes de la stratégie sont les suivantes:
La stratégie de croisement de régression linéaire longue-courte présente les avantages suivants:
Malgré ses nombreux avantages, la stratégie de croisement de régression linéaire longue-courte comporte également certains risques:
La stratégie de régression linéaire à court terme génère des signaux de trading basés sur la comparaison du prix prédit à partir de la régression linéaire et du prix actuel. La logique de la stratégie est simple et claire, et elle peut capturer la tendance linéaire du prix et s'applique à diverses conditions de marché. Dans le même temps, la stratégie est facile à mettre en œuvre et à optimiser, et les paramètres peuvent être ajustés de manière flexible, combinés à d'autres indicateurs, des modules de contrôle des risques peuvent être ajoutés, etc., pour améliorer continuellement la performance de la stratégie. Cependant, la stratégie comporte également des risques tels que la reconnaissance inexacte de la tendance, des paramètres inappropriés, et le surchargement des données historiques, il faut donc faire preuve de prudence dans l'application pratique.
/*backtest start: 2024-02-25 00:00:00 end: 2024-03-26 00:00:00 period: 3h basePeriod: 15m 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/ // © stocktechbot //@version=5 strategy("Linear Cross", overlay=true, margin_long=100, margin_short=0) //Linear Regression vol = volume // Function to calculate linear regression linregs(y, x, len) => ybar = math.sum(y, len)/len xbar = math.sum(x, len)/len b = math.sum((x - xbar)*(y - ybar),len)/math.sum((x - xbar)*(x - xbar),len) a = ybar - b*xbar [a, b] // Historical stock price data price = close // Length of linear regression len = input(defval = 21, title = 'Strategy Length') linearlen=input(defval = 9, title = 'Linear Lookback') [a, b] = linregs(price, vol, len) // Calculate linear regression for stock price based on volume //eps = request.earnings(syminfo.ticker, earnings.actual) //MA For double confirmation out = ta.sma(close, 200) outf = ta.sma(close, 50) outn = ta.sma(close, 90) outt = ta.sma(close, 21) outthree = ta.sma(close, 9) // Predicted stock price based on volume predicted_price = a + b*vol // Check if predicted price is between open and close is_between = open < predicted_price and predicted_price < close //MACD //[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) // Plot predicted stock price plot(predicted_price, color=color.rgb(65, 59, 150), linewidth=2, title="Predicted Price") plot(ta.sma(predicted_price,linearlen), color=color.rgb(199, 43, 64), linewidth=2, title="MA Predicted Price") //offset = input.int(title="Offset", defval=0, minval=-500, maxval=500) plot(out, color=color.blue, title="MA200") [macdLine, signalLine, histLine] = ta.macd(predicted_price, 12, 26, 9) //BUY Signal longCondition=false mafentry =ta.sma(close, 50) > ta.sma(close, 90) //matentry = ta.sma(close, 21) > ta.sma(close, 50) matwohun = close > ta.sma(close, 200) twohunraise = ta.rising(out, 2) twentyrise = ta.rising(outt, 2) macdrise = ta.rising(macdLine,2) macdlong = ta.crossover(predicted_price, ta.wma(predicted_price,linearlen)) and (signalLine < macdLine) if macdlong and macdrise longCondition := true if (longCondition) strategy.entry("My Long Entry Id", strategy.long) //Sell Signal lastEntryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1) daysSinceEntry = len daysSinceEntry := int((time - strategy.opentrades.entry_time(strategy.opentrades - 1)) / (24 * 60 * 60 * 1000)) percentageChange = (close - lastEntryPrice) / lastEntryPrice * 100 //trailChange = (ta.highest(close,daysSinceEntry) - close) / close * 100 //label.new(bar_index, high, color=color.black, textcolor=color.white,text=str.tostring(int(trailChange))) shortCondition=false mafexit =ta.sma(close, 50) < ta.sma(close, 90) matexit = ta.sma(close, 21) < ta.sma(close, 50) matwohund = close < ta.sma(close, 200) twohunfall = ta.falling(out, 3) twentyfall = ta.falling(outt, 2) shortmafall = ta.falling(outthree, 1) macdfall = ta.falling(macdLine,1) macdsell = macdLine < signalLine if macdfall and macdsell and (macdLine < signalLine) and ta.falling(low,2) shortCondition := true if (shortCondition) strategy.entry("My Short Entry Id", strategy.short)