Quant-Trend nach Strategie

Schriftsteller:ChaoZhang, Datum: 2024-01-04 15:25:42
Tags:

img

Übersicht

Die Quant Trend Following Strategie ist eine Trend-Tracking-Strategie, die auf EMA-Linien und ATR-Stop Loss basiert.

Grundsätze

Die Strategie besteht aus folgenden Hauptteilen:

  1. EMA-Linien zur Bestimmung der primären Entwicklung

    Verwenden Sie 13-Tage-, 50-Tage- und 100-Tage-Linien, um eine bullische/bärenische Neigung zu bilden und die primäre Trendrichtung zu beurteilen.

  2. Dynamischer ATR-Stoppverlust

    Verwenden Sie den ATR-Indikator, um den Preisbewegungsbereich des laufenden Zeitraums zu berechnen und den Stop-Loss-Preis festzulegen, um Gewinne zu erzielen.

  3. Ausgleichen des Signals

    Glatte Schlusskursüber einen bestimmten Zeitraum mit SMA, um falsche Signale zu vermeiden.

  4. Aufwärts-/Bärssignale

    Gehen Sie lang, wenn der Preis über die EMA-Linien geht, gehen Sie kurz, wenn er darunter geht.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Ausgezeichnete Abbau-Kontrolle, maximale Abbau innerhalb von 160%.
  2. Ein dynamischer Stop-Loss ist klüger als ein fester, kann mehr Trendgewinne erzielen.
  3. Die Verwendung der EMA zur Bestimmung des primären Trends verhindert Umkehrtrades.
  4. Glättete Balken filtern gefälschte Signale und verbessern die Gewinnrate.

Risikoanalyse

Es gibt auch einige Risiken:

  1. Statische Parameter passen möglicherweise nicht zu verschiedenen Produkten, eine Optimierung ist erforderlich.
  2. Der Stop-Loss kann in verschiedenen Märkten ausfallen.
  3. Benötigt Serverstabilität, um fehlende Signale zu vermeiden.

Diese Risiken können durch Parameteroptimierung, Anpassungsfähigkeitstests usw. verringert werden.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Automatisierte Parameteroptimierung mit Algorithmen für maschinelles Lernen.
  2. Anpassungsfähige Stop-Loss auf Basis der Marktbedingungen hinzufügen.
  3. Mehr Filter, um die Stabilität zu verbessern.
  4. Um die Anpassungsfähigkeit zu verbessern, sollten Produktübergreifende Tests in Betracht gezogen werden.

Schlussfolgerungen

Zusammenfassend ist dies eine Quant-Strategie, die auf dem Konzept des Trendfolgens basiert. Sie bestimmt die Trendrichtung mit EMA und verwendet dynamischen ATR-Stop-Loss. Sie kann den Rückgang effektiv kontrollieren und gleichzeitig Trendgewinne erzielen.


/*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")


Mehr