Duales Moving Average Trend Tracking Trading System und adaptive dynamische Filterstrategie

EMA MA HMA
Erstellungsdatum: 2025-02-20 09:49:23 zuletzt geändert: 2025-02-27 17:51:58
Kopie: 0 Klicks: 305
2
konzentrieren Sie sich auf
319
Anhänger

Duales Moving Average Trend Tracking Trading System und adaptive dynamische Filterstrategie Duales Moving Average Trend Tracking Trading System und adaptive dynamische Filterstrategie

Überblick

Die Strategie ist ein Trend-Tracking-Trading-System, das mehrere technische Indikatoren kombiniert. Es basiert hauptsächlich auf dem Kreuzsignal von einfachen Moving Averages (SMA) und Index Moving Averages (EMA) und integriert mehrere erweiterte Features wie Hull Moving Averages (HMA) Trendband, William Index (%R) und schwingende Hoch-Low-Analyse, um durch einen dynamischen Filtermechanismus zuverlässigere Handelssignale zu liefern.

Strategieprinzip

Die Kernlogik der Strategie basiert auf folgenden Schlüsselelementen:

  1. Verwenden Sie ein 100-Perioden-SMA und ein 200-Perioden-EMA als Haupttrendindikatoren
  2. Der HMA-Trendband mit 70 integrierten Zyklen wird verwendet, um die Trenddynamik zu bestätigen
  3. Berechnung der dynamischen Unterstützungs-/Widerstandsposition mit dem William-Indikator ((%R)
  4. Hoch- und Tiefstandsbewegungen durch 20 Zyklen der Rücklauffensterprüfung
  5. Echtzeit-Überwachung und Aktualisierungen
  6. Setzen Sie den Filter für die Anfangsöffnung und den Schwellenwert für die Schwankungen (~ 0,5%) um falsche Signale zu reduzieren

Die Eintrittsbedingungen müssen gleichzeitig erfüllt sein: Doppel-Mittellinien auf der Preisstation, % R-Indikator, der 3 K-Linien in Folge steigt und größer als 20 ist, K-Linien schließen und der Schlusskurs ist höher als der vorherige, der Preis überschreitet nicht den Tagesschwankungsschwellenwert. Die Ausgangskonditionen erfüllen eine der folgenden Bedingungen: Der Preis fällt unter die doppelte Mittellinie, der %R-Wert liegt unter -80 .

Strategische Vorteile

  1. Synchronisierte Validierung von mehreren technischen Kennzahlen erhöht die Zuverlässigkeit von Handelssignalen
  2. Dynamische Filtermechanismen reduzieren die Falschsignale in Zeiten starker Schwankungen
  3. Die Berechnung der anpassungsfähigen Resistenzstützen ermöglicht eine gute Marktanpassungsfähigkeit der Strategie
  4. Vollständige Intra-Day-Trading-Management-Mechanismen, einschließlich der Filterung vor dem Start und der Kontrolle der Volatilität
  5. Anpassbarkeit der Parameter zur Optimierung für unterschiedliche Marktbedingungen

Strategisches Risiko

  1. Einheitliche Linien-Systeme können in einem wackligen Markt häufige Falschsignale erzeugen.
  2. Eine Filterung mit mehreren Bedingungen kann dazu führen, dass potenzielle Handelschancen verpasst werden.
  3. Der Fixed Moving Average kann sich in verschiedenen Marktumgebungen unterschiedlich auswirken
  4. Die Intra-Trade-Filtermechanismen könnten wichtige Chancen bei einem rasanten Trend verpassen.
  5. Überoptimierte Parameter können zu Problemen mit der Überpassung führen

Richtung der Strategieoptimierung

  1. Einführung einer selbstadaptiven linearen Periodizität, um die Systeme besser an Marktschwankungen anzupassen
  2. Erhöhung der Analyseindikatoren für den Umsatz, um die Zuverlässigkeit der Trendbestätigung zu verbessern
  3. Entwicklung von dynamischen Stop-Loss-Stopp-Mechanismen, um die Effizienz der Geldverwaltung zu verbessern
  4. Hinzufügen von Marktschwankungen zur Optimierung der Filterbedingungen
  5. Berücksichtigung der Synchronisation von Signalen in unterschiedlichen Zeiträumen, um die Stabilität des Systems zu erhöhen

Zusammenfassen

Es handelt sich um ein gut konzipiertes Trend-Tracking-Handelssystem, das durch die Kombination von mehreren technischen Indikatoren und einem strengen Filtermechanismus eine gute Flexibilität beibehält, während die Zuverlässigkeit gewährleistet wird. Der Optimierungsraum für die Strategie liegt hauptsächlich in der Anpassungsfähigkeit der Parameter und der Verbesserung der Risikomanagementmechanismen.

Strategiequellcode
/*backtest
start: 2025-01-01 00:00:00
end: 2025-01-31 23:59:59
period: 30m
basePeriod: 30m
exchanges: [{"eid":"Binance","currency":"TRB_USDT"}]
*/

//@version=5
strategy(title="EMA & MA Crossover Strategy", shorttitle="EMA & MA Crossover Strategy", overlay=true)

// Inputs
LengthMA = input.int(100, minval=1, title="MA Length")
LengthEMA = input.int(200, minval=1, title="EMA Length")
swingLookback = input.int(20, title="Swing Lookback")
Lengthhmaribbon = input.int(70, minval=1, title="HMA Ribbon")
// Input for ignoring the first `n` candles of the day
ignore_n_candles = input.int(1, "Ignore First N Candles", minval=0)
// Input for percentage threshold to ignore high run-up candles
run_up_threshold = input.float(0.5, "Run-up Threshold (%)", minval=0.0)

//====================================================================
hmacondition = ta.hma(close,Lengthhmaribbon)> ta.hma(close,Lengthhmaribbon)[1]

//====================================================================
// Function to drop the first `n` candles
dropn(src, n) =>
    na(src[n]) ? na : src

// Request data with the first `n` candles dropped
valid_candle = not na(dropn(close, ignore_n_candles))
// Check for run-up condition on the previous candle
prev_run_up = (high[1] - low[1]) / low[1] * 100

// Combine conditions: exclude invalid candles and ignore high run-up candles
valid_entry_condition = valid_candle and prev_run_up <= run_up_threshold

//======================================================
// Define the start of a new day based on time
var is_first = false
var float day_high = na
var float day_low = na

// Use time() to detect the start of a new day
t = time("1440") // 1440 = 60 * 24 (one full day in minutes)
is_first := na(t[1]) and not na(t) or t[1] < t

if is_first and barstate.isnew
    day_high := high
    day_low := low
else
    day_high := nz(day_high[1], high)
    day_low := nz(day_low[1], low)

// Update daily high and low
if high > day_high
    day_high := high

if low < day_low
    day_low := low

//====================================================
previousdayclose = request.security(syminfo.tickerid, "D", close)

day_highrange = previousdayclose*.018
//======================================================
length = input(title="Length", defval=14)
src = input(close, "Source")
_pr(length) =>
	max = ta.highest(length)
	min = ta.lowest(length)
	100 * (src - max) / (max - min)
percentR = _pr(length)

//======================================================
higherline = close* 1+((100-(percentR*-1))/100)
lowerline = close* 1-((100-(percentR*-1))/100)
//======================================================
// Moving Averages
xMA = ta.sma(close, LengthMA)
xEMA = ta.sma(xMA, LengthEMA)

// Plot the MA and EMA lines
plot(xMA, color=color.red, title="MA")
plot(xEMA, color=color.blue, title="EMA")

// Find recent swing high and low
recentHigh = ta.highest(high, swingLookback)
recentLow = ta.lowest(low, swingLookback)
//===============================================
emacondition = ta.ema(close,20)>ta.ema(close,30) and ta.ema(close,30)>ta.ema(close,40) and ta.ema(close,40)>ta.ema(close,50) and close >ta.ema(close,20)
// Define Buy Condition
buyCondition1 = (percentR>percentR[1] and percentR[1]>percentR[2] and percentR[2]>percentR[3]) and percentR>-20 and percentR[1]>-20
buyCondition = (close> xMA and close> xEMA) and (close > open and close > close[1]) or xMA>xEMA and close<day_highrange and hmacondition and emacondition

// Define Sell Conditions
sellCondition = (close < xMA and close < xEMA) or xMA<xEMA or percentR<-80

// Strategy Execution
if (buyCondition and buyCondition1 and valid_entry_condition)
    strategy.entry("Buy", strategy.long)

if (sellCondition)
    strategy.close("Buy")  // Close the long position

// Candle coloring for buy/sell indication
barcolor(buyCondition ? color.green : sellCondition ? color.red : na)
plot(higherline, color=color.olive, title="EMA")
plot(higherline, color=color.black, title="EMA")