Strategie für eine glatte Volatilitätsspanne

Schriftsteller:ChaoZhang, Datum: 2024-01-29 16:22:14
Tags:

img

Übersicht

Diese Strategie erzeugt Preisbänder basierend auf der glatten Volatilität des Preises und erzeugt Handelssignale, wenn der Preis die Bands durchbricht.

Strategie Logik

Die Strategie berechnet zunächst die durchschnittliche Volatilitätsspanne des Preises über einen bestimmten Zeitraum, glättet dann die Volatilitätsspanne mit einem exponentiellen gleitenden Durchschnitt, um eine glättete Volatilität zu erzeugen. Die glättete Volatilität multipliziert mit einem Koeffizienten gibt die Bandspanne. Wenn der Preis über das obere Band bricht, wird ein Kaufsignal generiert. Wenn der Preis unter das untere Band bricht, wird ein Verkaufssignal generiert.

Im Einzelnen wird die glatte Volatilität smrng durch die Smoothrng-Funktion berechnet. Das obere Band hband und das untere Band lband der Preisbänder werden dann auf der Grundlage von smrng berechnet. Auf dieser Grundlage werden die Long-Bedingung longCondition und die Short-Bedingung shortCondition eingerichtet. Wenn die LongCondition erfüllt ist, wird ein Kaufsignal generiert. Wenn die ShortCondition erfüllt ist, wird ein Verkaufssignal generiert.

Analyse der Vorteile

Die Vorteile dieser Strategie sind:

  1. Die Verwendung von Preisschwankungen zur Konstruktion von Handelssignalen kann Marktveränderungen wirksam verfolgen.

  2. Eine glättende Volatilität mit einem exponentiellen gleitenden Durchschnitt kann Lärm filtern und zuverlässigere Handelssignale erzeugen.

  3. Die Bandbreite kann durch den Volatilitätskoeffizienten angepasst werden, wodurch die Strategie flexibler wird.

  4. In Kombination mit dem Breakout-Urteil kann es Handelschancen rechtzeitig erfassen, wenn eine Trendwende eintritt.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Bei abnormaler Marktvolatilität kann die glättete Volatilität die tatsächliche Volatilität möglicherweise nicht genau widerspiegeln, was zu falschen Signalen führt.

  2. Eine unsachgemäße Einstellung des Bandbereichs kann zu einem Überhandel oder zu unzureichenden Signalen führen.

  3. Es gibt eine zeitliche Verzögerung bei den Ausbruchssignalen, was zu einem vorzeitigen oder verspäteten Eintritt führen kann.

Optimierungsrichtlinien

Die Strategie kann optimiert werden, indem:

  1. Prüfung verschiedener Preisdatenzyklen, um den am besten geeigneten Zeitraum für die Berechnung der Volatilität zu finden.

  2. Versuche verschiedene gleitende Durchschnittsalgorithmen, wie den gewichteten gleitenden Durchschnitt.

  3. Einführung von Handelsvolumen oder anderen Indikatoren zur Bestätigung von Ausbruchssignalen.

  4. Einstellung von Stop Loss oder Trailing Stop zur Kontrolle von Verlusten pro Handel.

  5. Optimierung des Volatilitätskoeffizienten-Mult zur Bestimmung des optimalen Bandbereichs.

Zusammenfassung

Die allgemeine Logik dieser Strategie ist klar, wobei die Preisvolatilität zur Konstruktion von Bands und Preisbreaks zur Erzeugung von Handelssignalen verwendet wird, die Markttrendänderungen effektiv verfolgen können.


/*backtest
start: 2023-01-22 00:00:00
end: 2024-01-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("1SmSm1 Strategy", shorttitle="1SmSm1", overlay=true)

// Source
src = input(defval=close, title="Source")

// Sampling Period
per = input(defval=100, minval=1, title="Sampling Period")

// Range Multiplier
mult = input(defval=3.0, minval=0.1, title="Range Multiplier")

// Smooth Average Range
smoothrng(x, t, m) =>
    wper = (t * 2) - 1
    avrng = ema(abs(x - x[1]), t)
    smoothrng = ema(avrng, wper) * m
    smoothrng

smrng = smoothrng(src, per, mult)

// Range Filter
rngfilt(x, r) =>
    rngfilt = x
    rngfilt := x > nz(rngfilt[1]) ? ((x - r) < nz(rngfilt[1]) ? nz(rngfilt[1]) : (x - r)) : ((x + r) > nz(rngfilt[1]) ? nz(rngfilt[1]) : (x + r))
    rngfilt

filt = rngfilt(src, smrng)

// Filter Direction
upward = 0.0
upward := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1])

downward = 0.0
downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1])

// Target Bands
hband = filt + smrng
lband = filt - smrng

// Breakouts
longCondition = (src > filt) and (src > src[1]) and (upward > 0)
shortCondition = (src < filt) and (src < src[1]) and (downward > 0)

strategy.entry("Buy", strategy.long, when = longCondition)
strategy.entry("Sell", strategy.short, when = shortCondition)

// Plotting
plot(filt, color=upward > 0 ? color.lime : downward > 0 ? color.red : color.orange, linewidth=3, title="Range Filter")
hbandplot = plot(hband, color=color.aqua, transp=100, title="High Target")
lbandplot = plot(lband, color=color.fuchsia, transp=100, title="Low Target")

// Fills
fill(hbandplot, lbandplot, color=color.aqua, title="Target Range")

// Bar Color
barcolor(longCondition ? color.green : shortCondition ? color.red : na)

// Alerts
alertcondition(longCondition, title="Buy Alert", message="BUY")
alertcondition(shortCondition, title="Sell Alert", message="SELL")

Mehr