SMA Crossover Long- und Short-Strategie kombiniert mit Peak-Retracement-Kontrolle und automatischer Terminierung

SMA
Erstellungsdatum: 2024-07-29 14:16:58 zuletzt geändert: 2024-07-29 14:16:58
Kopie: 0 Klicks: 555
1
konzentrieren Sie sich auf
1617
Anhänger

SMA Crossover Long- und Short-Strategie kombiniert mit Peak-Retracement-Kontrolle und automatischer Terminierung

Überblick

Die Strategie ist ein Multi-Zone-Trading-System, das ein einfaches Moving Average (SMA) -Kreuzsignal und Peak-Retreat-Kontrolle kombiniert. Sie verwendet die Kreuzung von 14- und 28-Tage-SMAs, um Multi-Zone-Trading-Signale zu erzeugen, während die Peak-Retreat-Situation der Strategie in Echtzeit überwacht wird. Die Strategie stoppt automatisch den Handel, wenn die Retreat über die vorgegebene Schwelle hinausgeht.

Strategieprinzip

  1. Handelssignale werden erzeugt:

    • Wenn ein 14-Tage-SMA über einen 28-Tage-SMA überschritten wird, wird ein Mehrwertsignal erzeugt.
    • Wenn der 14-SMA unter dem 28-SMA durchbricht, erzeugt sich ein Kaufsignal.
  2. Spitzenrückziehkontrolle:

    • Es ist wichtig, dass die Kurve der Strategie in Echtzeit verfolgt wird, um die historischen Höchststände zu erfassen (Spitzen).
    • Wenn die aktuellen Zinssätze unterhalb der Spitze liegen, wird ein Rückzug erfolgen, wobei ein Tiefpunkt (“Valley Bottom”) registriert wird.
    • Berechnet Rücknahmeprozentsatz = (Gipfel - Talbottom) / Gipfel * 100% ◦
    • Wenn der Prozentsatz der Rücknahme den vorgegebenen maximalen Rücknahmemarginal überschreitet, wird die Strategie eingestellt.
  3. Die Spitzen- und Tiefst-Zyklus-Analyse:

    • Setzen Sie die minimale Rücknahmeprozentsätze, um die effektive Peak-Bottom-Periode zu definieren.
    • Jedes Mal, wenn ein gültiger Zyklus abgeschlossen wird, werden die Zyklusnummer, die vorherige Zunahme, die Rücknahme und die Endzeit aufgezeichnet.
    • Die Analyseergebnisse werden in Form von Tabellen angezeigt, die es den Händlern ermöglichen, die historische Performance der Strategie zu sehen.

Strategische Vorteile

  1. In Kombination mit Trendverfolgung und Risikokontrolle: Die SMA-Cross-Strategie ist eine klassische Trend-Tracking-Methode, während die Spitzenrückzugskontrolle eine zusätzliche Ebene des Risikomanagements bietet. Diese Kombination kann das Abwärtsrisiko effektiv kontrollieren, während die Markttrends erfasst werden.

  2. Anpassungsfähigkeit: Durch die parametrische Einstellung von Maximum- und Minimum-Retreat-Throughs können Strategien flexibel an unterschiedliche Marktbedingungen und persönliche Risikopräferenzen angepasst werden.

  3. Transparente Risikoindikatoren: Die Peak-Valley-Bottom-Cycle-Analyse bietet detaillierte historische Rückzugsinformationen, die es Händlern ermöglichen, die Risikoeigenschaften der Strategie intuitiv zu verstehen und weisere Handelsentscheidungen zu treffen.

  4. Automatisierte Risikokontrolle: Die Strategie beendet den Handel automatisch, wenn der Rückzug über den vorgegebenen Schwellenwert hinausgeht. Diese Mechanismen sind wirksam, um anhaltende Verluste unter ungünstigen Marktbedingungen zu verhindern.

  5. Eine umfassende Analyse der Leistung: Zusätzlich zu den üblichen Retrospektiven bietet die Strategie detaillierte Peak-Bottom-Zyklusdaten, darunter Informationen über die Höhe und Höhe des Anstiegs, des Rückzugs und der Zeit, um die Strategie-Performance zu analysieren.

Strategisches Risiko

  1. Übermäßige Abhängigkeit von historischen Daten: Die SMA-Kreuzung basiert auf historischen Preisdaten und kann in einem schnell wechselnden Markt nachlässig reagieren, was zu falschen Signalen führt.

  2. Häufige Transaktionen: In unsicheren Märkten können sich SMAs häufig kreuzen, was zu übermäßigen Transaktionen und hohen Transaktionskosten führt.

  3. Das ist eine potentielle große Rücknahme: Trotz maximaler Rückzugskontrolle kann ein einziger großer Rückgang bei starken Marktschwankungen zu größeren Verlusten führen.

  4. Parameter-Sensitivität: Strategie-Performance ist stark abhängig von der Wahl der SMA-Periode und der Rücknahme-Schwelle. Unpassende Parameter-Einstellungen können zu suboptimalen Ergebnissen führen.

  5. Verpasste Gelegenheit zur Umkehr: Die Strategie kann die Gelegenheit verpassen, die sich aus einer Marktumkehr ergibt, wenn die maximale Rücknahme-Marke erreicht wird, um den Handel zu stoppen.

Richtung der Strategieoptimierung

  1. Einführung von dynamischen Parameter-Anpassungen: Es kann in Erwägung gezogen werden, die SMA-Zyklen und Rücknahme-Höchstwerte entsprechend der dynamischen Marktfluktuation anzupassen, um sie an unterschiedliche Marktbedingungen anzupassen.

  2. Das sind die wichtigsten Faktoren, die die Marktentwicklung beeinflussen. In Kombination mit anderen technischen Indikatoren oder Fundamentaldaten, wie dem RSI oder der Handelsmenge, werden potenziell falsche Signale gefiltert.

  3. Die Ein- und Ausstiegsphase: Statt der vollständigen Lagerhaltung kann die Lagerhaltung in Gruppen erfolgen, um das Risiko einer Einzelfallentscheidung zu verringern.

  4. Die Einführung eines Stop-Systems: Aufbauend auf der Rückzugskontrolle, ergänzt die Dynamic Stop-Funktion, um Gewinne zu sichern und die Gesamtrendite zu erhöhen.

  5. Optimierung der Kapitalverwaltung: Dynamisches Positionsmanagement basierend auf der Größe des Kontos und der Marktvolatilität, um Risiken besser zu kontrollieren.

  6. Einführung von Algorithmen für maschinelles Lernen: Die Optimierung der Parameterwahl und der Signalgenerierungsprozesse mit Hilfe von Machine Learning Technologien verbessert die Anpassungsfähigkeit und Genauigkeit der Strategien.

Zusammenfassen

Die SMA-Cross-Multiplex-Strategie kombiniert Peak-Retracing-Control mit Automatic Termination. Es ist ein quantitatives Handelssystem, das sowohl Trend-Tracking als auch Risikomanagement umfasst. Es fängt Markttrends an, indem es einfache Moving Averages kreuzt, während es Peak-Retracing-Control nutzt, um das Abwärtsrisiko zu verwalten.

Obwohl Strategien einige inherente Risiken haben, wie z. B. eine übermäßige Abhängigkeit von historischen Daten und Parameter-Sensitivität, können sie durch geeignete Optimierungen und Verbesserungen, wie die Einführung von dynamischen Parameter-Anpassungen, das Hinzufügen von zusätzlichen Marktfiltern und ein intelligenteres Kapitalmanagement, ihre Robustheit und Profitabilität erheblich verbessern.

Insgesamt bietet diese Strategie den Händlern einen guten Startpunkt, auf dem sie weiter angepasst und optimiert werden können, um den individuellen Handelszielen und Risikopräferenzen gerecht zu werden. Die modulare Gestaltung der Strategie macht es auch leicht, sich mit anderen Handelsstrategien oder Risikomanagementtechnologien zu integrieren, was die Grundlage für den Aufbau komplexerer und umfassenderer Handelssysteme bildet.

Strategiequellcode
/*backtest
start: 2023-07-23 00:00:00
end: 2024-07-28 00:00:00
period: 1d
basePeriod: 1h
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/

capital = 10000

//@version=5
strategy(title = "Correct Strategy Peak-Drawdown Cycles [Tradingwhale]", shorttitle = "Peak-Draw [Tradingwhale]", initial_capital = capital, overlay=true, margin_long=100, margin_short=100)

// The code below is from Tradingwhale LLC
/// ==============================================================================
//  Peak-Trough Cycles with Date and Prev. RunUp
// Initialize variables
showTable = input.bool(true, title = "Plot Peak to Bottom Drawdown Cycles table?")
min_trough = input.float(3.0, title = "Define Minimum Drawdown/Trough to Display (%)", minval = 1, maxval = 100, step = 0.5, tooltip = "Peaks and Trough Cycles have to be roped in by either a lookback period or minmimum troughs to show. If you don't then every bar could be a peak or trough/bottom. I've decided to use minimum declines here because lookback seems more arbitrary.")
maxdraw = input.float(40.0, title = "Max Drawdown", minval = 1, maxval = 100, step = 0.5, tooltip = "Define the drawdown level where the srtategy stops executing trades.")

var float equityPeak = na
var float equityTrough = na
var int cycleCount = 0
var bool inDrawdown = false
var float initialCapital = capital
var float prevTrough = initialCapital
var float prevRunUp = na
var bool useLighterGray = true
var int lastYear = na

// Variable to indicate whether the strategy should end
var bool end_strategy = false

// Table to display data
var table resultTable = table.new(position.top_right, 5, 30, bgcolor=#ffffff00, frame_color=#4f4040, frame_width=1)

// Function to convert float to percentage string
f_to_percent(value) =>
    str.tostring(value, "#.##") + "%"

// Function to get month/year string without commas
get_month_year_string() =>
    str.tostring(year) + "/" + str.tostring(month)

// Update the table headers
if (bar_index == 0 and showTable)
    table.cell(resultTable, 0, 0, "Show Min Trough: " + f_to_percent(min_trough), bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 1, 0, "Cycle Count", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 2, 0, "Prev.RunUp(%)", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 3, 0, "Drawdown(%)", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 4, 0, "Year/Month", bgcolor=#a8a8a88f, text_size=size.normal)

// Track peaks and troughs in equity
if (na(equityPeak) or strategy.equity > equityPeak)
    if (inDrawdown and strategy.equity > equityPeak and not na(equityTrough)) // Confirm end of drawdown cycle
        drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100
        if drawdownPercentage > min_trough
            cycleCount += 1
            prevRunUp := (equityPeak - prevTrough) / prevTrough * 100
            if cycleCount <= 20 and showTable
                currentYear = year
                if na(lastYear) or currentYear != lastYear
                    useLighterGray := not useLighterGray
                    lastYear := currentYear
                rowColor = useLighterGray ? color.new(color.gray, 80) : color.new(color.gray, 50)
                table.cell(resultTable, 1, cycleCount, str.tostring(cycleCount), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 2, cycleCount, f_to_percent(prevRunUp), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 3, cycleCount, f_to_percent(drawdownPercentage), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 4, cycleCount, get_month_year_string(), bgcolor=rowColor, text_size=size.normal)
            prevTrough := equityTrough
    equityPeak := strategy.equity
    equityTrough := na
    inDrawdown := false
else if (strategy.equity < equityPeak)
    equityTrough := na(equityTrough) ? strategy.equity : math.min(equityTrough, strategy.equity)
    inDrawdown := true

// Calculate if the strategy should end
if not na(equityPeak) and not na(equityTrough)
    drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100
    if drawdownPercentage >= maxdraw
        end_strategy := true


// This code below is from Tradingview, but with additions where commented (see below)

longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if (shortCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/
    strategy.entry("My Short Entry Id", strategy.short)