Dynamische Kanal-Durchschnitts-Trendverfolgungsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-02-22 15:51:48
Tags:

img

Übersicht

Diese Strategie basiert auf dem Prinzip des dynamischen Kanals und des gleitenden Durchschnittstrends. Sie berechnet den dynamischen Preiskanal, beurteilt die Trendrichtung durch die oberen und unteren Schienen des Kanals und erzeugt Handelssignale, indem sie den gleitenden Durchschnitt kombiniert, um die Preisvolatilität zu filtern. Diese Strategie eignet sich für den mittelfristigen und kurzfristigen Trendhandel.

Grundsätze

Die wichtigsten Grundsätze dieser Strategie sind:

  1. Berechnen Sie den dynamischen Preiskanal. Die Kanalmittellinie wird aus dem höchsten Preis und dem niedrigsten Preis berechnet. Die obere Schiene ist die mittlere Linie + Preisvolatilität MA, und die untere Schiene ist die mittlere Linie - Preisvolatilität MA.

  2. Beurteilen Sie die Trendrichtung. Wenn der Preis durch die obere Schiene bricht, wird er als bullish definiert. Wenn der Preis durch die untere Schiene bricht, wird er als bearish definiert.

  3. Filtergeräusche: Verwenden Sie die Preisvolatilität MA eines bestimmten Zeitraums, um Geräusche von zufälligen Preisschwankungen zu filtern.

  4. Erzeugen Sie Handelssignale. Beim Aufschwung wird ein Kaufsignal erzeugt, wenn der Schlusskurs in diesem Zeitraum niedriger als der offene Preis ist. Beim Abnehmen wird ein Verkaufssignal erzeugt, wenn der Schlusskurs höher als der offene Preis ist.

Vorteile

Die Vorteile dieser Strategie sind:

  1. Der dynamische Kanal kann den Preistrend in Echtzeit erfassen.
  2. Der MA-Filter kann falsche Signale reduzieren.
  3. Die Kombination von Trendrichtung und K-Line-Entity-Richtung zur Erzeugung von Handelssignalen verhindert, dass man in die Falle gerät.

Risiken

Die Risiken dieser Strategie sind:

  1. Eine unsachgemäße Auswahl von Param kann zu einer Überanpassung führen.
  2. Es ist leicht, falsche Signale bei seitlicher Volatilität zu erzeugen.
  3. Sie kann keine extremen Preisschwankungen vorhersagen.

Lösungen:

  1. Strenge Param-Auswahl und Tests.
  2. Fügen Sie Filterbedingungen hinzu, um die Seiten zu identifizieren.
  3. Einstellen von Stop-Loss/Profit zur Risikokontrolle.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Teststabilität verschiedener Periodenparam.
  2. Um die Dynamik zu beurteilen, fügen Sie Volumen- oder Volatilitätsindikatoren hinzu.
  3. Kombination von Bands, Kanälen usw. zur Bestimmung von Eingang und Ausgang.

Zusammenfassung

Diese Strategie integriert die Ideen des dynamischen Kanal- und MA-Trendbeurteilens und ist gut in der Erfassung von Trendrichtungen auf mittlere und kurze Sicht geeignet.


/*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"}]
*/


//@version=2
strategy("Noro's Bands Strategy v1.0", shorttitle = "NoroBands str 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
color = input(true, "Color")
needbb = input(false, defval = false, title = "Show Bands")
needbg = input(false, defval = false, title = "Show Background")
src = close

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

//dist
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma

//Trend
trend = close < ld and high < hd ? -1 : close > hd and low > ld ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")

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

//up =  and trend == 1 ? 1 : 0
//dn =  and trend == -1 ? 1 : 0 

up = close < hd and trend == 1 and (close < open or color == false) ? 1 : 0
dn = close > ld and trend == -1 and (close > open or color == false) ? 1 : 0 

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

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

Mehr