Duale gleitende Durchschnitts-Trendfolgestrategie


Erstellungsdatum: 2023-09-18 21:57:00 zuletzt geändert: 2023-09-18 21:57:00
Kopie: 1 Klicks: 646
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie nutzt eine Kombination aus schnellen und langsamen Moving Averages, um die Richtung des Trends zu bestimmen. Die schnelle Linie erzeugt ein Handelssignal, wenn sie die langsame Linie durchbricht, und gehört zu einem Dual Moving Average Trading System.

Grundsätze

Die Strategie verwendet einen schnelleren Moving Average mit einer kürzeren Länge und einen langen langsamen Moving Average.

Ein langsamer MA wird verwendet, um die Richtung des Haupttrends zu bestimmen. Wenn der Preis oberhalb des MA liegt, wird er als Aufwärtstrend beurteilt; wenn der Preis unterhalb des MA liegt, wird er als Abwärtstrend beurteilt.

In einem Aufwärtstrend erzeugt ein Kaufsignal, wenn ein schneller MA auf einem schnellen MA überschreitet; in einem Abwärtstrend erzeugt ein Verkaufssignal, wenn ein schneller MA unter einem schnellen MA überschreitet.

Nach dem Erscheinen des Handelssignals kann die Option ausgewählt werden, ob der Stop-Loss-Bereich eingestellt wird, um den Stop-Loss weiter zu verfolgen.

Vorteile

  1. Die MA-Kombination kann Trends schneller und effektiver erkennen.

  2. Schnell-MA kann ein empfindlicheres Handelssignal erzeugen.

  3. Das ist eine sehr schwierige Aufgabe.

  4. Es gibt verschiedene MA-Algorithmen, wie EMA, DEMA usw.

  5. Eine Stop-Loss-Strategie kann aktiviert werden, um den Stop-Loss zu verfolgen.

Risiken und Lösungen

  1. Es gibt Probleme mit der MA-Verzögerung, die zu Signalverzögerungen führen können.

  2. Der Stoppschaden kann zu nahe kommen und durch einen Durchbruch verursacht werden. Der Schwankungsraum sollte entsprechend belassen werden.

  3. Es besteht die Gefahr, dass die Preise manipuliert werden, ohne dass die Transaktionsmenge berücksichtigt wird.

  4. Die Beurteilung basiert nur auf der Gefahr, falsche Signale zu erzeugen. Es können weitere Faktoren hinzugefügt werden.

  5. Parameteroptimierungsschwierigkeiten. Optimale Parameter können mit Schritt-Schritt-Optimierung oder genetischen Algorithmen gefunden werden.

Optimierung

  1. Verschiedene Parameter des MA-Algorithmus werden getestet, um die optimale Parameter zu finden.

  2. Die Studie untersucht die Adaption von Moving Averages zur Verbesserung der Sensitivität.

  3. Zusätzliche Indikatoren oder Faktoren zur Optimierung der Signalfilterung.

  4. Es wurde ein dynamischer Stop-Loss-Mechanismus geschaffen, um die Stop-Loss-Flexibilisierung zu ermöglichen.

  5. Optimierung der Kapitalmanagementstrategien, z. B. Positionsanpassung an die ATR-Dynamik

Zusammenfassen

Die Strategie nutzt die doppelte MA-Kreuzbeurteilung, um Handelssignale zu erzeugen, die das Stop-Loss-Limiting-Risiko einstellen können. Die Handelslogik ist einfach und klar, aber es gibt Probleme mit der Parameterwahl. Die Strategie kann durch Parameteroptimierung, Indikatorfilterung, Stop-Loss-Strategie usw. verbessert werden, um die Strategie stabiler und zuverlässiger zu machen.

Strategiequellcode
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.7", shorttitle = "Trend MAs str 1.7", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
type = input(7, defval = 7, minval = 1, maxval = 7, title = "Type of Slow MA")
src = input(close, defval = close, title = "Source of Slow MA")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needarr = input(false, defval = false, title = "Need entry arrows?")

fastsma = ema(src, fastlen)

//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 = nz(kama[1]) + nsmooth * (src - nz(kama[1]))

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

//Trend
ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0
trend = low > ma and low[1] > ma[1] and low[2] > ma[2] ? 1 : high < ma and high[1] < ma[1] ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Signals
min = min(open, close)
max = max(open, close)
up = trend == 1 and (low < fastsma or usefastsma == false) and redbars == 1 ? 1 : 0
dn = trend == -1 and (high > fastsma or usefastsma == false) and greenbars == 1 ? 1 : 0

//Lines
colorfastsma = usefastsma == true ? red : na
plot(fastsma, color = colorfastsma, title = "Fast MA")
plot(ma, color = blue, linewidth = 3, transp = 0, title = "Slow MA")

//Arrows
plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0)
plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0)

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)

//Alerts
alertcondition(up == 1, title='buy', message='Uptrend')
alertcondition(dn == 1, title='sell', message='Downtrend')

//Trading
stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]

longCondition = up == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
    strategy.exit("Stop Long", "Long", stop = stoplong)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    strategy.exit("Stop Short", "Short", stop = stopshort)