Momentum Breakout Backtesting Unterstützung Widerstandsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-02-22 16:07:14
Tags:

img

Übersicht

Diese Strategie verwendet hauptsächlich die Preise des vorherigen Handelstages, die hohen, niedrigen und schließenden Preise als Support- und Widerstandsniveaus für den aktuellen Tag.

Strategieprinzip

Der Code definiert zunächst eine Funktion CalculateSupportResistance zur Berechnung der Unterstützungs- und Widerstandsniveaus, die die Höchst-, Tief- und Schlusskurse des vorherigen Handelstages als Unterstützungs- und Widerstandsniveaus des aktuellen Tages extrahiert.

Dann in der Hauptlogik wird diese Funktion aufgerufen, um diese drei Preisniveaus zu erhalten und sie zu zeichnen.

In der Backtesting-Logik geht es lang, wenn der Schlusskurs niedriger ist als das Tief des vorherigen Tages, während der aktuelle Preis höher ist als das Tief, was einen Ausbruch bildet.

Durch dieses Breakout-Modell werden die Beurteilung des Trends und die Erzeugung von Handelssignalen umgesetzt.

Vorteile

  1. Verwenden Sie die Daten der vorherigen Handelstage, um die Unterstützungs- und Widerstandsniveaus des aktuellen Tages zu ermitteln, um das Problem der Optimierung von Parametern zu vermeiden

  2. Unterstützungs- und Widerstandsniveaus stammen aus realen Markthandelsdaten mit einem gewissen Referenzwert

  3. Einfaches und unkompliziertes Backtestmodell, leicht zu verstehen und umzusetzen

  4. Visuelle Anzeige von Unterstützungs- und Widerstandsniveaus bildet die Wahrnehmung der Preise

  5. Echtzeitüberwachung von Ausbrüchen, rechtzeitige Erfassung von Handelsmöglichkeiten

Risiken

  1. Unterstützungs- und Widerstandsniveaus ändern sich im Laufe der Zeit, ihre Gültigkeit ist schwer zu bestimmen

  2. Unmöglichkeit, die Trendrichtung vorherzusagen, Gefahr fehlender Umkehrungen

  3. Leicht von falschen Ausbrüchen betroffen, Risiko eines vorzeitigen Eintritts

  4. Unmöglich, die Dauer der Ausbrüche zu bestimmen, wahrscheinlich ein früher Stop-Loss

  5. Einzelne Support- und Widerstandsstörungen sind unter enormen Marktschwankungen wahrscheinlicher

Gegenmaßnahmen:

  1. Kombination mehrerer Faktoren zur Beurteilung der Gültigkeit von Ausbrüchen

  2. Erweitern Sie den Stop-Loss-Bereich angemessen, um Trends zu erfassen

  3. Offene Positionen in Chargen, Verringerung der Auswirkungen einzelner Schwankungen

Optimierungen

  1. Hinzufügen Sie mehr historische Daten wie 5-Tage, 10-Tage-Linien, um Ebenen zu bestimmen

  2. Einbeziehung anderer Indikatoren wie Volumen zur Beurteilung der Breakout-Gültigkeit

  3. Einrichtung von Stop-Loss auf Basis der tatsächlichen Volatilität

  4. Optimierung des Kapitalmanagements, Kontrolle einzelner Verluste

Zusammenfassung

Insgesamt ist dies eine typische Breakout-Strategie, einfach und intuitiv. Durch den Aufbau der Unterstützung und des Widerstands des aktuellen Tages mit den Daten des vorherigen Tages und das Backtesting von Breakouts dieser Ebenen für lang / kurz. Die Vorteile sind leicht zu verstehen und die Ebenen direkt zu visualisieren; die Nachteile sind falsche Breakout-Risiken und Unsicherheit der Persistenz. Die nächsten Schritte sind die Verbesserung der Breakout-Gültigkeit, die Kontrolle der Risiken, die Optimierung des Kapitalmanagements usw.


/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Support and Resistance with Backtesting", overlay=true)

// Function to calculate support and resistance levels
calculateSupportResistance() =>
    highPrevDay = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
    lowPrevDay = request.security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
    closePrevDay = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_on)
    [highPrevDay, lowPrevDay, closePrevDay]

// Call the function to get support and resistance levels
[supResHigh, supResLow, supResClose] = calculateSupportResistance()

// Plotting support and resistance levels
plot(supResHigh, color=color.red, linewidth=2, title="Previous Day High")
plot(supResLow, color=color.green, linewidth=2, title="Previous Day Low")
plot(supResClose, color=color.blue, linewidth=2, title="Previous Day Close")

// Backtesting logic
backtestCondition = close[1] < supResLow and close > supResLow
strategy.entry("Long", strategy.long, when=backtestCondition)

// Plotting buy/sell arrows for backtesting
plotarrow(backtestCondition ? 1 : na, colorup=color.green, offset=-1, transp=0)


Mehr