Mehrstufige Handelsstrategie für bewegliche Umschaltquoten

Schriftsteller:ChaoZhang, Datum: 23.09.2023
Tags:

Übersicht

Die Multi-Level Shift Moving Average Trading-Strategie setzt mehrere Shift Moving Average-Linien mit unterschiedlichen Parametern ein und stoppt Verluste auf mehreren Ebenen. Die Strategie berechnet zunächst 3 lange Linien und 3 kurze Linien. Sie geht lang, wenn die langen Linien unter den kurzen Linien liegen, und kurz, wenn die kurzen Linien unter den langen Linien liegen. Die Strategie ermöglicht die Anpassung von Parametern wie der gleitenden Durchschnittsperiode, Shift Ratio, handelbarem Zeitrahmen usw. Sie eignet sich für den mittelfristigen Trendhandel.

Strategie Logik

  1. Berechnen Sie den einfachen gleitenden Durchschnitt des src-Preises als Basislinie.

  2. Die Anzahl der langen und kurzen Linien wird anhand der langen und kurzen Parameter festgelegt.

  3. Die Longline1 usw. wird durch Verschiebung der Basislinie entsprechend den Longlevel1 usw. Verhältnissen eingestellt.

  4. Eintritt man in Geschäfte auf mehreren Ebenen, wenn der Preis die Linien innerhalb der handelbaren Zeiten überschreitet.

  5. Stop-Loss, wenn der Preis die Basislinie berührt.

  6. Macht alle Positionen nach der Endzeit geschlossen.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Der Eintritt auf mehreren Ebenen ermöglicht es, in verschiedenen Phasen des Trends zu profitieren.

  2. Sehr anpassbar mit Parametern für verschiedene Produkte und Handelsstile.

  3. Zuverlässiges Breakout-System basierend auf gleitenden Durchschnitten.

  4. Vermeiden Sie große Ereignisse, indem Sie einen handelbaren Zeitrahmen festlegen.

  5. Verluste durch Stopp-Loss eingeschränkt

Risikoanalyse

Einige Risiken der Strategie:

  1. Hohe Risiken bei Pyramidenpositionen, genügend Kapital erforderlich.

  2. Falsche Parameter können zu einem Überhandel führen.

  3. Festgelegte Ausstiegszeiten können den späten Trendgewinn verpassen.

  4. Keine Berücksichtigung von Overnight-Positionen und Carry-Kosten.

  5. Keine Kontrolle über die Positionsgröße.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen verbessert werden:

  1. Hinzufügen von Trailing Stop Loss anstelle einer festen Ausgangsperiode.

  2. Betrachten Sie die Carry-Kosten für Overnight-Positionen.

  3. Hinzufügen von Stop Loss, um späte Gewinne zu erfassen.

  4. Dynamische Größenpositionen basierend auf der aktuellen Exposition.

  5. Testparameter auf verschiedenen Produkten und Optimierungsmethoden.

  6. Optimieren Sie die Stop-Loss-Niveaus, um unnötige Stopps zu vermeiden.

Zusammenfassung

Die Multi-Level Shift Moving Average Strategie profitiert von Trends durch Multi-Level Entry basierend auf gleitenden Durchschnitten. Die handelbaren Zeiten und Stop-Loss-Kontrollen riskieren gut. Weitere Verbesserungen bei der Carry-Kostenkontrolle, Parameteroptimierung, Stop-Loss-Optimierung usw. können die Strategie verbessern und lohnen sich zu recherchieren.


/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's ShiftMA-multi Strategy v1.1", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
long = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for long")
short = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
src = input(ohlc4, title = "MA Source")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick

//MA
ma = sma(src, len)
longline1 = long >= 1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long >= 2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long >= 3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short >= 1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short >= 2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short >= 3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//Lines
colorlong1 = long >= 1 ? color.lime : na
colorlong2 = long >= 2 ? color.lime : na
colorlong3 = long >= 3 ? color.lime : na
colorshort1 = short >= 1 ? color.red : na
colorshort2 = short >= 2 ? color.red : na
colorshort3 = short >= 3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort1)
plot(shortline2, offset = offset, color = colorshort2)
plot(shortline1, offset = offset, color = colorshort3)
plot(ma, offset = offset, color = color.blue)
plot(longline1, offset = offset, color = colorlong1)
plot(longline2, offset = offset, color = colorlong2)
plot(longline3, offset = offset, color = colorlong3)

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long >= 1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long >= 2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long >= 3 and needtime))
    
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short >= 1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short >= 2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short >= 3 and needtime))
if size > 0
    strategy.entry("TPL", strategy.short, 0, limit = ma)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Mehr