Motorenpressur-Strategien basierend auf dem Brin-Band und dem Kalkin-Kanal

Schriftsteller:ChaoZhang, Datum: 2024-01-30 17:33:49
Tags:

基于布林带和卡尔金通道的动量挤压策略

Übersicht

Dies ist eine quantitative Handelsstrategie, die auf der Basis von LazyBear entwickelt wurde. Die Strategie integriert die Brennbänder, die Kalkin-Kanäle und die Dynamik-Indikatoren, um durch eine Kombination von verschiedenen technischen Indikatoren einen dynamischen Durchbruch zu erzielen.

Die Strategie

Der Kernindikator der Strategie ist der LazyBear-Motoren-Expressor. Der Indikator, der bestimmt, ob das Brennband durch den Kalkin-Kanal gedrückt wird, stellt, dass der Markt zu einem potenziellen Ausbruchpunkt gelangt. In Kombination mit dem Motoren-Indikator kann man die Ausbruchstrends des Marktes beim Ausdruck freisetzen.

Insbesondere berechnet die Strategie zunächst 21 Zyklen des Brennbandes mit einer Bandbreite von 2 mal dem Preisstandarddefizit. Gleichzeitig berechnet man 20 Zyklen des Kalkin-Kanals mit einer Bandbreite von 1,5 mal dem Preisamplitude. Das Brennband sendet ein Drucksignal, wenn es durch den Kalkin-Kanal-Druck gedrückt wird. Außerdem berechnet die Strategie die Bewegung des Preises in Bezug auf die Mitte seines eigenen Preiskanals in einer bestimmten Zeit.

Im Ausgang kann sich der Trend umkehren, wenn sich der Antriebsindikator in grauer Farbe verfärbt und die Position ausgeglichen wird, was das Ende des Druckzustands darstellt.

Strategische Vorteile

  1. Integrieren Sie verschiedene technische Indikatoren, um die Genauigkeit von Transaktionsentscheidungen zu verbessern

Die Strategie integriert Brin-Band, Kalkin-Kanal und Dynamik-Indikatoren, und durch die Bewertung der komplexen Beziehungen dieser Indikatoren kann die Genauigkeit der Handelsentscheidungen verbessert und die Wahrscheinlichkeit von Fehltrades reduziert werden.

  1. Die Antriebsschlagpunkte sind präzise, der Gewinnpotenzial ist groß.

Die Dynamik-Squeeze-Strategie kann die entscheidenden Punkte des Marktausbruchs erfassen, die oft die Wendepunkte sind, an denen der Markt wichtige Richtungsentscheidungen trifft.

  1. Durchbruchstransaktionen mit hoher Erfolgsrate

Im Gegensatz zu den zufälligen Durchbruchshandlungen ist die Strategie mit einem hohen Erfolgsrate, da die Eintrittspunkte an den Ausdruckpunkten des Brin-Bands und des Kalkin-Tunnels gelegen sind.

Strategische Risiken

  1. Die Parameter für das Blinkenband und den Kalkin-Tunnel sind gefährdet.

Die Zyklusparameter und die Bandbreitenparameter-Einstellungen von Brin-Band und Kalkin-Kanal haben einen großen Einfluss auf die strategischen Handelsergebnisse. Fehleinstellungen führen zu Fehlentscheidungen. Dies erfordert eine große Anzahl von Rückfragen, um die besten Parameter zu finden.

  1. Das Risiko des Scheiterns durchbrechen

Jede Breach-Trade besteht das Risiko, dass sie fehlschlägt, und es besteht die Möglichkeit, dass der Preis wieder zurückgeht und einen Verlust verursacht, wenn er den gewählten Punkt der Strategie durchbricht.

  1. Die Gefahr, dass sich der Trend umkehrt

Wenn die Druckphase endet, wird die Strategie alle Positionen ausräumen. Aber manchmal kann der Preistrend noch anhalten, was das Risiko eines vorzeitigen Ausstiegs der Strategie mit sich bringt. Dies erfordert eine Optimierung der Ausstiegslogik.

Strategische Optimierung

  1. Optimierte Parameter-Einstellungen

Durch eine größere Anzahl von Rückmessdaten kann man Fehlerprüfungen durchführen, um nach besseren Parameterzyklen und Bandbreiten-Einstellungen für das Brin-Band und den Kalkin-Kanal zu suchen, um die strategische Wirkung zu verbessern.

  1. Steigerung der Stop-Loss-Strategie

Es ist möglich, einen beweglichen Stop-Loss oder einen Schwingung-Stop-Loss einzurichten, der bei einem Preisumschwung schnell gestoppt wird, um den maximalen Rückzug der Strategie zu kontrollieren.

  1. Erhöhung der Wiedereinreisebedingungen

Wenn die Strategie aus der Position herausgeht, können bestimmte Wiedereintrittsbedingungen festgelegt werden, um wieder einzutreten, wenn der Trend weitergeht.

  1. Mehr Indikatoren kombiniert

Es kann versucht werden, mehr verschiedene Arten von Indikatoren zu kombinieren, wie andere Indikatoren für Volatilität, Transaktionsmengen usw., um eine komplexe Strategie zu entwickeln, die Indikatoren integriert, um die Entscheidungsgenauigkeit zu verbessern.

Zusammenfassung

Die Strategie integriert die Brennbänder, die Kalkin-Kanäle und die Dynamik-Indikatoren und wählt durch das Beurteilen der Beziehungen zwischen diesen Indikatoren die Eintrittspunkte mit hoher Erfolgsrate. Es gibt Raum für Optimierungen in mehreren Bereichen wie Parameteroptimierung, Stop-Loss-Strategie, Wiedereintrittsbedingungen und Integration von Komplexindikatoren, um die strategische Wirkung weiter zu verbessern.


/*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")

Weitere Informationen