Strategie des Goldenen Kreuzes und des Todeskreuzes

Schriftsteller:ChaoZhang, Datum: 2023-10-11 16:33:18
Tags:

Übersicht

Diese Strategie nutzt das goldene Kreuz und das Todeskreuz der einfachen gleitenden Durchschnitte, um lange und kurze Positionen für Aktien zu implementieren.

Strategie Logik

Die Strategie definiert zunächst den Zeitrahmen für die Rückprüfung und legt dann die Berechnungsparameter für die beiden gleitenden Durchschnitte, einschließlich der Art der MA und der Dauer der Periode, fest.

Mit der Funktion getMAType( werden die Werte der beiden MA berechnet. fastMA ist der kürzere Zeitraum MA und slowMA der längere Zeitraum MA.

Die Kernlogik:

  • Wenn fastMA über slowMA überschreitet, wird ein langes Signal ausgelöst.

  • Wenn fastMA unter slowMA fällt, wird ein kurzes Signal ausgelöst.

Abschließend, während des Backtestings, nehmen Sie eine lange Position ein, wenn Sie ein langes Signal sehen, und nehmen Sie eine kurze Position ein, wenn Sie ein kurzes Signal sehen.

Analyse der Vorteile

  • Einfache und klare Strategieidee, leicht zu verstehen und umzusetzen.
  • Verwendet weit verbreitete MA-Crossover-Prinzipien, die für die meisten Lagerprodukte geeignet sind.
  • Anpassbare MA-Typen und -parameter, hohe Anpassungsfähigkeit.
  • Modulare Strategiestruktur, klare Funktionalität, leicht zu optimieren.

Risikoanalyse

  • MA-Crossover haben etwas Verzögerung, können einige Handelsmöglichkeiten verpassen.
  • Sie können die Märkte nicht effektiv filtern, da sie anfällig für eine Falle sind.
  • Parameteroptimierung ist nicht umfassend genug, erfordert manuelle Erfahrung.
  • Nicht in der Lage, Risiken und Verluste pro Handel wirksam zu kontrollieren.

Mögliche Optimierungen gegenüber den Risiken:

  1. Hinzufügen anderer technischer Indikatoren zur Trendenbestimmung.

  2. Der Betrag des Stop-Loss wird dem Kontrollwert pro Handelsverlust zugerechnet.

  3. Fügen Sie Volumenindikatoren hinzu, um Whipsaw-Märkte zu vermeiden.

  4. Bauen Sie Parameteroptimierungsmechanismen auf, um automatisch optimale Parametermengen zu finden.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Fügen Sie Stop-Loss-Strategien wie feste Stop-Loss-Punkte oder Trailing Stop-Loss hinzu, um Verluste zu kontrollieren.

  2. Zusätzliche Positionsgrößenstrategien wie die feste oder dynamische Positionsgröße zur Kontrolle von Handelsrisiken.

  3. Fügen Sie Filter hinzu, indem Sie sie mit anderen technischen Indikatoren kombinieren, um Trends zu erkennen und die Gewinnrate zu verbessern.

  4. Optimieren Sie die Parameter mit Methoden wie Rastersuche und lineare Regression, um optimale Werte zu finden.

  5. Erweitern Sie Einstiegsstrategien wie Breakout-Pullback, Skalieren Sie die Aufträge, um Handelstaktiken zu bereichern.

  6. Fügen Sie Volumenindikatoren hinzu, um Whipsaw-Märkte zu vermeiden.

  7. Produkte auf Aktienindizes, Devisen, Kryptowährungen usw. erweitern.

Zusammenfassung

Diese Strategie implementiert die Auswahl von Long/Short-Aktien basierend auf MA-Crossover-Prinzipien. Die Strategieidee ist einfach und klar, weit verbreitet, sehr anpassungsfähig und praktisch wertvoll. Aber sie hat auch einige Probleme mit dem Nachlassen und dem Filtern von Whipsaws. Zukünftige Optimierungen können sich auf die Verbesserung von Stop Loss, Parameteroptimierung, das Hinzufügen von Filtern usw. konzentrieren, um sie vorteilhafter zu machen.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2010, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() =>  true

///////////// MA Params /////////////
source1 = input(title="MA Source 1", defval=close)
maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"])
length1 = input(title="MA Length 1", defval=50)

source2 = input(title="MA Source 2", defval=close)
maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"])
length2 = input(title="MA Length 2", defval=200)

///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) => 
    res = sma(close, 1)
    
    if maType == "ema"
        res := ema(sourceType, maLen)
    if maType == "sma"
        res := sma(sourceType, maLen)
    if maType == "swma"
        res := swma(sourceType)
    if maType == "wma"
        res := wma(sourceType, maLen)
    res
    
///////////// MA /////////////
fastMA = getMAType(maType1, source1, length1)
slowMA = getMAType(maType2, source2, length2)

long = crossover(fastMA, slowMA)
short = crossunder(fastMA, slowMA)

/////////////// Plotting /////////////// 
checkColor() => fastMA > slowMA
colCheck = checkColor() ? color.lime : color.red
p1 = plot(fastMA, color = colCheck, linewidth=1)
p2 = plot(slowMA, color = colCheck, linewidth=1)
fill(p1, p2, color = checkColor() ? color.lime : color.red)
bgcolor(long ? color.lime : short ? color.red : na, transp=20)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("Long", strategy.long, when=long)
    strategy.entry("Short", strategy.short, when=short)

Mehr