Stratégie de cassure de momentum de Bollinger sur plusieurs périodes combinée à la stratégie de moyenne mobile de Hull

VWMA HMA BB MTF RSI
Date de création: 2024-11-29 17:00:00 Dernière modification: 2024-11-29 17:00:00
Copier: 0 Nombre de clics: 507
1
Suivre
1617
Abonnés

Stratégie de cassure de momentum de Bollinger sur plusieurs périodes combinée à la stratégie de moyenne mobile de Hull

Aperçu

La stratégie est un système de négociation basé sur l’analyse de plusieurs périodes de temps, combinant la génération de signaux de négociation avec les bandes de Bollinger, les moyennes mobiles Hull et les moyennes mobiles pondérées. La stratégie fonctionne principalement sur un délai d’une heure, tout en intégrant des données de marché sur trois périodes de temps de 5 minutes, 1 heure et 3 heures, afin de confirmer les opportunités de négociation grâce à une combinaison de multiples indicateurs techniques.

Principe de stratégie

La logique centrale de la stratégie est basée sur la confirmation croisée de plusieurs indicateurs techniques. La stratégie surveille simultanément la relation des prix avec toutes sortes de lignes égales sur plusieurs périodes de temps, y compris les moyennes mobiles pondérées à 5 minutes (VWMA), les moyennes mobiles pondérées à 1 heure (VMA) et les moyennes mobiles Hull à 3 heures (HMA).

Avantages stratégiques

  1. L’analyse des cycles de temps multiples réduit le risque de fausses percées et améliore la fiabilité des signaux de négociation
  2. Les paramètres de stop-loss dynamiques permettent de s’adapter à différents environnements de marché
  3. La gestion des positions basée sur les intérêts des comptes assure la rationalité de l’utilisation des fonds
  4. Le choix d’un mécanisme de sortie multiple accroît l’adaptabilité de la stratégie
  5. L’interface graphique fournit une présentation claire des signaux de transaction pour faciliter l’analyse et le jugement
  6. L’intégration de plusieurs indicateurs techniques validés améliore la précision des décisions de négociation

Risque stratégique

  1. L’utilisation de multiples indicateurs peut entraîner un retard dans les signaux de trading.
  2. De faux signaux de rupture fréquents peuvent se produire sur un marché volatil
  3. Un stop loss fixe peut ne pas être adapté à tous les environnements de marché.
  4. Le traitement de données sur plusieurs périodes de temps peut augmenter la complexité de la stratégie.
  5. Risque de glissement potentiel dans un marché très volatil

Orientation de l’optimisation de la stratégie

  1. Présentation des indicateurs de volatilité pour ajuster dynamiquement les niveaux de take-profit et de stop-loss
  2. Ajout d’une fonctionnalité de reconnaissance de l’environnement du marché, utilisant différents paramètres dans différents états du marché
  3. Optimisation des mécanismes de filtrage des signaux pour réduire les pertes causées par les fausses percées
  4. L’ajout d’analyses de volumes de transactions améliore la fiabilité des signaux de rupture
  5. Développer des mécanismes d’optimisation des paramètres adaptatifs pour améliorer la stabilité des stratégies

Résumer

La stratégie est construite en combinant l’analyse des cycles de temps multiples et de multiples indicateurs techniques pour construire un système de négociation relativement complet. L’avantage de la stratégie réside dans la fiabilité du signal et l’efficacité de la gestion des risques, mais il existe également des problèmes tels que le retard du signal et l’optimisation des paramètres. Grâce à l’optimisation et à l’amélioration continues, la stratégie devrait maintenir une performance stable dans différents environnements de marché.

Code source de la stratégie
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("1H- 280, 2.7", overlay=true)


// Fetch the indicator values from different timeframes
vwma5 = request.security(syminfo.tickerid, "5", ta.wma(close, 233), lookahead = barmerge.lookahead_off)
vwma_hourly = request.security(syminfo.tickerid, "60", ta.wma(close, 89), lookahead = barmerge.lookahead_off)
hullma155_3h = request.security(syminfo.tickerid, "180", ta.hma(close, 155), lookahead = barmerge.lookahead_off)


// Calculate the deviation value
deviation = close * 0.032


// Initialize the signal variables
var float signalLine = na
var color lineColor = na


// Long Entry Conditions
longCondition_5min = close > vwma5
longCondition_hourly = close > vwma_hourly
longCondition_3h = close > hullma155_3h


// Short Entry Conditions
shortCondition_5min = close < vwma5
shortCondition_hourly = close < vwma_hourly
shortCondition_3h = close < hullma155_3h


// Long Entry
if longCondition_5min and longCondition_hourly and longCondition_3h
    signalLine := close + deviation
    lineColor := color.rgb(0, 255, 0, 1)


// Short Entry
if shortCondition_5min and shortCondition_hourly and shortCondition_3h
    signalLine := close - deviation
    lineColor := color.rgb(255, 0, 0, 1)


// Plotting the connecting line
plot(signalLine, title="Signal Line", color=lineColor, linewidth=1, style=plot.style_line)


// Colorize the signal line
bgcolor(signalLine > close ? color.rgb(0, 255, 0, 99) : color.rgb(255, 0, 0, 99), transp=90)



// Strategy settings
useTPSL = input(true, "Use TP/SL for closing long positions?")
useDownbreakOutbreak = input(false, "Use Downbreak and Outbreak for closing positions?")
useM7FClosing = input(false, "Use M7F Signal for closing positions?")


length1 = input.int(280, minval=1)
src = input(close, title="Source")
mult = input.float(2.7, minval=0.001, maxval=50, title="StdDev")


basis = ta.vwma(src, length1)
dev = mult * ta.stdev(src, length1)
upper = basis + dev
lower = basis - dev


offset = input.int(0, "Offset", minval = -500, maxval = 500)


length2 = input.int(55, minval=1)
src2 = input(close, title="Source")
hullma = ta.wma(2 * ta.wma(src2, length2 / 2) - ta.wma(src2, length2), math.floor(math.sqrt(length2)))


hullmacrosslower = ta.crossover(hullma, lower)
hullmacrossupper = ta.crossunder(hullma, upper)


breakout = ta.crossover(ohlc4, upper)
breakdown = ta.crossunder(ohlc4, upper)
outbreak = ta.crossover(ohlc4, lower)
downbreak = ta.crossunder(ohlc4, lower)


// Calculate position size and leverage
margin_pct = 1
leverage = 1
position_size = strategy.equity * margin_pct
qty = position_size / close / leverage


// Define take profit and stop loss levels
take_profit = 0.14
stop_loss = 0.06


// Opening a long position
if breakout
    strategy.entry("Long", strategy.long, qty, limit=close*(1+take_profit), stop=close*(1-stop_loss))


// Opening a short position
if downbreak
    strategy.entry("Short", strategy.short, qty, limit=close*(1-take_profit), stop=close*(1+stop_loss))


// Closing positions based on chosen method
if useTPSL
    // Using TP/SL for closing long positions
    if strategy.position_size > 0 and breakdown
        strategy.close("Long", comment="Breakdown")
else if useDownbreakOutbreak
    // Using Downbreak and Outbreak for closing positions
    if strategy.position_size > 0 and (breakdown or downbreak)
        strategy.close("Long", comment="Breakdown")
    if strategy.position_size < 0 and (outbreak or downbreak)
        strategy.close("Short", comment="Outbreak")
else if useM7FClosing
    // Using M7F Signal for closing positions
    if strategy.position_size > 0 and (signalLine < close)
        strategy.close("Long", comment="M7F Signal")
    if strategy.position_size < 0 and (signalLine > close)
        strategy.close("Short", comment="M7F Signal")


// Plotting entry signals
plotshape(hullmacrosslower, title="High Bear Volatility", style=shape.arrowup, text="^^^^^", color=color.rgb(75, 202, 79), location=location.belowbar)
plotshape(hullmacrossupper, title="High Bull Volatility", style=shape.arrowdown, text="-----", color=color.rgb(215, 72, 72), location=location.abovebar)
plotshape(breakout ? 1 : na, title="Breakout", style=shape.arrowup, text="", color=color.rgb(75, 202, 79), location=location.belowbar, size=size.tiny)
plotshape(breakdown ? 1 : na, title="Breakdown", style=shape.arrowdown, text="", color=color.rgb(201, 71, 71), location=location.abovebar, size=size.tiny)
plotshape(outbreak ? 1 : na, title="Outbreak", style=shape.arrowup, text="", color=color.rgb(0, 110, 255), location=location.belowbar, size=size.tiny)
plotshape(downbreak ? 1 : na, title="Downbreak", style=shape.arrowdown, text="", color=color.rgb(255, 111, 0), location=location.abovebar, size=size.tiny)