Stratégie de trading quantitative basée sur l'indicateur de momentum de compression LazyBear


Date de création: 2024-02-05 14:48:01 Dernière modification: 2024-02-05 14:48:01
Copier: 0 Nombre de clics: 1698
1
Suivre
1617
Abonnés

Stratégie de trading quantitative basée sur l’indicateur de momentum de compression LazyBear

Aperçu

Cette stratégie est basée sur l’indicateur de dynamique de compression de LazyBear, avec l’ajout d’un filtre dynamique, la modification de la source de données et l’ajout d’un système de gestion des risques avec des périodes de retracement personnalisables destinées à capturer les explosions de prix après une compression volatile.

Principe de stratégie

Cette stratégie utilise l’indicateur de la ceinture de Brin et l’indicateur de la voie de Keltner pour calculer la voie de prix, qui est considérée comme un signal d’augmentation de la volatilité lorsque le prix franchit la voie. Elle est combinée avec l’indicateur de compression de LazyBear, qui utilise une méthode de régression linéaire pour déterminer la direction de la voie de prix.

La stratégie a ajouté un filtre de dynamique, qui n’émet un signal de transaction que lorsque la valeur absolue de dynamique dépasse la valeur de seuil. Lorsque la compression volatile (le resserrement dans le canal) et le filtre de dynamique sont passés, la stratégie détermine la direction de la tendance, fait plus ou fait moins.

Analyse des avantages

Cette stratégie intègre plusieurs indicateurs de jugement, est plus complète; ajouter un mécanisme de gestion des risques, peut limiter les pertes individuelles; après la compression de la volatilité, peut juger en temps opportun la direction de la tendance des prix; paramètres personnalisables, adaptation forte.

Analyse des risques

Les risques sont principalement les suivants: fausse rupture entraînant un mauvais jugement; paramètres mal réglés, défaut de retour en arrière en temps opportun; stop loss causé par une rupture qui augmente les pertes. Il est possible d’optimiser les paramètres, d’ajuster les paramètres de gestion des risques, de choisir la variété et le moment de la transaction appropriés pour réduire ces risques.

Direction d’optimisation

Il est possible d’envisager de combiner les signaux de filtrage avec d’autres indicateurs, tels que les indicateurs de volume de transactions; d’ajuster plus précisément les marges de volume dynamiques; de définir des arrêts de retrait pour contrôler davantage le risque; de tester plus d’effets de données de variété. Ces optimisations peuvent rendre la stratégie plus stable et généralisée.

Résumer

Cette stratégie est plus complète pour juger les tendances et la volatilité des prix, elle est hautement intégrée, les mesures de contrôle des risques sont parfaites, elle peut être améliorée en fonction de l’orientation de l’optimisation et elle est très adaptée aux éclats de prix après la capture de la compression de la volatilité.

Code source de la stratégie
/*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)