Dynamische Crossover-Strategie für gleitende Durchschnitte


Erstellungsdatum: 2024-02-05 10:23:10 zuletzt geändert: 2024-02-05 10:23:10
Kopie: 0 Klicks: 536
1
konzentrieren Sie sich auf
1617
Anhänger

Dynamische Crossover-Strategie für gleitende Durchschnitte

Überblick

Die Dynamic Moving Average Crossover Combo Strategy ist eine kombinierte Handelsstrategie, die mehrere technische Indikatoren und Marktphasen-Erkennung integriert. Sie berechnet dynamisch die Volatilität des Marktes und beurteilt die drei Phasen des Marktes nach der Entfernung und Volatilität der Preise von den langfristigen Moving Averages: Schwingung, Trend und Korrektur. In verschiedenen Marktphasen verwendet die Strategie unterschiedliche Aufnahme- und Ausstiegsregeln und sendet gleichzeitig Kauf- und Verkaufssignale aus, die von mehreren Indikatoren wie EMA/SMA-Kreuzungen, MACD und Bollinger Bands kombiniert werden.

Strategieprinzip

Berechnung der Marktvolatilität

Der Indikator ATR (Average True Rate of Volatility) wird verwendet, um die Tagesvolatilität der letzten 14 Tage des Marktes zu berechnen. Die Durchschnittsvolatilität wird dann mit einem 100-Tage-Simplementierten Moving Average-Filter berechnet.

Beurteilung der Marktphase

Der Abstand des Preises zum 200-Tage-Simple Moving Average wird berechnet. Wenn der Abstand mehr als das 1,5-fache der durchschnittlichen Volatilität übersteigt und die Richtung klar ist, wird er als Trendbewegung beurteilt. Wenn die aktuelle Volatilität mehr als das 1,5-fache der durchschnittlichen Volatilität übersteigt, wird er als Schwingung beurteilt.

EMA/SMA-Kreuzung

Die schnelle EMA hat einen 10-Tage-Zyklus, die langsame SMA einen 30-Tage-Zyklus. Wenn die schnelle EMA einen langsamen SMA durchbricht, wird ein Kaufsignal erzeugt.

MACD

Berechnen Sie die Parameter 12, 26, 9 MACD. Es wird ein Kaufsignal erzeugt, wenn die MACD-Säule positiv wird.

Bollinger Bands

Wenn die Breite des Kanals kleiner ist als der eigene 20-Tage-SMA, wird die Berechnungsdauer als Berechnungsdauer bewertet.

Eintrittsregeln

Schwingungsphase: Schnelle oder langsame Linie-Kreuzung oder MACD-Pillar Korrektur, und der Schlusskurs innerhalb der Bollinger Bands, die Eintritt zu tun mehr.

Trends: Kurz-Linien-Kreuzungen oder MACD-Säulen, bei denen die Eintrittsregeln verändert werden.

Die Bilanz zeigt, dass der Preis für den Kauf von Gold und Goldstücke in der Lower Band höher ist als der Preis für den Kauf von Gold und Gold in der Lower Band.

Spielregeln

Wenn die MACD zwei K-Linien in Folge negativ ist und der Schlusskurs zwei Tage in Folge gesunken ist.

Der StockRSI ist in der Überkaufzone.

Die Preise für die “Upper Band” sind in den letzten Jahren deutlich gestiegen.

Analyse der Stärken

Es handelt sich um eine intelligente Handelsstrategie, die die Beurteilung der Marktumstände mit folgenden Vorteilen kombiniert:

  1. Systematische Vorgehensweise und weniger subjektive Eingriffe

  2. Die Strategie ist besser anpassungsfähig, wenn sie mit den Parametern der Marktumgebung abgestimmt ist.

  3. Mehrindikator-Kombination, um die Signalsicherheit zu erhöhen.

  4. Bollinger Bands automatische Stop-Loss, um das Risiko zu verringern.

  5. Das ist eine sehr komplexe Methode, um falsche Signale zu filtern.

  6. Dynamische Stop-Loss-Stopps und Trend-Tracking-Gewinne.

Risikoanalyse

Die wichtigsten Risiken sind:

  1. Die falsche Einstellung der Parameter kann dazu führen, dass die Strategie fehlschlägt.

  2. Modellfehler aufgrund von Unvorhergesehenen.

  3. Es wird empfohlen, einen Broker mit niedrigen Gebühren zu wählen.

  4. Die Kombination von mehreren Indikatoren erhöht die Komplexität der Strategie. Es wird empfohlen, die Kernindikatoren zu wählen.

Optimierungsrichtung

Die folgenden Dimensionen können weiter optimiert werden:

  1. Die Analyse der Marktumstände wurde in den letzten Jahren in den meisten Ländern der Welt durchgeführt.

  2. Die Einführung eines Moduls für maschinelles Lernen, um die Anpassung der Parameter zu ermöglichen.

  3. In Verbindung mit der Textverarbeitung wird das Risiko eines Ereignisses beurteilt.

  4. Es ist eine sehr gute Idee, um eine optimale Kombination zu finden, um mehrere Märkte zu überprüfen.

  5. Die Trailing-Stopp-Strategie für die Erhöhung des Stopps.

Zusammenfassen

Die Dynamic Moving Average Cross Combination Strategy ist eine Multi-Indicator Intelligent Trading Strategy. Sie kann mit Parametern, die sich an die Marktumgebung anpassen, systematische, bedingungsorientierte Geschäfte abwickeln. Sie hat eine starke Anpassungsfähigkeit und Bestimmtheit. Die Einstellung der Parameter und das Hinzufügen von Modulen erfordert jedoch Vorsicht, um die Strategie nicht zu komplex zu machen.

Strategiequellcode
/*backtest
start: 2024-01-28 00:00:00
end: 2024-02-04 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true)

// Volatility
volatility = ta.atr(14)
avg_volatility_sma = ta.sma(volatility, 100)
avg_volatility = na(avg_volatility_sma) ? 0 : avg_volatility_sma

// Market Phase detection
long_term_ma = ta.sma(close, 200)
distance_from_long_term_ma = close - long_term_ma
var bool isTrending = math.abs(distance_from_long_term_ma) > 1.5 * avg_volatility and not na(distance_from_long_term_ma)
var bool isVolatile = volatility > 1.5 * avg_volatility

// EMA/MA Crossover
fast_length = 10
slow_length = 30
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.sma(close, slow_length)
crossover_signal = ta.crossover(fast_ma, slow_ma)

// MACD
[macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9)
macd_signal = crossover_signal or (macdHistogram > 0)

// Bollinger Bands
source = close
basis = ta.sma(source, 20)
upper = basis + 2 * ta.stdev(source, 20)
lower = basis - 2 * ta.stdev(source, 20)
isConsolidating = (upper - lower) < ta.sma(upper - lower, 20)

// StockRSI
length = 14
K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length))
D = ta.sma(K, 3)
overbought = 75
oversold = 25

var float potential_SL = na
var float potential_TP = na
var bool buy_condition = na
var bool sell_condition = na

// Buy and Sell Control Variables
var bool hasBought = false
var bool hasSold = true

// Previous values tracking
prev_macdHistogram = macdHistogram[1]
prev_close = close[1]

// Modify sell_condition with the new criteria
if isVolatile
    buy_condition := not hasBought and crossover_signal or macd_signal and (close > lower) and (close < upper)
    sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - 0.5 * volatility
    potential_TP := close + volatility

if isTrending
    buy_condition := not hasBought and crossover_signal or macd_signal
    sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - volatility
    potential_TP := close + 2 * volatility

if isConsolidating
    buy_condition := not hasBought and crossover_signal and (close > lower)
    sell_condition := hasBought and (close < upper) and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - 0.5 * volatility
    potential_TP := close + volatility

// Update the hasBought and hasSold flags
if buy_condition
    hasBought := true
    hasSold := false

if sell_condition
    hasBought := false
    hasSold := true

// Strategy Entry and Exit
if buy_condition
    strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP)
    strategy.exit("SELL_TS", from_entry="BUY", trail_price=close, trail_offset=close * 0.05)

if sell_condition
    strategy.close("BUY")
    
// Visualization
plotshape(series=buy_condition, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=sell_condition, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)

plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1)
plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr)
plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr)

bgcolor(isVolatile ? color.new(color.purple, 90) : isTrending ? color.new(color.blue, 90) : isConsolidating ? color.new(color.orange, 90) : na)