Momentum-Squeeze-Strategie basierend auf Bollinger-Bändern und Kalkin-Kanälen


Erstellungsdatum: 2024-01-30 17:33:49 zuletzt geändert: 2024-01-30 17:33:49
Kopie: 0 Klicks: 869
1
konzentrieren Sie sich auf
1617
Anhänger

Momentum-Squeeze-Strategie basierend auf Bollinger-Bändern und Kalkin-Kanälen

Überblick

Es handelt sich um eine quantitative Handelsstrategie, die auf der Basis von LazyBear entwickelt wurde. Die Strategie integriert Brin-Band, Kalkin-Channel und Dynamic Indicators, um durch eine Kombination verschiedener technischer Indikatoren einen hohen Gewinn zu erzielen.

Strategieprinzip

Der Kern der Strategie ist der LazyBear-Dynamik-Extrusion-Indikator. Dieser Indikator beurteilt, ob die Bollinger Bands durch die Kalkinger Kanäle gedrosselt wurden. Wenn ein Extrusion stattfindet, bedeutet dies, dass der Markt in einen potenziellen Ausbruchpunkt eintritt.

Insbesondere berechnet die Strategie zunächst die 21-Zyklen-Brin-Band mit einer Bandbreite von 2 mal der Preisstandarddifferenz. Gleichzeitig wird der 20-Zyklen-Kalkin-Kanal mit einer Bandbreite von 1,5 mal der Preisdynamik berechnet.

Auf dem Spielfeld kann der Trend umgekehrt werden, wenn die Farbe des Dynamikindikators grau wird und die Position ausgleicht, was das Ende der Extreme bedeutet.

Strategische Vorteile

  1. Integration mehrerer technischer Indikatoren zur Verbesserung der Genauigkeit von Handelsentscheidungen

Die Strategie integriert Brin-Band, Kalkin-Kanal und Dynamik-Indikatoren, die durch die Beurteilung der Zusammenhänge dieser Indikatoren die Genauigkeit von Handelsentscheidungen verbessern und die Wahrscheinlichkeit von Fehlgeschäften verringern können.

  1. Akkurate Antriebsdrückungsplätze mit großem Gewinnpotenzial

Die Dynamik-Extrusion-Strategie kann die Schlüsselfunktionen eines Marktausbruchs erfassen. Diese Punkte sind oft die Wendepunkte, an denen der Markt wichtige Richtungsentscheidungen trifft. Wenn die richtige Entscheidung getroffen wird, wird die nachfolgende Laufzeit relativ lang sein, so dass der potenzielle Gewinnraum der Strategie groß ist.

  1. Durchbruchstransaktionen mit hoher Erfolgsrate

Die Strategie wählte einen Eingangspunkt, der sich an den Extremschnittpunkten zwischen dem Brin-Band und dem Kalkin-Kanal befindet, im Vergleich zu einem zufälligen Durchbruch, der eine hohe Erfolgsrate hat, wenn man die Integration der Indikatoren beurteilt.

Strategisches Risiko

  1. Einstellung von Brin-Band- und Kalkin-Kanal-Parametern

Die Periodensätze und Bandbreiten der Brin- und Kalkin-Kanäle haben einen großen Einfluss auf die Ergebnisse der Strategie. Die falsche Einstellung der Parameter kann zu Fehleinschätzungen führen. Dies erfordert die Suche nach den optimalen Parametern durch eine große Anzahl von Rückprüfungen.

  1. Die Gefahr des Scheiterns

Jeder Durchbruch ist mit einem Risiko verbunden, dass er scheitert, und wenn der Preis den von der Strategie gewählten Punkt überschreitet, kann es zu einem erneuten Rückschlag kommen, der einen Verlust verursacht. Dies erfordert eine strenge Stop-Loss-Kontrolle.

  1. Trendumkehrrisiko

Wenn die Extreme endet, wird die Strategie alle Positionen ausgleichen. Aber manchmal kann die Preisentwicklung fortgesetzt werden, was die Gefahr eines vorzeitigen Ausstiegs der Strategie darstellt. Dies erfordert eine optimierte Ausstiegsentscheidungslogik.

Richtung der Strategieoptimierung

  1. Optimierte Parameter-Einstellungen

Durch eine größere Anzahl von Testfehlern aus Rückmessdaten können bessere Parameter-Perioden und Bandbreiten-Einstellungen für Brink’s- und Kalkin-Kanäle gefunden werden, um die Effektivität der Strategie zu verbessern.

  1. Erhöhung der Stop-Loss-Strategie

Es können bewegliche Stopps oder Oszillationsstopps eingerichtet werden, die bei einer Preisumkehr schnell eingestellt werden, um die maximale Rücknahme der Strategie zu kontrollieren.

  1. Erhöhung der Wiedereintrittsbedingungen

Wenn die Strategie aus der Position aussteigt, können bestimmte Wiedereintrittsbedingungen gesetzt werden, um wieder einzutreten, wenn sich der Trend fortsetzt.

  1. Zusammen mit weiteren Indikatoren

Es kann versucht werden, mehrere verschiedene Arten von Indikatoren, wie andere Volatilitätsindikatoren, Transaktionsmengenindikatoren usw., zu kombinieren, um eine integrierte Strategie zu entwickeln, um die Entscheidungsgenauigkeit zu verbessern.

Zusammenfassen

Die Strategie integriert Brin-Band, Kalkin-Kanal und Dynamik-Indikatoren, durch die Beurteilung der Beziehung zwischen diesen Indikatoren, wählen Sie die Durchbruchspunkte mit hoher Erfolgsrate Eintritt. Optimierungsmöglichkeiten in mehreren Bereichen wie Parameteroptimierung, Stop-Loss-Strategie, Wiedereintrittsbedingungen und Integration von Komplex-Indikatoren, können die Effektivität der Strategie weiter verbessern.

Strategiequellcode
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//All credits to LazyBear. All I did was turn it into a strategy!

strategy(title = "SQZMOM STRAT", overlay=false)

// --- GENERAL INPUTS ---
FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2020, title = "From Year", minval = 2012)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)
FromDay   = 1
ToDay     = 1
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

get_round(value, precision) => round(value * (pow(10, precision))) / pow(10, precision)
trade_leverage = input(1, title = "Trade - Leverage", step = 0.25)
trade_risk     = input(100, title = "Trade - Risk Percent", type = input.float, step = 0.1, minval = 0.1, maxval = 100)
tradeType   = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH"])

// --- SQZMOM CODE

length = input(21, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")

useTrueRange = input(true, title="Use TrueRange (KC)", type=input.bool)

// 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 = color.gray
if (val > 0 and val > nz(val[1]))
    bcolor := color.green
if (val < 0 and val < nz(val[1]))
    bcolor := color.red

scolor = noSqz ? color.blue : sqzOn ? color.black : color.gray 
plot(val, color=bcolor, style=plot.style_histogram, linewidth=4)
plot(0, color=scolor, style=plot.style_cross, linewidth=2)

// --- VWMA CODE ---
useVWMA        = input(false, title = "Use VWMA to selectively long/short?", type = input.bool)
lengthVWMA=input(42, title = "VWMA Length", step = 1, minval = 1)
useCV=input(false, type=input.bool, title="Use Cumulative Volume for VWMA?")
nbfs = useCV ? cum(volume) : sum(volume, lengthVWMA)
medianSrc=close

calc_evwma(price, lengthVWMA, nb_floating_shares) => data = (nz(close[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume*price/nb_floating_shares)

m=calc_evwma(medianSrc, lengthVWMA, nbfs)


// ---STRATEGY---
if ((tradeType == "LONG" or tradeType == "BOTH") and (m>0 or useVWMA == false))
    longCondition = (val > 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1)
    if (longCondition)
        contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4)
        strategy.entry("LONG", strategy.long, qty = contracts, when = window())
        
if((tradeType == "SHORT" or tradeType == "BOTH") and (m<0 or useVWMA == false))
    shortCondition = (val < 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1)
    if (shortCondition)
        contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4)
        strategy.entry("SHORT", strategy.short, qty = contracts, when = window())

if (bcolor == color.gray)
    strategy.close("LONG")
    strategy.close("SHORT")