Diese Strategie verwendet eine Kombination aus schnellen und langsamen Durchschnittslinien, um die Richtung des Trends zu bestimmen und die mittleren und langen Trends zu erfassen. Der Trendhandel ist eine typische Trendbeobachtungsstrategie.
Die Strategie basiert hauptsächlich auf dem Gold- und Gold-Dead-Fork der Gleichung, um die Markttrends zu beurteilen. Insbesondere verwendet die Strategie eine schnelle 5-Zyklus-Durchschnittslinie und eine langsame 21-Zyklus-Durchschnittslinie.
Wenn die schnelle Durchschnittslinie die langsame Durchschnittslinie durchbricht, bedeutet dies, dass der Markttrend mehr umschlägt, und die Strategie wird beim nächsten K-Linien-Open mehr tun. Wenn die schnelle Durchschnittslinie die langsame Durchschnittslinie unterhalb der schnellen Durchschnittslinie durchbricht, bedeutet dies, dass der Markttrend sich umdreht, und die Strategie wird beim nächsten K-Linien-Open frei machen.
Die Strategie setzt außerdem den Parameter “bars” ein, um falsche Durchbrüche zu filtern. Der Parameter ist auf 2 festgelegt, d.h. eine schnelle Mittellinie benötigt 2 aufeinanderfolgende K-Leitung über einer langsamen Mittellinie, um mehrere Signale zu senden, um falsche Durchbrüche effektiv zu filtern.
Für Kryptowährungen wurde die Strategie mit einer Extremwert-Logik ergänzt. Das Handelssignal wird nur ausgegeben, wenn sich die schnelle und die langsame Durchschnittslinie gleichzeitig im Extrembereich befinden. Dies dient auch dazu, falsche Durchbrüche weiter zu vermeiden.
Strategische Ausstiegsregeln sind einfach und unkompliziert, und der Kurs wird aus der aktuellen Position ausgeschaltet, wenn der Stop-Loss-Punkt ausgelöst wird.
Das Risiko kann durch folgende Maßnahmen verringert werden:
Diese Strategie kann in folgenden Bereichen optimiert werden:
Weitere Kombinationen können getestet werden, um die Mittellinie-Parameter zu finden, die für den aktuellen Markt geeignet sind. Zum Beispiel wird die Schnelllinie mit 10 und die Langleine mit 50 Perioden angepasst.
Es können weitere Indikatoren wie MACD, KDJ und andere getestet werden, um strengere Bedingungen zu setzen und falsche Durchbrüche zu vermeiden.
Derzeitige Eintritte sind zu einfach und auf die Durchschnittslinie angewiesen, was wie folgt optimiert werden kann:
Andere Stop-Methoden können getestet werden, z. B. die Verfolgung von Stopps, um zu verhindern, dass Stopps zu früh ausgelöst werden.
Wenn die Position beendet ist, kann der Eintritt wieder aufgenommen werden, um die Verlust von Trends zu verringern.
Diese Strategie als eine grundlegende Trend-Tracking-Strategie, die Kernidee ist einfach und direkt, die Verwendung von zwei Gleichlinien, die Trend-Richtung zu beurteilen, und mobile Stop-Loss-Risiken zu steuern. Die Vorteile sind leicht zu verstehen und zu realisieren, kann der Trend profitieren, und die Risiken können auch kontrolliert werden. Aber es gibt auch einige Mängel, die in der Schließung der Märkte nicht korrekt sind, und Stop-Loss zu früh ausgelöst werden kann.
/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's Trend MAs Strategy v2.3", shorttitle = "Trend MAs str 2.3", 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, %")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, 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?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")
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")
src = close
//PriceChannel 1
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2
//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2
//Trend
trend = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[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
//Fast RSI
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//CryptoBottom
mac = sma(close, 10)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)
//Signals
up1 = trend == 1 and (low < center2 or usefastsma == false) and redbars == 1
dn1 = trend == -1 and (high > center2 or usefastsma == false) and greenbars == 1
up2 = high < center and high < center2 and bar == -1 and needex
dn2 = low > center and low > center2 and bar == 1 and needex
up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0
//Lines
plot(center2, color = red, linewidth = 3, transp = 0, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//Trading
stoplong = up1 == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn1 == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]
if up1 or up2 or up3
strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
strategy.exit("Stop Long", "Long", stop = stoplong)
if dn1
strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
strategy.exit("Stop Short", "Short", stop = stopshort)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()