Strategie für den Durchbruch des doppelten gleitenden Durchschnittspreises

Schriftsteller:ChaoZhang, Datum: 2023-11-21 15:33:52
Tags:

img

Übersicht

Diese Strategie verwendet zwei gleitende Durchschnitte, um Preistrends und Durchbrüche zu bestimmen. Gehen Sie kurz, wenn der Preis durch die obere Schiene bricht, und gehen Sie lang, wenn der Preis durch die untere Schiene bricht. Setzen Sie Stop-Loss-Ausgänge, um Risiken zu kontrollieren.

Grundsätze

  1. Verwenden Sie die Funktion sma(), um kurz- und langfristige gleitende Durchschnitte zu berechnen, die als obere und untere Schiene der Handelsstrategie dienen.
  2. Berechnen Sie Kauf- und Verkaufspreis: Kaufpreis ist die untere Schiene multipliziert mit einem Koeffizienten kleiner als 1 und Verkaufspreis ist die obere Schiene multipliziert mit einem Koeffizienten größer als 1.
  3. Wenn der Preis die obere Schiene durchbricht, öffnen Sie eine Short-Position mit einer Marktorder; wenn der Preis die untere Schiene durchbricht, öffnen Sie eine Long-Position mit einer Limit-Order.
  4. Setzen Sie den Jahres-, Monats- und Datumsbereich, um den Handelszyklus der Strategie zu steuern.
  5. Schließen Sie alle Positionen, wenn der Backtest endet oder den Datumsbereich überschreitet.

Vorteile

Diese Strategie hat folgende Vorteile:

  1. Die Verwendung eines Doppelbahnsystems kann Marktlärm filtern und Trends erkennen.
  2. Die Verwendung des Preisdurchbruchs zur Bestimmung des Eintrittszeitraums kann falsche Signale reduzieren.
  3. Die Verwendung von Limit Orders reduziert die Kosten für die Auswirkungen auf den Markt.
  4. Der Handelszyklus kann leicht angepasst werden, um Strategierisiken zu kontrollieren.

Risiken

Diese Strategie birgt auch einige Risiken:

  1. Bei doppelten Gleisdurchbrüchen kann es leicht zu einem kontinuierlichen Verlustrisiko kommen.
  2. Wenn das Handelsziel in die Konsolidierung eintritt, besteht die Gefahr, dass zu viele Transaktionen stattfinden.
  3. Limit-Orders können einige Kaufmöglichkeiten verpassen.

Optimierung

Diese Strategie kann in folgenden Aspekten optimiert werden:

  1. Versuche verschiedene Kombinationen von gleitenden Durchschnittslängen, um die besten Parameter zu finden.
  2. Erhöhen Sie den Volumenindikator, um Durchbrüche im Transaktionsvolumen zu ermitteln.
  3. Erhöhen Sie den anpassungsfähigen Stop-Loss-Mechanismus, um den Stop-Loss-Preis in Echtzeit anzupassen.
  4. Erhöhung von Modellen für maschinelles Lernen zur Bestimmung der Trendrichtung.

Zusammenfassung

Die Gesamtidee dieser Strategie ist klar und leicht verständlich. Durch die Verwendung des Doppelschienensystems zur Identifizierung von Trends und die Verwendung von Preisdurchbrüchen zur Bestimmung des Eintrittszeitraums kann es Lärm filtern und stabile Gewinne erzielen. Es gibt auch Raum für Verbesserung und Optimierung. Insgesamt ist es eine reproduzierbare quantitative Handelsstrategie mit praktischem Wert.


/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Shift MA Strategy v1.0", shorttitle = "Shift MA str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, defval = 1, minval = 1, maxval = 1000, title = "Length")
src = input(ohlc4, title = "Source")
buylevel = input(-5.0, defval = -5.0, minval = -100, maxval = 0, title = "Buy line (lime)")
selllevel = input(0.0, defval = 0.0, minval = -100, maxval = 100, title = "Sell line (red)")
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")

//SMAs
sma = sma(src, per) 
buy = sma * ((100 + buylevel) / 100)
sell = sma * ((100 + selllevel) / 100)
plot(buy, linewidth = 2, color = lime, title = "Buy line")
plot(sell, linewidth = 2, color = red, title = "Sell line")

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0
    strategy.entry("L", strategy.long, lot, limit = buy)
    
if (not na(close[per]))    
    strategy.entry("Close", strategy.short, 0, limit = sell)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Mehr