Diese Strategie verwendet den WaveTrend-Indikator, um Preistrends und Überkauf/Überverkaufssituationen zu bestimmen.
Die Strategie verwendet den WaveTrend-Indikator zur Bestimmung der Kursentwicklung. Der WaveTrend-Indikator wird auf der Grundlage des Regenbogen-Indikators verbessert. Er beurteilt die Kursentwicklung, indem er die Differenz zwischen dem gleitenden Durchschnitt von Heikin-Ashi und dem absoluten Wert des Preises berechnet. Er erzeugt Handelssignale, indem er den RSI-Indikator kombiniert, um Überkauf/Überverkaufssituationen zu bestimmen.
Insbesondere lautet die WaveTrend-Formel in der Strategie:
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)
Wo esa der berechnete gleitende Heikin-Ashi-Durchschnitt ist, d der Mittelwert der Differenz zwischen dem gleitenden Heikin-Ashi-Durchschnitt und dem absoluten Preiswert. ci der sogenannte adaptive Bereich, der die Volatilität der Preise widerspiegelt. wt der gleitende Durchschnitt von ci, der die Kursentwicklung bestimmt und der wichtigste Indikator für Long und Short ist.
Der RSI-Indikator wird zur Bestimmung von Überkauf-/Überverkaufssituationen verwendet.
rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))
Der Standardwert beträgt 0-100. Über 70 ist Überkauf und unter 30 ist Überverkauf.
In Kombination mit diesen beiden Indikatoren wird, wenn der RSI unter 25 und der WaveTrend unter -60 liegt, überverkauft, um lang zu gehen.
Zu den Vorteilen dieser Strategie gehören:
Es gibt auch einige Risiken:
Lösungen:
Die Strategie kann in folgenden Richtungen optimiert werden:
Änderung oder Hinzufügung von Beurteilungsindikatoren zur Verbesserung der Signalgenauigkeit, z. B. MACD, KD usw.
Optimierung der Parameter-Einstellungen für die Anpassung verschiedener Produkte, z. B. Anpassung der Gleichlaufzeiten.
Für die Berechnung der Risikopositionen werden die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 und die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 und die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 und die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 und die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 und die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 und die Risikopositionen gemäß Anhang I der Verordnung (EU) Nr. 575/2013 ermittelt.
Betrachten Sie verschiedene Pyramidenstrategien, z.B. Martingale anstelle einer festen Menge.
Optimieren Sie die Adaptivbereichsparameter, um die Urteilsgenauigkeit zu verbessern.
Die Gesamtidee der Strategie ist klar, wobei Volatilitätsindikatoren verwendet werden, um Preistrends zu bestimmen und Lärm effektiv zu filtern. Es gibt Raum für Optimierungen in mehreren Aspekten, um die Strategie robuster zu machen. Durch Parameter-Tuning kann sie an verschiedene Produkte angepasst werden und lohnt sich weitere Live-Tests.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's WaveTrender Strategy v1.0", shorttitle = "WaveTrender str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usemar = input(false, defval = false, title = "Use Martingale") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") showarr = input(true, defval = true, title = "Show Arrows") fromyear = input(2018, defval = 2018, 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") //RSI rsiup = rma(max(change(close), 0), 14) rsidown = rma(-min(change(close), 0), 14) rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown)) //WaveTrend esa = ema(hlc3, 10) d = ema(abs(hlc3 - esa), 10) ci = (hlc3 - esa) / (0.015 * d) wt = ema(ci, 21) //Body body = abs(close - open) abody = sma(body, 10) //Signals bar = close > open ? 1 : close < open ? -1 : 0 overs = rsi < 25 and wt < -60 overb = rsi > 75 and wt > 60 up1 = (strategy.position_size == 0 or close < strategy.position_avg_price) and overs and bar == -1 dn1 = (strategy.position_size == 0 or close > strategy.position_avg_price) and overb and bar == 1 exit = (strategy.position_size > 0 and overs == false) or (strategy.position_size < 0 and overb == false) //Arrows col = exit ? black : up1 or dn1 ? blue : na needup = up1 needdn = dn1 needexitup = exit and strategy.position_size < 0 needexitdn = exit and strategy.position_size > 0 plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0) plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0) plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0) //Trading profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1] mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1 lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1] if up1 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, needlong == false ? 0 : lot) if dn1 if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot) if exit strategy.close_all()