Stratégie d'inversion de tendance du modèle dynamique

Auteur:ChaoZhang est là., Date: 2023-12-13 16:52:34 Je suis désolé
Les étiquettes:

img

Résumé

La stratégie d'inversion de tendance de modèle dynamique utilise la régression linéaire pour prédire les prix et les lignes moyennes mobiles pour former un modèle pour générer des signaux de trading.

La logique de la stratégie

  1. Calculer la régression linéaire du prix des actions en fonction du volume des transactions pour obtenir le prix prévu
  2. Calcul des moyennes mobiles dans différentes conditions
  3. Générer un signal d'achat lorsque le prix prévu dépasse la moyenne mobile à la hausse
  4. Générer un signal de vente lorsque le prix prévu dépasse la moyenne mobile descendante
  5. Incorporer l'indicateur MACD pour déterminer le moment de l'inversion de tendance

La combinaison des signaux ci-dessus avec des confirmations multiples évite de fausses fuites et améliore la précision.

Analyse des avantages

  • Utiliser la régression linéaire pour prédire la tendance des prix, améliorant la précision du signal
  • Capturez les renversements de tendance à l'aide de modèles de moyennes mobiles
  • La régression basée sur le volume des transactions a une meilleure signification économique
  • Plusieurs confirmations par MACD, etc. réduisent les faux signaux

Analyse des risques

  • Les paramètres de régression linéaire ont une incidence significative sur les résultats
  • Les paramètres de la moyenne mobile affectent également la qualité du signal
  • Malgré les confirmations, les faux signaux restent un risque
  • Le code peut être encore optimisé pour réduire la fréquence des transactions et améliorer le taux de profit

Directions d'optimisation

  • Optimiser les paramètres de régression linéaire et de moyennes mobiles
  • Ajouter plus de conditions de confirmation pour réduire les taux de faux signaux
  • Incorporer plus de facteurs pour juger de la qualité des renversements de tendance
  • Améliorer les stratégies de stop loss pour réduire les risques pour les transactions individuelles

Conclusion

La stratégie d'inversion de tendance de modèle dynamique intègre la prédiction de régression linéaire et les modèles de moyenne mobile pour capturer les inversions de tendance.


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 00:00:00
period: 1m
basePeriod: 1m
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)




Plus de