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.
Berechnen Sie den einfachen gleitenden Durchschnitt des src-Preises als Basislinie.
Die Anzahl der langen und kurzen Linien wird anhand der langen und kurzen Parameter festgelegt.
Die Longline1 usw. wird durch Verschiebung der Basislinie entsprechend den Longlevel1 usw. Verhältnissen eingestellt.
Eintritt man in Geschäfte auf mehreren Ebenen, wenn der Preis die Linien innerhalb der handelbaren Zeiten überschreitet.
Stop-Loss, wenn der Preis die Basislinie berührt.
Macht alle Positionen nach der Endzeit geschlossen.
Die Strategie weist folgende Vorteile auf:
Der Eintritt auf mehreren Ebenen ermöglicht es, in verschiedenen Phasen des Trends zu profitieren.
Sehr anpassbar mit Parametern für verschiedene Produkte und Handelsstile.
Zuverlässiges Breakout-System basierend auf gleitenden Durchschnitten.
Vermeiden Sie große Ereignisse, indem Sie einen handelbaren Zeitrahmen festlegen.
Verluste durch Stopp-Loss eingeschränkt
Einige Risiken der Strategie:
Hohe Risiken bei Pyramidenpositionen, genügend Kapital erforderlich.
Falsche Parameter können zu einem Überhandel führen.
Festgelegte Ausstiegszeiten können den späten Trendgewinn verpassen.
Keine Berücksichtigung von Overnight-Positionen und Carry-Kosten.
Keine Kontrolle über die Positionsgröße.
Die Strategie kann in folgenden Bereichen verbessert werden:
Hinzufügen von Trailing Stop Loss anstelle einer festen Ausgangsperiode.
Betrachten Sie die Carry-Kosten für Overnight-Positionen.
Hinzufügen von Stop Loss, um späte Gewinne zu erfassen.
Dynamische Größenpositionen basierend auf der aktuellen Exposition.
Testparameter auf verschiedenen Produkten und Optimierungsmethoden.
Optimieren Sie die Stop-Loss-Niveaus, um unnötige Stopps zu vermeiden.
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()