Dynamische Unterstützungs-Widerstand-Pivot-adaptive quantitative Handelsstrategie

ATR Pivot
Erstellungsdatum: 2025-01-10 15:08:24 zuletzt geändert: 2025-01-10 15:08:24
Kopie: 3 Klicks: 416
1
konzentrieren Sie sich auf
1617
Anhänger

Dynamische Unterstützungs-Widerstand-Pivot-adaptive quantitative Handelsstrategie

Überblick

Bei dieser Strategie handelt es sich um ein adaptives Handelssystem, das Unterstützungs- und Widerstandsniveaus dynamisch anhand von Preisdrehpunkten identifiziert. Es ermittelt wichtige Preisniveaus, indem es lokale Höchst- und Tiefstwerte in Echtzeit berechnet und auf dieser Grundlage Handelsgeschäfte ausführt. Der Kern dieser Strategie liegt in ihrer dynamischen Natur, die Handelsparameter rechtzeitig an veränderte Marktbedingungen anpassen kann und für Trend- und volatile Märkte geeignet ist.

Strategieprinzip

Die Kernlogik der Strategie basiert auf den folgenden Schlüsselelementen:

  1. Dynamische Pivot-Punkt-Berechnung: Verwendet einen anpassbaren Pivot-Längenparameter (Standard ist 2), um lokale Hochs und Tiefs zu identifizieren
  2. Unterstützungs- und Widerstandsbereich: Legen Sie einen Prozentbereich (Standard 0,4 %) basierend auf dem Pivotpunkt fest, um den effektiven Handelsbereich zu definieren
  3. Handelssignalgenerierung: Wenn der Preis das Unterstützungsniveau von unten durchbricht, wird ein Long-Signal generiert, und wenn er das Widerstandsniveau von oben durchbricht, wird ein Short-Signal generiert.
  4. Risikokontrolle: Es werden dynamische Stop-Loss- (10 %) und Profit-Einstellungen (27 %) verwendet und die Positionsgröße wird automatisch entsprechend dem Kontokapital angepasst.

Strategische Vorteile

  1. Starke Anpassungsfähigkeit: Die Strategie kann die Unterstützungs- und Widerstandspositionen dynamisch an den Marktstatus anpassen, um Verzögerungen durch statische Niveaus zu vermeiden.
  2. Kontrollierbares Risiko: Durch strikte prozentuale Stop-Loss- und dynamische Positionsverwaltung wird das Risiko jeder Transaktion in einem angemessenen Rahmen kontrolliert.
  3. Skalierbarkeit: Unterstützt mehrere Zeiträume und Parameterkombinationen, um die Optimierung entsprechend unterschiedlicher Marktumgebungen zu erleichtern.
  4. Hohe Transparenz: Die Handelslogik ist klar und alle Signale und Preisniveaus können intuitiv im Chart angezeigt werden

Strategisches Risiko

  1. Risiko falscher Ausbrüche: In einem volatilen Markt können häufig falsche Ausbruchssignale auftreten, die durch die Anpassung der Unterstützungs- und Widerstandsintervallparameter reduziert werden müssen.
  2. Slippage-Auswirkungen: In einem Marktumfeld mit geringer Liquidität kann der tatsächliche Transaktionspreis stark vom Signalpreis abweichen.
  3. Trendabhängigkeit: Die Strategie ist in einem starken Trendmarkt leistungsfähiger, kann aber in einer Seitwärtsphase zu viele Handelssignale erzeugen.
  4. Parametersensitivität: Die Leistung der Strategie ist empfindlich gegenüber den Parametereinstellungen und zum Ermitteln der optimalen Parameterkombination sind Backtests erforderlich.

Richtung der Strategieoptimierung

  1. Modul zur Marktumfelderkennung hinzugefügt, um Parameter automatisch an die Volatilität anzupassen
  2. Einführung von Volumen und anderen technischen Indikatoren als zusätzliche Bestätigungssignale
  3. Optimieren Sie Positionsmanagement-Algorithmen und nehmen Sie dynamische Anpassungen basierend auf der Marktvolatilität vor.
  4. Fügen Sie einen Zeitfilter hinzu, um die Generierung von Handelssignalen in ungünstigen Zeiträumen zu vermeiden
  5. Entwickeln Sie einen adaptiven Stop-Loss-Algorithmus, um die Stop-Loss-Position dynamisch an die Marktvolatilität anzupassen.

Zusammenfassen

Die Strategie bietet einen soliden Rahmen für Trendfolge- und Umkehrhandel durch die dynamische Identifizierung wichtiger Preisniveaus in Kombination mit einer strengen Risikokontrolle. Obwohl eine gewisse Parametersensitivität und Marktumfeldabhängigkeit besteht, kann durch kontinuierliche Optimierung und Verbesserung eine stabile Leistung in unterschiedlichen Marktumfeldern aufrechterhalten werden. Damit die Strategie erfolgreich umgesetzt werden kann, müssen die Händler ihre Grundsätze genau verstehen und die Parameter je nach den spezifischen Marktbedingungen entsprechend anpassen.

Strategiequellcode
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © felipemiransan

//@version=6
strategy("Dynamic Support and Resistance Pivot Strategy ", overlay=true)

// Strategy parameters
pivot_length = input.int(2, title="Pivot Length", tooltip="Pivot size to identify peaks and troughs")
support_resistance_distance = input.float(0.4, title="Support/Resistance Distance %", tooltip="Distance to consider a support or resistance level in %")

// Stop Loss and Take Profit parameters
stop_loss_pct = input.float(10.0, title="Stop Loss %", tooltip="Stop loss percentage", minval=0.1) / 100
take_profit_pct = input.float(26.0, title="Take Profit %", tooltip="Take profit percentage", minval=0.1) / 100

// Functions to identify high and low pivots
pivot_high = ta.pivothigh(high, pivot_length, pivot_length)
pivot_low = ta.pivotlow(low, pivot_length, pivot_length)

// Storing support and resistance levels
var float resistance_level = na
var float support_level = na
var float last_pivot_high = na
var float last_pivot_low = na

// Updating support and resistance based on pivots
if (not na(pivot_high))
    resistance_level := high[pivot_length]
    last_pivot_high := high[pivot_length]

if (not na(pivot_low))
    support_level := low[pivot_length]
    last_pivot_low := low[pivot_length]

// Function to check if the current price is near a support or resistance level
is_near_resistance = (not na(resistance_level)) and (close >= resistance_level * (1 - support_resistance_distance / 100)) and (close <= resistance_level * (1 + support_resistance_distance / 100))
is_near_support = (not na(support_level)) and (close >= support_level * (1 - support_resistance_distance / 100)) and (close <= support_level * (1 + support_resistance_distance / 100))

// Cross conditions variables
long_cross = ta.crossover(close, support_level) and not na(support_level)
short_cross = ta.crossunder(close, resistance_level) and not na(resistance_level)

// Entry conditions
long_condition = is_near_support and long_cross  // Buy when crossing support from below
short_condition = is_near_resistance and short_cross  // Sell when crossing resistance from above

// Order execution
if (long_condition)
    strategy.entry("Long", strategy.long)

if (short_condition)
    strategy.entry("Short", strategy.short)

// Stop Loss and Take Profit
if (strategy.opentrades > 0)
    if (strategy.position_size > 0)  // For long position
        avg_price_long = strategy.position_avg_price
        long_stop_level = avg_price_long * (1 - stop_loss_pct)
        long_take_profit_level = avg_price_long * (1 + take_profit_pct)
        strategy.exit("Exit Long", from_entry="Long", stop=long_stop_level, limit=long_take_profit_level)

    if (strategy.position_size < 0)  // For short position
        avg_price_short = strategy.position_avg_price
        short_stop_level = avg_price_short * (1 + stop_loss_pct)
        short_take_profit_level = avg_price_short * (1 - take_profit_pct)
        strategy.exit("Exit Short", from_entry="Short", stop=short_stop_level, limit=short_take_profit_level)

// Plotting support and resistance levels on the chart
plot(support_level, title="Support", color=color.green, linewidth=2, style=plot.style_line)
plot(resistance_level, title="Resistance", color=color.red, linewidth=2, style=plot.style_line)

// Adding labels to show pivot values
if (long_condition and not na(support_level))
    label.new(bar_index, low[pivot_length], str.tostring(low[pivot_length]), style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)

if (short_condition and not na(resistance_level))
    label.new(bar_index, high[pivot_length], str.tostring(high[pivot_length]), style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)