Die Ressourcen sind geladen. Beförderung...

EMA/SMA-Trend mit Swing-Trading-Strategie kombiniert Volumenfilter und Prozentsatz Take-Profit/Stop-Loss-System

Schriftsteller:ChaoZhang, Datum: 2024-12-11 15:12:35
Tags:EMASMA

img

Übersicht

Diese Strategie ist ein umfassendes Handelssystem, das Trendfolgen mit Swing-Handelsmethoden kombiniert, EMA- und SMA-Crossovers, Swing-Hoch-/Low-Identifizierung, Volumenfilterung und prozentual basierte Take-Profit- und Trailing-Stop-Loss-Mechanismen verwendet.

Strategieprinzipien

Die Strategie setzt einen mehrschichtigen Signalfiltermechanismus ein, beginnend mit EMA ((10) und SMA ((21) Crossovers für die grundlegende Trendbestimmung, dann mit 6-Bar-Links-/Rechts-Pivot-Punkte-Breakouts für den Einstiegszeitplan, wobei das Volumen über dem gleitenden Durchschnitt von 200 Perioden benötigt wird, um ausreichende Liquidität zu gewährleisten. Das System verwendet 2% Take-Profit und 1% Trailing Stop-Loss für das Risikomanagement. Long-Positionen werden initiiert, wenn der Preis mit Volumenbestätigung über Swing-Höchststände bricht; Short-Positionen werden genommen, wenn der Preis mit Volumenbestätigung unter Swing-Tiefstände bricht.

Strategische Vorteile

  1. Mehrfache Signalbestätigung reduziert falsche Signale durch Trend-, Preis- und Volumen-Erweiterungsverifizierung
  2. Flexible Gewinn-/Verlustverwaltung mit prozentual basierender Gewinnspanne mit nachträglichem Stop-Loss
  3. Umfassendes Visualisierungssystem zur Überwachung von Trades und Signalen
  4. Hohe Anpassbarkeit mit verstellbaren Schlüsselparametern
  5. Systematisches Risikomanagement durch vorgegebene Stop-Loss- und Take-Profit-Level

Strategische Risiken

  1. Potenzielle falsche Ausbrüche auf verschiedenen Märkten
  2. Die Lautstärkungsfilterung kann einige gültige Signale übersehen.
  3. Festverzinsung könnte bei starken Trends zu früh aussteigen
  4. Das gleitende Durchschnittssystem hat eine inhärente Verzögerung bei schnellen Umkehrungen
  5. Bedarf an Berücksichtigung der Auswirkungen der Handelskosten auf die Strategieerträge

Optimierungsrichtlinien

  1. Einführung einer Volatilitätsanpassung für die dynamische Anpassung von Take-Profit/Stop-Loss
  2. Hinzufügen von Trendstärkefiltern, um den Handel mit schwachen Trends zu vermeiden
  3. Optimierung des Volumenfilteralgorithmus unter Berücksichtigung relativer Volumenänderungen
  4. Einführung zeitbasierter Filter, um ungünstige Handelszeiten zu vermeiden
  5. Berücksichtigung der Einstufung des Marktsystems für die Anpassung der Parameter

Zusammenfassung

Die Strategie baut ein vollständiges Handelssystem durch gleitende Durchschnitte, Preisbrechungen und Volumenverifizierung auf, das für den mittelfristigen bis langfristigen Trend geeignet ist. Ihre Stärken liegen in der Bestätigung mehrerer Signale und dem umfassenden Risikomanagement, obwohl die Leistung in verschiedenen Märkten Aufmerksamkeit erfordert. Durch die vorgeschlagenen Optimierungen, insbesondere in der Anpassungsfähigkeit, hat die Strategie Raum für eine Verbesserung der Stabilität und Leistung.


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

//@version=5
// Strategy combining EMA/SMA Crossover, Swing High/Low, Volume Filtering, and Percentage TP & Trailing Stop
strategy("Swing High/Low Strategy with Volume, EMA/SMA Crossovers, Percentage TP and Trailing Stop", overlay=true)

// --- Inputs ---
source = close
TITLE = input(false, title='Enable Alerts & Background Color for EMA/SMA Crossovers')
turnonAlerts = input(true, title='Turn on Alerts?')
colorbars = input(true, title="Color Bars?")
turnonEMASMA = input(true, title='Turn on EMA1 & SMA2?')
backgroundcolor = input(false, title='Enable Background Color?')

// EMA/SMA Lengths
emaLength = input.int(10, minval=1, title='EMA Length')
smaLength = input.int(21, minval=1, title='SMA Length')
ema1 = ta.ema(source, emaLength)
sma2 = ta.sma(source, smaLength)

// Swing High/Low Lengths
leftBars = input.int(6, title="Left Bars for Swing High/Low", minval=1)
rightBars = input.int(6, title="Right Bars for Swing High/Low", minval=1)

// Volume MA Length
volMaLength = input.int(200, title="Volume Moving Average Length")

// Percentage Take Profit with hundredth place adjustment
takeProfitPercent = input.float(2.00, title="Take Profit Percentage (%)", minval=0.01, step=0.01) / 100

// Trailing Stop Loss Option
useTrailingStop = input.bool(true, title="Enable Trailing Stop Loss?")
trailingStopPercent = input.float(1.00, title="Trailing Stop Loss Percentage (%)", minval=0.01, step=0.01) / 100

// --- Swing High/Low Logic ---
pivotHigh(_leftBars, _rightBars) =>
    ta.pivothigh(_leftBars, _rightBars)

pivotLow(_leftBars, _rightBars) =>
    ta.pivotlow(_leftBars, _rightBars)

ph = fixnan(pivotHigh(leftBars, rightBars))
pl = fixnan(pivotLow(leftBars, rightBars))

// --- Volume Condition ---
volMa = ta.sma(volume, volMaLength)

// Declare exit conditions as 'var' so they are initialized
var bool longExitCondition = na
var bool shortExitCondition = na

// --- Long Entry Condition: Close above Swing High & Volume >= 200 MA ---
longCondition = (close > ph and volume >= volMa)
if (longCondition)
    strategy.entry("Long", strategy.long)

// --- Short Entry Condition: Close below Swing Low & Volume >= 200 MA ---
shortCondition = (close < pl and volume >= volMa)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// --- Take Profit and Trailing Stop Logic ---

// For long position: Set take profit at the entry price + takeProfitPercent
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercent)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercent)

// --- Long Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Long
    strategy.exit("Long Exit", "Long", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=longTakeProfitLevel)
else
    // Exit Long on Take Profit only
    strategy.exit("Long Exit", "Long", limit=longTakeProfitLevel)

// --- Short Exit Logic ---
if (useTrailingStop)
    // Trailing Stop for Short
    strategy.exit("Short Exit", "Short", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=shortTakeProfitLevel)
else
    // Exit Short on Take Profit only
    strategy.exit("Short Exit", "Short", limit=shortTakeProfitLevel)

// --- Plot Swing High/Low ---

plot(ph, style=plot.style_circles, linewidth=1, color=color.blue, offset=-rightBars, title="Swing High")
plot(ph, style=plot.style_line, linewidth=1, color=color.blue, offset=0, title="Swing High")
plot(pl, style=plot.style_circles, linewidth=1, color=color.red, offset=-rightBars, title="Swing High")
plot(pl, style=plot.style_line, linewidth=1, color=color.red, offset=0, title="Swing High")
// --- Plot EMA/SMA ---
plot(turnonEMASMA ? ema1 : na, color=color.green, title="EMA")
plot(turnonEMASMA ? sma2 : na, color=color.orange, title="SMA")

// --- Alerts ---
alertcondition(longCondition, title="Long Entry", message="Price closed above Swing High with Volume >= 200 MA")
alertcondition(shortCondition, title="Short Entry", message="Price closed below Swing Low with Volume >= 200 MA")

// --- Bar Colors for Visualization ---
barcolor(longCondition ? color.green : na, title="Long Entry Color")
barcolor(shortCondition ? color.red : na, title="Short Entry Color")
bgcolor(backgroundcolor ? (ema1 > sma2 ? color.new(color.green, 50) : color.new(color.red, 50)) : na)

Verwandt

Mehr