Strategie auf Basis von gleitenden Durchschnitten und Supertrends

Schriftsteller:ChaoZhang, Datum: 2023-11-14 16:23:42
Tags:

img

Übersicht

Diese Strategie kombiniert gleitende Durchschnittswerte und Supertrendindikatoren, um dem Trend zu folgen.

Strategie Logik

  1. Berechnen Sie den gewichteten gleitenden Durchschnitt MA. Verwenden Sie Volumen als Gewicht, um den gewichteten Durchschnittspreis über einen Zeitraum zu berechnen.

  2. Berechnen Sie den gleitenden Hull-Durchschnitt auf der Grundlage von MA. Der gleitende Hull-Durchschnitt ist empfindlicher auf Preisänderungen.

  3. Berechnen Sie den Super Trend Indikator. Super Trend kombiniert ATR, um Trendänderungen zu identifizieren. Es berechnet die oberen und unteren Bands.

  4. Wenn der Schnitt über dem oberen Band liegt, gehen Sie lang, wenn der Schnitt unter dem unteren Band liegt, gehen Sie kurz.

  5. Zeichnen Sie Hilfsindikatoren wie offen, dicht, hoch und niedrig, um die Kursbewegungen visuell zu beobachten.

  6. Handel Entscheidungen auf der Grundlage von Indikator-Crossovers.

Analyse der Vorteile

  1. Die Strategie kombiniert sowohl gleitenden Durchschnitt als auch Supertrend und ermöglicht eine genauere Trenddetektion.

  2. Der gleitende Durchschnitt ist empfindlicher auf Kursänderungen und hilft bei einer zeitnahen Umkehrung des Spottrends.

  3. Der Super Trend passt die oberen und unteren Bands dynamisch an, um sich an die Marktvolatilität anzupassen.

  4. Hilfsindikatoren zeigen die Kursbewegungen visuell an, um die Entscheidungsfindung mit Indikatorsignalen zu unterstützen.

  5. Die Strategie ermöglicht die Optimierung von Parametern für den gleitenden Durchschnitt, den Supertrend-Multiplikator usw.

Risikoanalyse

  1. Whipsaws können falsche Signale während von Range-bound Markten erzeugen und unnötige Trades verursachen.

  2. Die Überwachung mehrerer Indikatoren kann die Umsetzung der Strategie relativ kompliziert machen.

  3. Die Parameter müssen entsprechend den Eigenschaften der verschiedenen Produkte angepasst werden.

  4. Eine strikte Stop-Loss-Regelung ist erforderlich, um Verluste bei einzelnen Positionen zu begrenzen.

  5. Die hohe Handelsfrequenz erfordert die Kontrolle der Auswirkungen durch die Provisionen.

Optimierungsrichtlinien

  1. Testen Sie verschiedene gleitende Durchschnitte, um einen zu finden, der für den Markt empfindlicher ist.

  2. Testen Sie verschiedene Super-Trend-Multiplikatoren, um Trendveränderungen zeitlich zu erfassen.

  3. Einbeziehung eines Volatilitätsindex zur Verringerung der Positionsgröße bei steigender Volatilität.

  4. Hinzufügen von Ausbruchbedingungen, um falsche Signale während der Bereichsbegrenzung zu vermeiden.

  5. Optimierung der Stop-Loss-Strategie, um sie an die Marktbedingungen anzupassen.

Zusammenfassung

Diese Strategie beurteilt die Trendrichtung, indem sie sowohl den gleitenden Durchschnitt als auch den Supertrend verwendet, um dem Trend zu folgen. Der Vorteil besteht in der gegenseitigen Verifizierung zwischen Indikatoren für eine genauere Trenddetektion. Aber man sollte auf falsche Signale achten. Die Strategie kann durch Parameteroptimierung und Risikokontrolle weiter verbessert werden. Sie eignet sich für Trends nach Operationen mit Instrumenten mit starken Trending-Eigenschaften.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 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/
// © rajukpatel

//@version=5
strategy('My RK Strategy with Alert', shorttitle='My RK Strategy with Alert', overlay=true )
src5 = input(close)

tf = input(1440)
len5 = timeframe.isintraday and timeframe.multiplier >= 1 ? tf / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7

ma = ta.ema(src5 * volume, len5) / ta.ema(volume, len5)


//script taken from https://www.tradingview.com/script/kChCRRZI-Hull-Moving-Average/

src1 = ma

p(src1, len5) =>
    n = 0.0
    s = 0.0
    for i = 0 to len5 - 1 by 1
        w = (len5 - i) * len5
        n += w
        s += src5[i] * w
        s
    s / n

hm = 2.0 * p(src1, math.floor(len5 / 3)) - p(src1, len5)
vhma = p(hm, math.floor(math.sqrt(len5)))
lineColor = vhma > vhma[1] ? color.lime : color.red
plot(vhma, title='VHMA', color=lineColor, linewidth=3)
hColor = true
vis = true
hu = hColor ? vhma > vhma[2] ? #00ff00 : #ff0000 : #ff9800

vl = vhma[0]
ll = vhma[1]
m1 = plot(vl, color=hu, linewidth=1, transp=60)
m2 = plot(vis ? ll : na, color=hu, linewidth=2, transp=80)

fill(m1, m2, color=hu, transp=70)
//

b = timeframe.isintraday and timeframe.multiplier >= 1 ? 60 / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7



//
res5 = input.timeframe('D')

o = request.security(syminfo.tickerid, res5, open, barmerge.gaps_off, barmerge.lookahead_on)
c = request.security(syminfo.tickerid, res5, close, barmerge.gaps_off, barmerge.lookahead_on)
hz = request.security(syminfo.tickerid, res5, high, barmerge.gaps_off, barmerge.lookahead_on)
l = request.security(syminfo.tickerid, res5, low, barmerge.gaps_off, barmerge.lookahead_on)



col = c >= o ? color.lime : color.red

ppo = plot(b ? o >= c ? hz : l : o, color=col, title='Open', style=plot.style_stepline, transp=100)
ppc = plot(b ? o <= c ? hz : l : c, color=col, title='Close', style=plot.style_stepline, transp=100)

plot(b and hz > c ? hz : na, color=col, title='High', style=plot.style_circles, linewidth=2, transp=60)
plot(b and l < c ? l : na, color=col, title='Low', style=plot.style_circles, linewidth=2, transp=60)

fill(ppo, ppc, col, transp=90)

//
// INPUTS //
st_mult = input.float(1, title='SuperTrend Multiplier', minval=0, maxval=100, step=0.01)
st_period = input.int(50, title='SuperTrend Period', minval=1)

// CALCULATIONS //
up_lev = l - st_mult * ta.atr(st_period)
dn_lev = hz + st_mult * ta.atr(st_period)

up_trend = 0.0
up_trend := c[1] > up_trend[1] ? math.max(up_lev, up_trend[1]) : up_lev

down_trend = 0.0
down_trend := c[1] < down_trend[1] ? math.min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := c > down_trend[1] ? 1 : c < up_trend[1] ? -1 : nz(trend[1], 1)

// Calculate SuperTrend Line
st_line = trend == 1 ? up_trend : down_trend

// Plotting
//plot(st_line[1], color = trend == 1 ? color.green : color.red , style = plot.style_cross, linewidth = 2, title = "SuperTrend")
buy = ta.crossover(c, st_line)
sell = ta.crossunder(c, st_line)
signal = input(false)

/////////////// Plotting /////////////// 
plotshape(signal and buy, style=shape.triangleup, size=size.normal, location=location.belowbar, color=color.new(color.lime, 0))
plotshape(signal and sell, style=shape.triangledown, size=size.normal, location=location.abovebar, color=color.new(color.red, 0))


if buy
    strategy.entry('My Long Entry Id', strategy.long)

if sell
    strategy.entry('My Short Entry Id', strategy.short)



Mehr