Die Ressourcen sind geladen. Beförderung...

Erweiterte flexible mehrjährige Kreuzungsstrategie für gleitende Durchschnitte

Schriftsteller:ChaoZhang, Datum: 2024-11-28 15:18:47
Tags:- Nein.SMAEMAWMAHMASMMA

img

Übersicht

Diese Strategie ist ein fortschrittliches quantitatives Handelssystem, das auf mehreren gleitenden Durchschnitten und Zeitabschnitten basiert. Es ermöglicht es den Händlern, flexibel verschiedene Arten von gleitenden Durchschnitten (einschließlich SMA, EMA, WMA, HMA und SMMA) auszuwählen und je nach Marktbedingungen zwischen mehreren Zeitabschnitten wie täglichen, wöchentlichen oder monatlichen Zeitrahmen zu wechseln. Die Kernlogik bestimmt Kauf- und Verkaufssignale, indem der Schlusskurs mit der ausgewählten gleitenden Durchschnittsposition verglichen wird und gleichzeitig verschiedene Zeitabschnitte überprüft werden, um die Genauigkeit des Handels zu verbessern.

Strategieprinzipien

Die Strategie verwendet ein modulares Design mit vier Kernkomponenten: gleitender Durchschnittsart-Selektionsmodul, Zeitrahmen-Selektionsmodul, Signalgenerierungsmodul und Positionsmanagementmodul. Wenn der Schlusskurs über den ausgewählten gleitenden Durchschnitt geht, erzeugt das System zu Beginn der nächsten Handelsperiode ein Long-Signal; wenn der Schlusskurs unter den gleitenden Durchschnitt geht, erzeugt das System ein Schlusssignal. Die Strategie implementiert die Berechnung von Querschnittsdaten über die request.security-Funktion, um die Signalgenauigkeit über verschiedene Zeitrahmen hinweg zu gewährleisten. Darüber hinaus umfasst die Strategie das automatische Schließen der Position am Ende des Backtestings, um die Sicherheit des Kapitals zu gewährleisten.

Strategische Vorteile

  1. Hohe Flexibilität: Unterstützt Kombinationen mehrerer gleitender Durchschnittsarten und Zeiträume und passt sich unterschiedlichen Marktumgebungen an
  2. Umfassende Risikokontrolle: Vermeidung verpasster Chancen durch automatische Kontrollmechanismen am Ende des Zeitraums
  3. Rationales Kapitalmanagement: Prozentsatzmanagement der Beschäftigtenpositionen für eine wirksame Risikokontrolle
  4. Starke Signalstabilität: Verringert falsche Signale durch mehrere Bestätigungsmechanismen
  5. Breite Anpassungsfähigkeit: Anwendbar auf verschiedene Handelsinstrumente und Marktumgebungen

Strategische Risiken

  1. Verzögerungsrisiko: Die gleitenden Durchschnittsindikatoren weisen eine gewisse Verzögerung auf, was möglicherweise zu verzögerten Ein- und Ausstiegszeiten führt.
  2. Oszillationsrisiko: Kann bei seitlichen Märkten häufige falsche Breakout-Signale erzeugen
  3. Zwischenzeitliches Risiko: Signale aus verschiedenen Zeitabschnitten können sich widersprechen und erfordern eine effektive Signalpriorisierung
  4. Kapitalverwaltungsrisiko: Bei bestimmten Marktbedingungen können feste Prozentsätze zu aggressiv sein

Strategieoptimierungsrichtlinien

  1. Einbeziehung von Volatilitätsindikatoren: Vorschlag für die Ergänzung von ATR- oder Bollinger-Bändern für die dynamische Positionsgrößerung
  2. Hinzufügen von Trendfiltern: Kann langfristige Trendbeurteilungsmechanismen nur für offene Positionen in der Haupttrendrichtung hinzufügen
  3. Optimieren Sie die Signalbestätigung: Erwägen Sie die Einführung von Lautstärke und anderen Hilfsindikatoren zur Verbesserung der Signalzuverlässigkeit
  4. Verbesserung des Stop-Loss-Mechanismus: Ergänzung der Stop-Loss-Funktionalität für einen besseren Gewinnschutz
  5. Hinzufügen von Marktstimmungsindikatoren: Vorschlag für die Einführung von RSI oder MACD zur Beurteilung von Marktüberkauf/Überverkauf

Zusammenfassung

Diese Strategie ist ein gut konzipiertes Handelssystem mit klarer Logik, das den Händlern ein zuverlässiges Handelswerkzeug durch flexible Parameter-Einstellungen und mehrere Bestätigungsmechanismen bietet.


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

//@version=5
strategy("Flexible Moving Average Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Input to select the review frequency (Daily, Weekly, Monthly)
check_frequency = input.string("Weekly", title="Review Frequency", options=["Daily", "Weekly", "Monthly"])

// Input to select the Moving Average method (SMA, EMA, WMA, HMA, SMMA)
ma_method = input.string("EMA", title="Moving Average Method", options=["SMA", "EMA", "WMA", "HMA", "SMMA"])

// Input to select the length of the Moving Average
ma_length = input.int(30, title="Moving Average Length", minval=1)

// Input to select the timeframe for Moving Average calculation
ma_timeframe = input.string("W", title="Moving Average Timeframe", options=["D", "W", "M"])

// Calculate all Moving Averages on the selected timeframe
sma_value = request.security(syminfo.tickerid, ma_timeframe, ta.sma(close, ma_length), lookahead=barmerge.lookahead_off)
ema_value = request.security(syminfo.tickerid, ma_timeframe, ta.ema(close, ma_length), lookahead=barmerge.lookahead_off)
wma_value = request.security(syminfo.tickerid, ma_timeframe, ta.wma(close, ma_length), lookahead=barmerge.lookahead_off)
hma_value = request.security(syminfo.tickerid, ma_timeframe, ta.hma(close, ma_length), lookahead=barmerge.lookahead_off)
smma_value = request.security(syminfo.tickerid, ma_timeframe, ta.rma(close, ma_length), lookahead=barmerge.lookahead_off) // Smoothed Moving Average (SMMA)

// Select the appropriate Moving Average based on user input
ma = ma_method == "SMA" ? sma_value : 
     ma_method == "EMA" ? ema_value :
     ma_method == "WMA" ? wma_value :
     ma_method == "HMA" ? hma_value :
     smma_value  // Default to SMMA

// Variable initialization
var float previous_close = na
var float previous_ma = na
var float close_to_compare = na
var float ma_to_compare = na

// Detect the end of the period (Daily, Weekly, or Monthly) based on the selected frequency
var bool is_period_end = false

if check_frequency == "Daily"
    is_period_end := ta.change(time('D')) != 0
else if check_frequency == "Weekly"
    is_period_end := ta.change(time('W')) != 0
else if check_frequency == "Monthly"
    is_period_end := ta.change(time('M')) != 0

// Store the close and Moving Average values at the end of the period
if is_period_end
    previous_close := close[0]  // Closing price of the last day of the period
    previous_ma := ma[0]  // Moving Average value at the end of the period

// Strategy logic
is_period_start = is_period_end

// Check if this is the first bar of the backtest
is_first_bar = barstate.isfirst

if (is_period_start or is_first_bar)
    // If the previous period values are not available, use current values
    close_to_compare := not na(previous_close) ? previous_close : close[0]
    ma_to_compare := not na(previous_ma) ? previous_ma : ma[0]
    
    if close_to_compare < ma_to_compare
        // Close price below the MA -> Sell
        if strategy.position_size > 0
            strategy.close("Long")
    else
        // Close price above the MA -> Buy/Hold
        if strategy.position_size == 0
            strategy.entry("Long", strategy.long)

// Close all positions at the end of the backtest period
if barstate.islastconfirmedhistory
    strategy.close_all(comment="Backtest End")

// Plot the previous period's close price for comparison
plot(previous_close, color=color.red, title="Previous Period Close", style=plot.style_stepline)
plot(close_to_compare, color=color.blue, title="Close to Compare", style=plot.style_line)

// Plot the selected Moving Average
plot(ma, color=color.white, title="Moving Average", style=plot.style_line, linewidth=3)

Verwandt

Mehr