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.
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.
Die Risiken können durch Anpassung der Indikatorparameter, Optimierung der Filterkriterien usw. verringert werden.
Die Strategie kann in folgenden Aspekten optimiert werden:
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)