Stratégie de négociation de la dynamique de compression basée sur l'indicateur LazyBear

Auteur:ChaoZhang est là., Date: 2024-02-05 14:48:01 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie est basée sur l'indicateur de dynamique de compression de LazyBear, avec des filtres de dynamique ajoutés, une source de données modifiée et un système de gestion des risques amélioré et un délai de rétro-test personnalisable, visant à détecter les flambées de prix après la compression de la volatilité.

La logique de la stratégie

La stratégie utilise les bandes de Bollinger et les canaux de Keltner pour calculer les canaux de prix. Les ruptures signalent une volatilité accrue.

La stratégie ajoute des filtres d'élan, ne négociant que lorsque l'élan absolu dépasse un seuil. Lors de la compression de la volatilité (resserrement des canaux) avec le filtrage d'élan passé, elle juge la direction de la tendance pour long/short. Elle définit également un stop loss, un take profit et un trailing stop pour contrôler les risques.

Analyse des avantages

La stratégie intègre plusieurs indicateurs pour un jugement complet. Elle limite les pertes par transaction avec des mécanismes de gestion des risques. Elle peut juger en temps opportun des tendances des prix post-compression. Des paramètres personnalisables la rendent adaptable.

Analyse des risques

Les principaux risques comprennent: les fausses ruptures provoquant des jugements erronés; l'incapacité de revenir en arrière à temps avec des paramètres incorrects; les violations de stop loss augmentant les pertes.

Directions d'optimisation

Envisagez de combiner d'autres filtres d'indicateurs tels que le volume; affiner le seuil de momentum pour une plus grande précision; ajouter un arrêt de perte de retrait pour un contrôle plus strict des risques; tester l'efficacité sur plus de produits.

Résumé

La stratégie évalue les tendances des prix et la volatilité de manière relativement complète, avec un degré d'intégration élevé et des mesures de contrôle des risques améliorées.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// Strategy based on LazyBear Squeeze Momentum Indicator
// © Bitduke
// All scripts: https://www.tradingview.com/u/Bitduke/#published-scripts

strategy(shorttitle="SMS", title="Squeeze Momentum Strategy", overlay=false )

length = input(12, title="BB Length")
mult = input(2.0, title="BB MultFactor")
lengthKC = input(16, title="KC Length")
mult_kc = input(1.5, title="KC MultFactor")


//FILTERS
useMomAverage = input(false, title="Filter for Momenutum value", type=input.bool)
MomentumMin = input(20, title="Min for momentum")

// Calculate BB
src = ohlc4

ma_1 = sma(src, length)
ma_2 = sma(src, lengthKC)
range_ma = sma(high - low, lengthKC)

dev = mult * stdev(src, length)

upper_bb = ma_1 + dev
lower_bb = ma_1 - dev

upper_kc = ma_2 + range_ma * mult_kc
lower_kc = ma_2 - range_ma * mult_kc

sqz_on = lower_bb > lower_kc and upper_bb < upper_kc
sqz_off = lower_bb < lower_kc and upper_bb > upper_kc
no_sqz = sqz_on == false and sqz_off == false

val = linreg(src - avg(avg(highest(hl2, lengthKC), lowest(low, lengthKC)), sma(hl2, lengthKC)), lengthKC, 0)

bcolor = iff(val > 0, iff(val > nz(val[1]), color.lime, color.green), iff(val < nz(val[1]), color.red, color.maroon))
scolor = no_sqz ? color.blue : sqz_on ? color.black : color.aqua
plot(val, color=bcolor, style=plot.style_histogram, linewidth=4)
plot(0, color=scolor, style=plot.style_cross, linewidth=2)

//LOGIC
//momentum filter
filterMom = useMomAverage ? abs(val) > MomentumMin / 100000 ? true : false : true

//standard condition
longCondition = scolor[1] != color.aqua and scolor == color.aqua and bcolor == color.lime and filterMom
exitLongCondition = bcolor == color.green
shortCondition = scolor[1] != color.aqua and scolor == color.aqua and bcolor == color.red and filterMom
exitShortCondition = bcolor == color.maroon

// Risk Management Sysyem
stop_loss = input(defval = 600, title="Stop Loss", minval = 0)
take_profit = input(defval = 1000, title="Take Profit", minval = 0)
trailing_stop = input(defval = 20, title="Trailing Stop", minval = 0)
// If the zero value is set for stop loss, take profit or trailing stop, then the function is disabled
s_loss = stop_loss >= 1 ? stop_loss : na
tk_profit = take_profit >= 1 ? take_profit : na
tr_stop = trailing_stop >= 1 ? trailing_stop : na


//STRATEGY
strategy.entry("SQ_Long", strategy.long, when=longCondition)
strategy.exit("Exit Long", from_entry = "SQ_Long", profit = take_profit, trail_points = trailing_stop, loss = s_loss)
strategy.close("SQ_Long", exitLongCondition)

strategy.entry("SQ_Short", strategy.short, when=shortCondition)
strategy.exit("Exit Short", from_entry = "SQ_Short", profit = take_profit, trail_points = trailing_stop, loss = s_loss )
strategy.close("SQ_Short", when=exitShortCondition)



Plus de