Tendance quantitative à la suite de la stratégie

Auteur:ChaoZhang est là., Date: 2024-01-04 15h25 et 42 min
Les étiquettes:

img

Résumé

Quant Trend Following est une stratégie de suivi de tendance basée sur les lignes EMA et ATR stop loss.

Principaux

La stratégie se compose principalement des éléments suivants:

  1. Lignes EMA pour déterminer la tendance primaire

    Utilisez des lignes de 13 jours, 50 jours et 100 jours pour former un biais haussier/baissier et juger de la direction principale de la tendance.

  2. Perte de freinage dynamique ATR

    Utiliser l'indicateur ATR pour calculer la fourchette de mouvements de prix de la période en cours et définir le prix stop-loss pour verrouiller les bénéfices.

  3. Lissage du signal

    Des prix de clôture lisses sur une certaine période avec SMA pour éviter de faux signaux.

  4. Signaux haussiers ou baissiers

    Allez long quand le prix dépasse les lignes EMA, allez court quand il dépasse les lignes inférieures.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. Excellent contrôle de l'écoulement, écoulement maximal à 160%.
  2. Un stop loss dynamique est plus intelligent qu'un stop loss fixe, et peut générer plus de bénéfices.
  3. L'utilisation de l'EMA pour déterminer la tendance primaire évite les opérations de renversement.
  4. Les barres lisses filtrent les faux signaux et améliorent le taux de victoire.

Analyse des risques

Il y a aussi des risques:

  1. Les paramètres statiques peuvent ne pas convenir à différents produits, une optimisation est nécessaire.
  2. Le stop-loss peut se détériorer sur des marchés variés.
  3. Requiert la stabilité du serveur pour éviter les signaux manquants.

Ces risques peuvent être réduits par l'optimisation des paramètres, les tests d'adaptabilité, etc.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Optimisation automatisée des paramètres avec des algorithmes d'apprentissage automatique.
  2. L'exposition au risque est calculée sur la base de l'exposition au risque.
  3. Augmenter les filtres composés pour améliorer la stabilité.
  4. Considérez des tests croisés pour améliorer l'adaptabilité.

Conclusions

En résumé, il s'agit d'une stratégie quantitative conçue sur la base du concept de suivi des tendances. Elle détermine la direction de la tendance avec l'EMA et utilise un stop loss ATR dynamique. Elle peut contrôler efficacement le repli tout en capturant les profits de la tendance. L'optimisation et l'itération continues peuvent générer des résultats améliorés.


/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Combined Strategy", overlay=true)

// Input variables for EMA Crossover
ema13_length = input(13, title="EMA 13 Length")
ema50_length = input(50, title="EMA 50 Length")
ema100_length = input(100, title="EMA 100 Length")
ema200_length = input(200, title="EMA 200 Length")

// Calculate EMAs for EMA Crossover
ema13 = ema(close, ema13_length)
ema50 = ema(close, ema50_length)
ema100 = ema(close, ema100_length)
ema200 = ema(close, ema200_length)

// Plot EMAs for EMA Crossover
plot(ema13, color=color.blue, title="EMA 13")
plot(ema50, color=color.orange, title="EMA 50")
plot(ema100, color=color.green, title="EMA 100")
plot(ema200, color=color.red, title="EMA 200")

// Input variables for LinReg Candles
signal_length = input(title="Signal Smoothing", type=input.integer, minval=1, maxval=200, defval=11)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=true)

lin_reg = input(title="Lin Reg", type=input.bool, defval=true)
linreg_length = input(title="Linear Regression Length", type=input.integer, minval=1, maxval=200, defval=11)

// Calculate LinReg Candles
bopen = lin_reg ? linreg(open, linreg_length, 0) : open
bhigh = lin_reg ? linreg(high, linreg_length, 0) : high
blow = lin_reg ? linreg(low, linreg_length, 0) : low
bclose = lin_reg ? linreg(close, linreg_length, 0) : close

r = bopen < bclose

signal = sma_signal ? sma(bclose, signal_length) : ema(bclose, signal_length)

plotcandle(r ? bopen : na, r ? bhigh : na, r ? blow: na, r ? bclose : na, title="LinReg Candles", color=color.green, wickcolor=color.green, bordercolor=color.green, editable=true)
plotcandle(r ? na : bopen, r ? na : bhigh, r ? na : blow, r ? na : bclose, title="LinReg Candles", color=color.red, wickcolor=color.red, bordercolor=color.red, editable=true)

plot(signal, color=color.white)

// Input variables for UT Bot Alerts
a = input(1, title="Key Value. 'This changes the sensitivity'")
c = input(10, title="ATR Period")
h = input(false, title="Signals from Heikin Ashi Candles")

// Calculate UT Bot Alerts
xATR = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=false) : close

xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))

pos = 0   
pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 

xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

buy = src > xATRTrailingStop and above 
sell = src < xATRTrailingStop and below

barbuy = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

strategy.entry("Buy", strategy.long, when=buy)
strategy.close("Buy", when=sell)
strategy.entry("Sell", strategy.short, when=sell)
strategy.close("Sell", when=buy)

plotshape(buy, title="Buy", text='Buy', style=shape.labelup, location=location.belowbar, color=color.green, textcolor=color.white, transp=0, size=size.tiny)
plotshape(sell, title="Sell", text='Sell', style=shape.labeldown, location=location.abovebar, color=color.red, textcolor=color.white, transp=0, size=size.tiny)

barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)

alertcondition(buy, "UT Long", "UT Long")
alertcondition(sell, "UT Short", "UT Short")


Plus de