Kreuzbewegliche durchschnittliche Preisstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-27 16:52:19
Tags:

img

Übersicht

Durch die Berechnung des gleitenden Durchschnitts der Preise und die Festlegung bestimmter kurzfristiger und langfristiger gleitender Durchschnitte, gehen Sie lang, wenn der kurzfristige gleitende Durchschnitt über dem langfristigen gleitenden Durchschnitt von unten kreuzt; gehen Sie kurz, wenn der kurzfristige gleitende Durchschnitt unter dem langfristigen gleitenden Durchschnitt von oben kreuzt.

Grundsätze

Die Kernidee der Preissteigerungs-Kreuzstrategie ist: Der gleitende Durchschnitt des Preises kann den Trend der Preisänderung effektiv widerspiegeln.

Die Strategie berechnet einen längerfristigen gleitenden Durchschnitt und einen kürzerfristigen. Die lange Linie beurteilt hauptsächlich den Haupttrend, und die kurze Linie wird verwendet, um mittelfristige Schwankungen während des Haupttrends zu erfassen. Die Handelssignale der Strategie stammen hauptsächlich aus der Kreuzung der kurzen Linie über die lange Linie: das lange Signal, wenn die kurze Linie über die lange Linie kreuzt, und das kurze Signal, wenn die kurze Linie darunter kreuzt. Darüber hinaus filtert die Strategie die Signale, um falsche Signale zu vermeiden.

Insbesondere verwendet die Strategie 7 verschiedene Arten von gleitenden Durchschnitten, darunter SMA, EMA, VWMA usw. Die Benutzer können den gleitenden Durchschnittstyp auswählen. Die Länge des gleitenden Durchschnitts kann auch flexibel festgelegt werden. Darüber hinaus bietet die Strategie auch Beschränkungen für bestimmte Handelszeiten und Positionsmanagementmechanismen. Durch diese Einstellungen können die Benutzer die Parameter der Strategie flexibel anpassen, um sich an verschiedene Sorten und Marktumgebungen anzupassen.

Analyse der Vorteile

Die wichtigsten Vorteile der Querschnittsstrategie für gleitende Durchschnittspreise sind folgende:

  1. Die Strategielogik ist klar und einfach, leicht verständlich und umsetzbar und für Anfänger geeignet.

  2. Das Prinzip der Strategie ist solide, basiert auf vollständig überprüften Regeln für den Handel mit gleitenden Durchschnitten und wurde auf den Märkten praktisch erprobt.

  3. Die Parameter der Strategie sind flexibel und anpassbar, die Nutzer können entsprechend ihren eigenen Beurteilungen und Vorlieben auf dem Markt geeignete Parameter auswählen.

  4. Die Strategie verfügt über bestimmte Risikokontrollmechanismen, um die Aufbewahrungszeit von Verlustordern zu verkürzen und unnötige Reverse-Positionen zu verhindern.

  5. Die Strategie enthält mehrere Arten von gleitenden Durchschnitten.

  6. Die Strategie unterstützt die Bereitstellung einer Handelslogik während bestimmter Handelszeiten, um abnormale Schwankungen auf den wichtigsten Ferienmärkten zu vermeiden.

Risikoanalyse

Obwohl die Kursdurchschnitts-Kreuzstrategie viele Vorteile hat, bestehen bei dem tatsächlichen Handel noch einige Risiken, die sich hauptsächlich in den folgenden beiden Aspekten widerspiegeln:

  1. Aufgrund der Verzögerung der meisten gleitenden Durchschnitte können nach Abschluss der Preisumkehr im späteren Stadium Kreuzsignale auftreten, die leicht gefangen werden können.

  2. Bei unsachgemäßen Parameter-Einstellungen können zu häufige Kreuzsignale auftreten, was zu einer zu hohen Handelsaktivität und höheren Handelskosten führt.

Aufgrund der oben genannten Risiken werden die Kontrollen und Bewältigungsmethoden wie folgt durchgeführt:

  1. Das Risiko eines einzelnen Verlustes wird durch die Festlegung eines geeigneten Stop-Loss-Bereichs kontrolliert.

  2. Reduzieren Sie die Handelsfrequenz und verhindern Sie Überhandel, indem Sie Filterbedingungen hinzufügen.

  3. Optimieren Sie die Parameter des gleitenden Durchschnitts, um die am besten geeignete Kombination von Parametern für Ihre eigenen Handelsvarianten und -zyklen auszuwählen.

Optimierung

Es gibt noch Raum für eine weitere Optimierung dieser Preis-Durchschnitts-Crossover-Strategie, und zwar in folgenden Bereichen:

  1. Erhöhung des Schutzmechanismus bei extremen Marktbedingungen, z. B. vorübergehende Aussetzung des Handels bei starken Preisschwankungen, um abnormale Marktbedingungen zu vermeiden.

  2. Erhöhen Sie die Filterbedingungen und kombinieren Sie Handelssignale, um die Signalqualität und Stabilität zu verbessern.

  3. Ein dynamisches Parametersystem annehmen. Gemäß den Marktbedingungen und den Merkmalen der Sorten automatisch wichtige Parameter wie gleitende Durchschnittslänge, Handelsschalter usw. anstelle von festen Werten anpassen.

  4. Verwenden Sie dieses gleitende Durchschnitts-Crossover-Signal in fortgeschrittenen Strategien wie Composite Variety Arbitrage. Kombinieren Sie es mit anderen Informationen für eine tiefgreifende Strategieoptimierung.

Diese Vorschläge können das anwendbare Umfeld und die Wirksamkeit dieser Strategie erweitern und einen besseren Risiko-Rendite-Ausgleich erreichen.

Schlussfolgerung

Dieser Artikel macht eine detaillierte Code-Analyse und Interpretation der einfachen gleitenden Durchschnitts-Crossover-Strategie - Noros CrossMA. Wir analysieren ihre Strategieidee, Prinzipienstruktur, Hauptvorteile und mögliche Verbesserungsrichtungen. Insgesamt hat diese Strategie eine klare Logik und ist einfach und praktisch. Die flexible Parameteranpassung kann sich an viele Handelsumgebungen anpassen. Wir zerlegen auch bestehende Probleme und Risiken in der Strategie und geben gezielte Ratschläge. Es wird angenommen, dass durch diese umfassenden Analysen und Diskussionen Händler solche Arten von Strategien besser verstehen und ihnen helfen können, reale Handelssysteme kontinuierlich zu optimieren.


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

//Noro
//2019

//@version=4
strategy(title = "Noro's CrossMA", shorttitle = "CrossMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.1)

needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
type = input(defval = "SMA", options = ["SMA", "EMA", "VWMA", "DEMA", "TEMA", "KAMA", "PCMA"], title = "MA type")
src = input(close, defval = close, title = "MA Source")
len = input(30, defval = 30, minval = 1, title = "MA length")
off = input(00, defval = 00, minval = 0, title = "MA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
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")

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2)
kama = 0.0
kama := nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

sma_1 = sma(src, len)
ema_1 = ema(src, len)
vwma_1 = vwma(src, len)
ma2 = type == "SMA" ? sma_1 : type == "EMA" ? ema_1 : type == "VWMA" ? vwma_1 : type == "DEMA" ? dema : type == "TEMA" ? tema : type == "KAMA" ? kama : type == "PCMA" ? center : 0
ma = ma2[off]

macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)

//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)

//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend == 1 and trend[1] == -1
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if trend == -1 and trend[1] == 1
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if size > 0 and needshort == false and trend == -1
    strategy.close_all()
if size < 0 and needlong == false and trend == 1
    strategy.close_all()
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Mehr