Ehlers Stochastische Cyberzyklustrategie

Schriftsteller:ChaoZhang, Datum: 2024-01-17 16:03:30
Tags:

img

Übersicht

Die Ehlers Stochastic Cyber Cycle Strategy ist eine quantitative Handelsstrategie, die mithilfe des Ehlers Stochastic Cycle-Indikators Handelssignale generiert.

Strategie Logik

Diese Strategie baut zunächst einen glatten Zyklusindikator auf und erstellt dann einen auf diesem Indikator basierenden stochastischen Indikatorwert.

Insbesondere wird der Glättungszyklusindikator wie folgt berechnet:

smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6

Dieser Indikator kombiniert den aktuellen Preis mit den Preisen der letzten 3 Zeiträume, um ein glättetes Zyklussignal zu erstellen.

Auf der Grundlage dieses glätteten Indikators kann der stochastische Zykluszyklus berechnet werden:

cycle := (1 - .5 * alpha) * (1 - .5 * alpha) *  
           (smooth - 2 * smooth[1] + smooth[2]) +  
           2 * (1 - alpha) * cycle[1] -  
           (1 - alpha) * (1 - alpha) * cycle[2]

Diese Berechnungsformel enthält die Differenz der zweiten Ordnung des glatten periodischen Signals und die Werte der beiden vorangegangenen Zyklen.

Schließlich wird ein 0-100 Zufallswertwert1 auf der Grundlage dieses Zyklusindikators berechnet. Und das Signalwertsignal wird auf der Grundlage des 10-tägigen gleitenden Durchschnitts des Wertes1 konstruiert.

Vorteile der Strategie

Diese Strategie kombiniert stochastische Indikatoren und Zyklusindikatoren, um die Vorteile beider zu integrieren.Verglichen mit einfachen Trendstrategien wie gleitenden Durchschnitten kann diese Strategie zyklische Chancen besser erfassen und damit bessere Ergebnisse erzielen.

Die wichtigsten Vorteile sind:

  1. Zyklusindikatoren können zyklische Muster identifizieren, stochastische Indikatoren bieten Handelsmöglichkeiten
  2. Ein Dual-Indikator-Design kann falsche Signale effektiv filtern
  3. Anpassbare Parameter für verschiedene Marktumgebungen

Risiken der Strategie

Die wichtigsten Risiken dieser Strategie sind:

  1. Falsche Einstellungen von Parametern können zu häufigem Handel, steigenden Handelskosten und Verschiebungskosten führen
  2. Kann nicht effektiv mit Märkten mit starken Preisschwankungen umgehen, die zu großen Verlusten führen können
  3. Zyklusanzeiger sind stark auf Kurvenanpassung angewiesen, eine unsachgemäße Anpassung kann falsche Signale erzeugen

Die Risiken können durch Optimierung der Parameter-Einstellungen, Einstellung von Stop-Loss-Punkten, Kombination anderer Filterindikatoren usw. kontrolliert werden.

Optimierungsrichtlinien

Diese Strategie kann auch in folgenden Aspekten optimiert werden:

  1. Kombination mit anderen technischen Indikatoren zur Signalfilterung, wie Bollinger-Bändern, RSI usw., um falsche Signale zu reduzieren
  2. Hinzufügen von adaptiven Ausstiegsmechanismen, dynamische Anpassung von Stop-Loss-Punkten entsprechend der Marktvolatilität
  3. Verwendung von Methoden des maschinellen Lernens zur automatischen Optimierung von Parametern zur dynamischen Anpassung an den Markt
  4. Optimierung der Kapitalnutzung durch Hebelwirkung, Komponenten und andere Mittel

Schlussfolgerung

Die Ehlers Stochastic Cyber Cycle Strategy integriert die Vorteile von Stochastik- und Zyklusindikatoren durch ein duales Signaldesign, um Risiken effektiv zu kontrollieren, und kann in Märkten mit starker Zyklisität gute Renditen erzielen.


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Ehlers Stochastic Cyber Cycle Strategy",overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, commission_type = strategy.commission.percent, commission_value = 0.1)
src = input(hl2, title = "Source") 
alpha = input(.07, title = "Alpha")
lag = input(9, title = "Lag")
smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6
len = input(8, title = "Stochastic len")
cycle = na
if na(cycle[7])
    cycle := (src - 2 * src[1] + src[2]) / 4
else
    cycle := (1 - .5 * alpha) * (1 - .5 * alpha) * (smooth - 2 * smooth[1] + smooth[2]) + 2 * (1 - alpha) * cycle[1] - (1 - alpha) * (1 - alpha) * cycle[2]

value1 = stoch(cycle, cycle, cycle, len) / 100
value2 = 2 * ((4 * value1 + 3 * value1[1] + 2 * value1[2] + value1[3]) / 10 - 0.5)

signal = value2
oppositeTrade = input(true)
barsSinceEntry = 0
barsSinceEntry := nz(barsSinceEntry[1]) + 1
if strategy.position_size == 0
    barsSinceEntry := 0
if (crossover(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossunder(signal, signal[1]))
    strategy.entry("Long", strategy.long)
    barsSinceEntry := 0
if (crossunder(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossover(signal, signal[1]))
    strategy.entry("Short", strategy.short)
    barsSinceEntry := 0
if strategy.openprofit < 0 and barsSinceEntry > 8
    strategy.close_all()
    barsSinceEntry := 0
    
    
plot(0, title="ZeroLine", color=gray) 
plotSrc = signal
cyclePlot = plot(plotSrc, title = "CyberCycle", color = blue)
triggerPlot = plot(plotSrc[1], title = "Trigger", color = green)
fill(cyclePlot, triggerPlot, color = plotSrc < plotSrc[1] ? red : lime, transp = 50)

Mehr