
Die Strategie ist im Wesentlichen eine Linear-Crossing-Strategie. Durch die Berechnung eines Moving Averages der Preise und die Festlegung eines bestimmten langfristigen Moving Averages, wird ein Plus gemacht, wenn ein kurzfristiger Moving Average den langfristigen Moving Average von unten durchquert; ein Minus, wenn ein kurzfristiger Moving Average den langfristigen Moving Average von oben durchquert.
Die Kernidee der Price Average Crossover Strategie ist, dass der Moving Average der Preise die Tendenz der Preisänderungen effektiv widerspiegelt. Die Strategie erzeugt ein Handelssignal, indem sie zwei bewegliche Durchschnitte mit unterschiedlichen Perioden und eine bestimmte Handelslogik verwendet, um die Veränderungen der Markttrends zu beurteilen.
Die Strategie berechnet eine längerfristige und eine kürzerfristige Durchschnittslinie. Die lange Linie beurteilt hauptsächlich den großen Trend, die kurze Linie wird verwendet, um die kurzfristigen Schwankungen im Laufe des großen Trends zu erfassen. Die Handelssignale der Strategie stammen hauptsächlich aus der Kreuzung von kurzen und langen Linien: Die kurze Linie durchläuft die lange Linie als Mehrsignal und die kurze Linie durchläuft die lange Linie als Fehlsignal.
Insbesondere verwendet die Strategie 7 verschiedene Arten von Moving Averages, darunter SMA, EMA, VWMA, etc. Der Benutzer kann den Typ des Moving Averages wählen. Die Länge des Moving Averages kann flexibel eingestellt werden. Darüber hinaus bietet die Strategie eine bestimmte Handelszeitbegrenzung und eine Positionsverwaltungsmechanik. Mit diesen Einstellungen kann der Benutzer die Parameter der Strategie flexibel anpassen, um sie an verschiedene Sorten und Marktbedingungen anzupassen.
Die wichtigsten Vorteile der Preis-Durchschnitts-Kreuzungsstrategie sind:
Die Strategie ist klar und einfach zu verstehen und zu implementieren, und ist für Anfänger geeignet.
Die Strategie ist solide und basiert auf den vollständig bewiesenen Regeln für einheitliche Handelsströme, die durch die Praxis des Marktes geprüft wurden.
Die Strategieparameter sind flexibel anpassbar, so dass der Benutzer die richtigen Parameter wählen kann, je nachdem, wie er den Markt beurteilt und bevorzugt.
Die Strategie beinhaltet Risikokontrollmechanismen, die die Haltedauer von Verlustpapieren reduzieren und unnötige Rückschlüsse verhindern.
Die Strategie enthält verschiedene Arten von Moving Averages, die dem Benutzer am besten für seine Handelsvariante geeignet sind.
Die Strategie unterstützt die Einleitung von Handelslogiken in bestimmten Handelszeiten und vermeidet außergewöhnliche Schwankungen in den Hauptreisemärkten.
Obwohl die Preis-Durchschnitts-Kreuzung-Strategie viele Vorteile hat, gibt es auch gewisse Risiken im realen Handel, die sich hauptsächlich in den folgenden beiden Aspekten widerspiegeln:
Da der größte Teil der Moving Averages nachlässig ist, kann es sein, dass ein Kreuzungssignal zu einem späteren Zeitpunkt nach dem Abschluss der Kursumkehr auftritt und leicht eingeschlossen wird.
Wenn die Parameter nicht richtig eingestellt sind, können die Kreuzungen zu häufig sein, was zu hoher Handelsaktivität führt und zu höheren Handelskosten führt.
Diese Risiken können kontrolliert und bewältigt werden, indem:
Die Einzelschaden-Risiken werden kontrolliert, indem eine moderate Stop-Loss-Marge festgelegt wird.
Erhöhung der Filterbedingungen, Verringerung der Handelsfrequenz und Verhinderung von Überhandelungen.
Optimierung der Parameter für die Moving Averages und Auswahl der Parameterkombinationen, die am besten für die eigene Handelsvariante und -periode geeignet sind. Stabilität der Strategie unter verschiedenen Marktbedingungen testen.
Der Preis-Durchschnitts-Kreuzung-Strategie gibt es noch mehr Optimierungsmöglichkeiten, und zwar in folgenden Bereichen:
Erhöhung der Schutzmechanismen bei Überschwänglichkeiten, z. B. die Aussetzung des Handels bei starken Preisschwankungen, um außergewöhnliche Marktphasen zu vermeiden.
Mehr Filterbedingungen und Kombination von Handelssignalen, um die Qualität und Stabilität des Signals zu verbessern. Zum Beispiel die Kombination mit anderen technischen Indikatoren, die eine starke Tendenz erkennen.
Ein dynamisches Parametersystem. Schlüsselparameter wie die Länge der Moving Average und der Handelsschalter werden automatisch an die Marktbedingungen angepasst und die Eigenschaften der Sorte angepasst, anstatt feste Werte zu verwenden.
Das Durchschnitts-Cross-Signal wird in einer höheren Strategie, wie z. B. bei kombinierter Arbitrage mit mehreren Sorten, eingesetzt. In Kombination mit anderen Informationen wird eine tiefe Strategieoptimierung durchgeführt.
Diese Empfehlungen können dazu beitragen, die Anwendung der Strategie zu erweitern, die Effektivität des Handels zu verbessern und die Risiko-Rendite besser zu integrieren.
In diesem Artikel wird die einfache Linear-Cross-Strategie von Noro’s CrossMA detailliert analysiert. Wir analysieren ihre Strategieideen, Grundlagenstrukturen, Hauptvorteile und mögliche Verbesserungsmöglichkeiten. Die Strategie als Ganzes ist logisch klar, praktisch einfach, flexibel an die Parameter angepasst und kann an verschiedene Handelsumgebungen angepasst werden.
/*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")