Pullback-Handelsstrategie auf Basis eines dynamischen gleitenden Durchschnitts

Schriftsteller:ChaoZhang, Datum: 2024-02-27 14:38:45
Tags:

img

Übersicht

Diese Strategie verwendet ein duales gleitendes Durchschnittssystem, um potenzielle Ausbruchchancen in ausgewählten Aktien oder Kryptowährungen zu identifizieren.

Strategie Logik

Die Strategie verwendet zwei einfache gleitende Durchschnitte (SMA) mit verschiedenen Perioden als Handelssignale. Der erste SMA hat einen längeren Zeitraum, um die allgemeine Trendrichtung darzustellen. Der zweite SMA hat einen kürzeren Zeitraum, um kurzfristige Kursschwankungen zu erfassen.

Wenn die kurzfristige SMA von unten über die längerfristige SMA überschreitet, signalisiert dies einen Aufwärtstrend der Preise insgesamt, sodass die Strategie eine Long-Position eröffnet.

Darüber hinaus ist die Strategie mit "Überverkauf" und "Überkauf" ausgestattet, um den Handel in Extremsituationen zu vermeiden.

Vorteile

  • Das Doppel gleitende Durchschnittssystem identifiziert mittelfristige Trends effektiv
  • Kombiniert die Vorzüge von Trend- und Pullback-Handel
  • Eingebettete Überverkaufs- und Überkaufbedingungen verringern unnötige Geschäfte

Risikoanalyse

  • Es ist schwierig, den genauen Pullback-Endzeitpunkt zu bestimmen, kann vorzeitig aussteigen
  • Nicht in der Lage, Verluste schnell zu reduzieren, wenn sich der Trend ändert
  • Eine schlechte Einstellung der Parameter kann zu einem übermäßigen oder konservativen Handel führen

Optimierungsrichtlinien

Es gibt weitere Möglichkeiten, diese Strategie zu optimieren:

  1. Nutzen Sie fortschrittlichere technische Indikatoren wie Bollinger-Bänder und KD, um Preiswellen und -trends zu messen
  2. Einbeziehen Sie mehr Faktoren wie Volumenänderung, Volatilität zur Bestimmung der Rücknahme abgeschlossen
  3. Dynamische Positionsgröße zur Maximierung des Gewinnpotenzials
  4. Optimieren Sie die Stop-Loss-Logik mit KAMA, Ichimoku-Wolken und Signalen mit niedrigerem Zeitrahmen

Schlussfolgerung

Diese Strategie kombiniert die Stärken des Trendfollowing und Pullback-Handels mit einem doppelten gleitenden Durchschnittssystem, um Chancen zu erkennen. Gleichzeitig vermeiden eingebettete Überkauft/Überverkauft-Konditionen unnötige Positionsöffnungen. Es ist eine sehr praktische Quant-Handelsstrategie, die eine tiefere Forschung und Optimierung wert ist.


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

// @version=5
strategy("Profitable Pullback Trading Strategy", overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Inputs
ma_length1 = input.int(280,'MA length 1', step = 10,group = 'Moving Avg. Parameters', inline = 'MA')
ma_length2 = input.int(13,'MA length 2', step = 1,group = 'Moving Avg. Parameters', inline = 'MA')
sl = input.float(title="Stop Loss (%)", defval=0.07, step=0.1, group="Moving Avg. Parameters")
too_deep    = input.float(title="Too Deep (%)", defval=0.27, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')
too_thin    = input.float(title="Too Thin (%)", defval=0.03, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')

// Calculations
ma1 = ta.sma(close,ma_length1)
ma2 = ta.sma(close,ma_length2)
too_deep2   = (ma2/ma1-1) < too_deep
too_thin2   = (ma2/ma1-1) > too_thin

// Entry and close condtions
var float buy_price = 0
buy_condition = (close > ma1) and (close < ma2) and strategy.position_size == 0 and too_deep2 and too_thin2
close_condition1  = (close > ma2) and strategy.position_size > 0 and (close < low[1])
stop_distance = strategy.position_size > 0 ? ((buy_price - close) / close) : na
close_condition2 = strategy.position_size > 0 and stop_distance > sl
stop_price = strategy.position_size > 0 ? buy_price - (buy_price * sl) : na

// Entry and close orders
if buy_condition
    strategy.entry('Long',strategy.long)
if buy_condition[1]
    buy_price := open
if close_condition1 or close_condition2
    strategy.close('Long',comment="Exit" + (close_condition2 ? "SL=true" : ""))
    buy_price := na

plot(ma1,color = color.blue)
plot(ma2,color = color.orange)



Mehr