Strategie zur Verringerung der doppelten dynamischen Dynamik des gleitenden Durchschnittes

Schriftsteller:ChaoZhang, Datum: 2023-12-25 17:01:28
Tags:

img

Übersicht

Diese Strategie kombiniert drei verschiedene technische Indikatoren und erzeugt Handelssignale mit einem doppelten gleitenden Durchschnittssystem mit zusätzlichen Filtern basierend auf Farbe und Körper der Kerzen, um eine relativ stabile und effektive kurzfristige Handelsstrategie zu konstruieren.

Strategie Logik

Die Strategie verwendet Bollinger-Bänder und KC-Kanäle in Kombination, um Komprimierungs- und Expansionsphasen auf dem Markt zu identifizieren. Insbesondere, wenn Bollinger-Bänder innerhalb des KC-Kanals sind, wird es als Komprimierung betrachtet; wenn Bollinger-Bänder durch den KC-Kanal durchbrechen, wird es als Expansion betrachtet. Komprimierung repräsentiert verstärkte Volatilität und mögliche Trendumkehrung, und lineare Regression wird als primärer Handelssignalindikator zu diesem Zeitpunkt verwendet.

Wenn das lineare Regressionshistogramm positiv ist (ein Aufwärtstrend darstellt) und der Balken ein roter Kerzenstern ist (ein Schließen darstellt), während der Kerzensternkörper gleichzeitig größer als 1/3 des durchschnittlichen Körpers der letzten 30 Kerzen ist, geht ein solches Kombinationssignal lang. Umgekehrt, wenn das lineare Regressionshistogramm negativ ist, ist der Balken ein grüner Kerzenstern, und der Körper ist auch groß, geht er kurz.

Die Strategie enthält auch eine Visualisierung des Verdichtungs- und Erweiterungshintergrunds, um das Marktstadium zu beurteilen.

Analyse der Vorteile

  • Die Verwendung mehrerer Indikatoren für die Kombination kann effektiv falsche Signale filtern
  • Kompression stellt potenzielle Umkehrpunkte dar und verbessert die Strategieleistung
  • Der Körperfilter verhindert, dass kleine Wellen falscher Ausbrüche Sie irreführen.
  • Einfach bessere Ergebnisse durch Parameteroptimierung zu erzielen

Risikoanalyse

  • Lineare Regression kann leicht falsche Signale auslösen, was zu Verlusten führen kann
  • Der Effekt von Bollinger-Bändern und KC-Kanälen bei der Beurteilung der Kompression ist nicht ideal.
  • Die Filterkriterien sind zu streng, möglicherweise fehlen bessere Einstiegspunkte
  • Abzüge können größer sein, müssen einem gewissen Toleranzgrad standhalten

Die Risiken können durch Anpassung der Indikatorparameter, Optimierung der Filterkriterien usw. verringert werden.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Versuchen Sie verschiedene Parameterkombinationen und Längen, um die optimalen Parameter zu finden
  2. Erhöhen oder verringern Sie die Filterbedingungen, um das optimale Filterniveau zu finden
  3. Verwenden Sie maschinelles Lernen, um automatisch optimale Parameter zu finden
  4. Testeffekte bei bestimmten Sorten und Anpassung der Parameter an die verschiedenen Sorten
  5. Hinzufügen einer Stop-Loss-Strategie zur Kontrolle einzelner Verluste

Schlussfolgerung

Diese Strategie kombiniert mehrere Indikatoren, identifiziert Komprimierungsmöglichkeiten und erhöht die Filterbedingungen, um eine relativ robuste effiziente kurzfristige Strategie zu bilden. Durch Parameter- und Filterbedingungenoptimierung können bessere Ergebnisse erzielt werden.


/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2017

//@version=2
strategy(shorttitle = "Squeeze str 1.0", title="Noro's Squeeze Momentum Strategy v1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
length = input(20, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = true
usecolor = input(true, defval = true, title = "Use color of candle")
usebody = input(true, defval = true, title = "Use EMA Body")
needbg = input(false, defval = false, title = "Show trend 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")

// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn  = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz  = (sqzOn == false) and (sqzOff == false)

val = linreg(source  -  avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)

bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : gray 

trend = val > 0 ? 1 : val < 0 ? -1 : 0

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

//EMA Body
body = abs(close - open)
emabody = ema(body, 30) / 3

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = trend == 1 and (bar == -1 or usecolor == false) and (body > emabody or usebody == false)
dn = trend == -1 and (bar == 1 or usecolor == false) and (body > emabody or usebody == false)

if up
    strategy.entry("Long", strategy.long)

if dn
    strategy.entry("Short", strategy.short)

Mehr