Handelsstrategie für Dual-Wave-Vibrationsfilter


Erstellungsdatum: 2023-11-13 10:38:20 zuletzt geändert: 2023-11-13 10:38:20
Kopie: 1 Klicks: 2569
1
konzentrieren Sie sich auf
1617
Anhänger

Handelsstrategie für Dual-Wave-Vibrationsfilter

Überblick

Die Doppelwellen-Vibrationsfilterstrategie ist eine Handelsstrategie, die auf Preisschwankungen basiert. Sie nutzt die durchschnittlichen Schwankungsbereiche zweier unterschiedlicher Parameter-Sätze, um die Beziehung zwischen Preisen und Schwankungsbereichen zu kombinieren, um ein Handelssignal zu erzeugen. Die Strategie ist für digitale Vermögenswerte mit hoher Volatilität wie Bitcoin geeignet.

Strategieprinzip

Die Strategie verwendet zwei glatte Schwankungsräume mit unterschiedlichen Periodenlängen: die Schnellschwankungsräume ([Default Cycle 27]) und die Schnellschwankungsräume ([Default Cycle 55]). Die Berechnungsformel für die Schwankungsräume lautet: Der Index-Moving-Average der Preisschwankungen in der aktuellen Periode multipliziert mit einem Faktor ([Default Cycle 1,6]).

Die Doppelwellen-Schock-Filter-Strategie vergleicht die Beziehung zwischen dem Preis und den beiden Schwankungsbereichs-Indikatoren, um zu beurteilen, ob sich der Preis innerhalb eines Schwankungsbereichs von einer bestimmten Größe befindet. Wenn der Preis diesen Schwankungsbereich überschreitet, wird ein Handelssignal erzeugt.

Die Strategie basiert auf einer mittleren Linie, die als Mittelwert für die beiden Schwankungsbereichs-Indikatoren gilt. Ein Mehr-Signal wird erzeugt, wenn der Preis oberhalb der mittleren Linie einen schnellen Schwankungsbereich überschreitet; ein Fehlsignal wird erzeugt, wenn der Preis unterhalb der mittleren Linie einen schnellen Schwankungsbereich überschreitet.

Um Fehlmeldungen zu filtern, wurde eine Bedingung hinzugefügt: Die Signalgebung erfolgt nur, wenn der Preis mit dem Preis des vorangegangenen Zyklus übereinstimmt. Zum Beispiel wird die Mehrfachsignalgebung nur erzeugt, wenn der Preis steigt und eine Bandbreite über der Mittelwertlinie überschreitet.

Insgesamt nutzt die Strategie die doppelte Schwankungsbreite, um Schwankungsbereiche zu identifizieren und Handelsanweisungen zu erzeugen, die als Signal für den Preisbruch in den Schwankungsbereichen dienen. Gleichzeitig wird die Preisrichtung gefiltert, um falsche Signale zu reduzieren.

Strategische Vorteile

Die Vorteile einer Doppelwellen-Strahlfilterstrategie sind:

  1. Die Benutzung von Preisschwankungen kann für hochschwankende Vermögenswerte wie Bitcoin eingesetzt werden. Die doppelte Schwankungsbreite ermöglicht eine genauere Bestimmung der Preisschwankungsbereiche.

  2. Die doppelte Bandbreite enthält unterschiedliche Zeitlängen. Die schnelle Indikator erfasst die kurzfristigen Durchbruchsmöglichkeiten, die langsame Indikator berücksichtigt die langfristigen Trends.

  3. Durch die Einführung von Preisfilterbedingungen können Fehlsignale, die durch kurzfristige Unruhen verursacht werden, reduziert werden.

  4. Die Transaktionslogik ist einfach und klar, die Implementierung ist leicht verständlich und eignet sich für quantitative Transaktionen.

Strategisches Risiko

Die Doppelwellen-Strahlfilterstrategie birgt auch einige Risiken, die zu beachten sind:

  1. In einem schwachen Markt kann dies abhängig von den Volatilitätsindikatoren nicht so gut wirken.

  2. Die Parameter für die Schwankungsbreite müssen für verschiedene Sorten optimiert werden, sonst werden Handelschancen verpasst oder falsche Signale erzeugt.

  3. Wenn der Preis von der Volatilität abweicht, kann es zu falschen Signalen kommen, wenn die Volatilität steigt und der Preis nicht steigt.

  4. Bei hohen Schwankungen kann die Einstellung des Stopppunkts angepasst werden. Ein zu radikaler Stopp wird häufig gestoppt.

Strategieoptimierung

Die Strategie kann in folgenden Bereichen optimiert werden:

  1. Test und Optimierung der Parameter des Schwankungsbereichs, um die optimale Kombination von Parametern für verschiedene Arten und unterschiedliche Perioden zu finden.

  2. Die Optimierung der Stop-Loss-Strategie durch die Einbindung eines Mechanismus, der die Stop-Loss-Position an die jüngste Volatilität anpasst.

  3. Erhöhung der Filterbedingungen auf Basis der Abweichung von Preisen und Schwankungen, um falsche Signale zu vermeiden.

  4. In Kombination mit anderen Indikatoren, wie beispielsweise der Veränderung des Handelsvolumens, erhöht sich die Einstiegssicherheit.

  5. Testen und einbinden von strategisch geeigneten Stopp- und Ausstiegsmechanismen

Zusammenfassen

Die Doppelwellen-Schockfilterstrategie ist insgesamt eine effektive Handelsstrategie für hochflüchtige Vermögenswerte. Sie nutzt die Eigenschaften der Preisschwankungen richtig und erzeugt eine einfache und klare Handelslogik. Durch die weitere Verbesserung der Parameteroptimierung, Risikomanagement usw. kann die Strategie zu einem wertvollen Bestandteil eines quantitativen Handelssystems werden.

Strategiequellcode
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 30m
basePeriod: 15m
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/
// © colinmck, greenmask9

//@version=4

strategy(title="Twin Range Filter Algo", overlay=true)

source = input(defval=close, title="Source")

// Smooth Average Range

per1 = input(defval=27, minval=1, title="Fast period")
mult1 = input(defval=1.6, minval=0.1, title="Fast range")

per2 = input(defval=55, minval=1, title="Slow period")
mult2 = input(defval=2, minval=0.1, title="Slow range")

smoothrng(x, t, m) =>
    wper = t * 2 - 1
    avrng = ema(abs(x - x[1]), t)
    smoothrng = ema(avrng, wper) * m
    smoothrng
smrng1 = smoothrng(source, per1, mult1)
smrng2 = smoothrng(source, per2, mult2)
smrng = (smrng1 + smrng2) / 2

// 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(source, smrng)

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])

hband = filt + smrng
lband = filt - smrng

longCond = bool(na)
shortCond = bool(na)
longCond := source > filt and source > source[1] and upward > 0 or source > filt and source < source[1] and upward > 0
shortCond := source < filt and source < source[1] and downward > 0 or source < filt and source > source[1] and downward > 0

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]

long = longCond and CondIni[1] == -1
short = shortCond and CondIni[1] == 1

// Plotting

// Strategy
// From this part on, programmer is greenmaks9
//
Separator = input(title="Following conditions and backtest algorithm are added by @greenmask9 🎯, original script is written by @colinmck 👍. Read both of their's release notes for more info on how this script works.", type=input.bool, defval=false)
disabler = input(title="Disable greenmask9's ATR conditions", type=input.bool, defval=false)

//second
l2 = input(title="ATR1", defval=32, minval=1)
s2 = input(title="Smoothing", defval="SMA", options=["RMA", "SMA", "EMA", "WMA"])
atr2(source, l2) => 
    if s2 == "SMA"
        sma(source, l2)
    else
        if s2 == "RMA"
            rma(source, l2)
        else
            if s2 == "EMA"
                ema(source, l2)
            else
                wma(source, l2)

//third
l3 = input(title="ATR2", defval=64, minval=1)
s3 = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])
atr3(source, l3) => 
    if s3 == "RMA"
        rma(source, l3)
    else
        if s3 == "SMA"
            sma(source, l3)
        else
            if s3 == "EMA"
                ema(source, l3)
            else
                wma(source, l3)

atr20=atr2(tr(true), l2)
atr30=atr3(tr(true), l3)
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
profit = input(title="Ticks profit", type=input.integer, defval=900)
stop = input(title="Ticks stoploss", type=input.integer, defval=300)
maxcandles_till_close = input(title="Time stoploss", type=input.integer, defval=17)


bull = long and (atr20<atr30 or disabler)
bear = short and (atr20<atr30 or disabler)

bullclock = barssince(bull)
bearclock = barssince(bear)

if (bull)
    strategy.entry("Twin Long", strategy.long, ordersize)
    strategy.exit("Exit", from_entry =  "Twin Long", profit = profit, loss = stop)

if (bear)
    strategy.entry("Twin Short", strategy.short, ordersize)
    strategy.exit("Exit", from_entry = "Twin Short", profit = profit, loss = stop)

//time stoploss
strategy.close("Twin Long", when = bullclock == maxcandles_till_close, comment = "Timed out")
strategy.close("Twin Short", when = bearclock == maxcandles_till_close, comment = "Timed out")