Quantitative Handelsstrategie mit Candlestick-Muster und Trendumkehr in zwei Zeitrahmen

MA
Erstellungsdatum: 2025-01-10 15:47:53 zuletzt geändert: 2025-01-10 15:47:53
Kopie: 1 Klicks: 385
1
konzentrieren Sie sich auf
1617
Anhänger

Quantitative Handelsstrategie mit Candlestick-Muster und Trendumkehr in zwei Zeitrahmen

Überblick

Bei dieser Strategie handelt es sich um ein quantitatives Handelssystem, das auf zwei klassischen Candlestick-Mustern basiert: der Hammerlinie und dem Hanging Man. Die Strategie funktioniert, indem diese Umkehrmuster im Markt identifiziert werden, um potenzielle Wendepunkte in der Kursentwicklung vorherzusagen. Das System kombiniert mehrere technische Indikatoren, um die Gültigkeit des Signals zu bestätigen, einschließlich der proportionalen Beziehung zwischen dem K-Linienkörper und dem Schatten, der Trendrichtung und anderen Faktoren, um eine genaue Erfassung der Marktumkehrpunkte zu erreichen.

Strategieprinzip

Die Kernlogik der Strategie besteht darin, zwei wichtige Candlestick-Muster auf programmatische Weise zu identifizieren:

  1. Hammer: Erscheint in einem Abwärtstrend und deutet auf eine mögliche Trendwende nach oben hin. Charakteristisch für ihn sind ein kleiner Körper, ein langer unterer Schatten (mindestens doppelt so lang wie der Körper) und ein sehr kurzer oder fehlender oberer Schatten.
  2. Hanging Man: Erscheint in einem Aufwärtstrend und deutet auf eine mögliche Umkehr und einen Rückgang hin. Die morphologischen Merkmale ähneln denen der Hammerlinie, aber Erscheinungsposition und Bedeutung sind entgegengesetzt.

Die Strategie quantifiziert diese Muster durch die Festlegung strenger Parameter, darunter:

  • Minimaler Kerzenkörperlängenmultiplikator
  • Das Verhältnis des unteren Schattens zur Kerzenhöhe
  • Haltedauer

Strategische Vorteile

  1. Systematische Identifizierung: Identifizieren Sie Marktumkehrsignale präzise durch programmatische Methoden und vermeiden Sie die Subjektivität menschlicher Urteile.
  2. Risiken sind beherrschbar: Um Risiken durch übermäßige Bestände zu vermeiden, wird eine klare Haltedauer festgelegt.
  3. Signalvisualisierung: Zeigen Sie Handelssignale intuitiv im Diagramm an, um eine einfache Analyse und Optimierung zu ermöglichen.
  4. Flexible Parameter: Parameter können an unterschiedliche Marktbedingungen angepasst werden, um die Anpassungsfähigkeit der Strategie zu verbessern.

Strategisches Risiko

  1. Risiko falscher Ausbrüche: Umkehrmuster können falsche Signale erzeugen und müssen in Kombination mit anderen technischen Indikatoren bestätigt werden.
  2. Timing-Risiko: Eine feste Haltedauer kann möglicherweise nicht das gesamte Potenzial von Preisbewegungen ausschöpfen.
  3. Abhängigkeit vom Marktumfeld: In einem volatilen Markt können zu viele falsche Signale generiert werden.

Richtung der Strategieoptimierung

  1. Einführung von Trendfiltern: Indikatoren wie gleitende Durchschnitte können hinzugefügt werden, um Trends zu filtern und die Signalqualität zu verbessern.
  2. Dynamische Haltedauer: Passen Sie die Haltedauer dynamisch an die Marktvolatilität an.
  3. Bestätigung für mehrere Perioden: Einführung eines Trendbestätigungsmechanismus für längere Zeiträume.
  4. Stop-Loss-Optimierung: Fügen Sie einen dynamischen Stop-Loss-Mechanismus hinzu, um die Risikokontrollmöglichkeiten zu verbessern.

Zusammenfassen

Diese Strategie realisiert die systematische Anwendung der klassischen Theorie der technischen Analyse durch quantitative Methoden und hat einen hohen praktischen Wert. Durch die Optimierung der Parameter und die Verbesserung der Risikokontrollmechanismen kann die Strategie in unterschiedlichen Marktumgebungen eine stabile Performance aufrechterhalten. Der modulare Aufbau der Strategie bietet zudem eine gute Grundlage für spätere Optimierungen.

Strategiequellcode
/*backtest
start: 2024-12-10 00:00:00
end: 2025-01-08 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy("Hammer and Hanging Man Strategy", overlay=true)

// Input parameters
length = input.int(5, title="Minimum Candle Body Length (Multiplier)", minval=1)
shadowRatio = input.float(1, title="Lower Shadow to Candle Height Ratio", minval=1.0)
holdPeriods = input.int(26, title="Hold Periods (Bars)", minval=1)  // Holding period in bars

// Function to calculate the absolute value
absValue(x) =>
    x >= 0 ? x : -x

// Function to check if it is a Hammer
isHammer() =>
    bodyLength = absValue(close - open)
    candleHeight = high - low
    lowerShadow = math.min(open, close) - low
    upperShadow = high - math.max(open, close)
    smallBody = bodyLength <= candleHeight / length
    longLowerShadow = lowerShadow >= bodyLength * shadowRatio
    shortUpperShadow = upperShadow <= bodyLength
    smallBody and longLowerShadow and shortUpperShadow and close > open

// Function to check if it is a Hanging Man
isHangingMan() =>
    bodyLength = absValue(close - open)
    candleHeight = high - low
    lowerShadow = math.min(open, close) - low
    upperShadow = high - math.max(open, close)
    smallBody = bodyLength <= candleHeight / length
    longLowerShadow = lowerShadow >= bodyLength * shadowRatio
    shortUpperShadow = upperShadow <= bodyLength
    smallBody and longLowerShadow and shortUpperShadow and close < open

// Detect the candles
hammer = isHammer()
hangingMan = isHangingMan()

// Trading logic: Long on Hammer, Short on Hanging Man
if hammer
    strategy.entry("Long", strategy.long)  // Long entry on Hammer

if hangingMan
    strategy.entry("Short", strategy.short)  // Short entry on Hanging Man

// Exit after X bars
if strategy.position_size > 0 and bar_index - strategy.opentrades.entry_bar_index(0) >= holdPeriods
    strategy.close("Long")

if strategy.position_size < 0 and bar_index - strategy.opentrades.entry_bar_index(0) >= holdPeriods
    strategy.close("Short")

// Visualization of signals
plotshape(hammer, title="Hammer", location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer")
plotshape(hangingMan, title="Hanging Man", location=location.abovebar, color=color.red, style=shape.labeldown, text="Hanging Man")