Stratégie de suivi des tendances basée sur les bandes de Bollinger et la moyenne mobile exponentielle

Auteur:ChaoZhang est là., Date: 2023-11-17 17h36 et 43 min
Les étiquettes:

img

Résumé

Cette stratégie utilise les bandes de Bollinger pour déterminer la direction de la tendance actuelle et la moyenne mobile exponentielle pour le stop loss et prendre la gestion des bénéfices pour capturer efficacement la tendance.

Principaux

La stratégie calcule d'abord la ligne médiane, la bande supérieure et la bande inférieure des bandes de Bollinger. La ligne médiane est la moyenne mobile simple du prix de clôture sur n jours. Les bandes supérieure et inférieure sont déplacées vers le haut et vers le bas par deux écarts types de la ligne médiane. Lorsque le prix de clôture est au-dessus de la bande supérieure, cela indique une tendance haussière. Lorsque le prix de clôture est en dessous de la bande inférieure, cela indique une tendance à la baisse.

La stratégie juge la direction de la tendance actuelle en comparant la relation entre le prix de clôture et les bandes supérieures/inférieures des bandes de Bollinger. Si le prix de clôture franchit la bande supérieure, allez long. Si le prix de clôture franchit la bande inférieure, allez court.

En outre, la moyenne mobile exponentielle est introduite comme un arrêt de traîneau pour le stop loss et le take profit. Plus précisément, si le prix baisse après un long, la ligne de stop loss baissera en conséquence, resserrant progressivement la distance de stop loss pour maximiser le verrouillage des bénéfices. Si le prix continue d'augmenter, la ligne de stop loss augmentera également pour laisser courir le profit. Le mécanisme de stop loss fonctionne à l'envers pour les positions courtes.

Les avantages

La stratégie combinant les bandes de Bollinger pour l'orientation de la tendance et l'EMA pour la gestion stop loss/take profit présente les avantages suivants:

  1. L'utilisation des bandes de Bollinger permet de déterminer efficacement la direction de la tendance et de réagir rapidement aux écarts.

  2. L'option stop loss/take profit basée sur l'EMA peut maximiser le verrouillage des bénéfices tout en contrôlant les risques.

  3. La stratégie comporte peu de paramètres faciles à mettre en œuvre - un pour BB et un pour EMA, très simple.

  4. Il peut être largement appliqué à différents produits avec une forte adaptabilité.

Risques et optimisation

La stratégie comporte également des risques à prendre en compte:

  1. La rupture des bandes supérieures/inférieures de BB ne peut pas éviter complètement le risque de fausses ruptures.

  2. Le paramètre EMA doit être soigneusement testé en fonction des produits spécifiques. Une période EMA trop courte peut augmenter les temps de stop loss.

  3. Il convient d'éviter une optimisation excessive, car trop de combinaisons de paramètres BB et EMA peuvent entraîner un surajustement.

Pour traiter les risques et les orientations d'optimisation, les éléments suivants peuvent être considérés:

  1. Ajoutez le volume ou le MACD, etc., pour filtrer les faux signaux de rupture.

  2. Optimiser la période EMA par des essais afin de trouver le paramètre le plus approprié pour des produits spécifiques.

  3. Essayez de maintenir les paramètres BB et EMA aussi stables que possible afin d'éviter les risques de surajustement dus à une sur-optimisation.

  4. Considérez l'utilisation de l'indice de volatilité, etc., pour déterminer l'ajustement de la position dans la tendance à moyen terme.

Résumé

Cette stratégie intègre l'utilisation des bandes de Bollinger pour déterminer la tendance et de l'EMA pour la gestion de stop-loss / take profit pour former un système de suivi de tendance relativement complet. Il peut rapidement capturer la direction de la tendance et verrouiller les bénéfices en ajustant continuellement la ligne de stop-loss. Dans l'ensemble, la stratégie est relativement simple, pratique et adaptable, mérite d'être testée et optimisée. Mais les paramètres et le contrôle des risques doivent être notés pour éviter les mauvais jugements et la surexploitation.


/*backtest
start: 2022-11-10 00:00:00
end: 2023-11-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © zxcv55602
//@version=4
strategy(shorttitle=" BB+EMA", title="Bollinger Bands", overlay=true)
date1 = input(title="Start Date", type=input.time, defval=timestamp("2020-01-01T00:00:00"))
date2 = input(title="Stop Date", type=input.time, defval=timestamp("2030-01-01T00:00:00"))
length = input(40, minval=1)
src = input(close, title="Source")
mult = input(2.0,title="StdDev",step=0.1)
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
//offset = input(0, "Offset", minval = -500, maxval = 500)
offset=0
stopcon=input(title="stopcon/lot", type=input.bool, defval=true)
lot1=input(title="lot",defval=1)
stoploss=input(title="stopcon",defval=1000)
emacon=input(title="emacon", type=input.bool, defval=true)
ema_value=input(title="value",defval=30, minval=2,step=1)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=color.new(color.blue,50), offset = offset)
p2 = plot(lower, "Lower", color=color.new(color.blue,50), offset = offset)
ema1=ema(close,ema_value)
plot(ema1, "SMA", color=#2962FF)
period() => true
//-----------
if period()
    if strategy.opentrades==0 and ema1<upper
        if close>upper
            lot_L=stoploss/((close-lower)/2)
            strategy.entry("OP_L",strategy.long,qty=stopcon==true?lot_L:lot1,stop=emacon==true?max(basis,ema1):basis)
    if strategy.opentrades==0 and ema1>lower
        if close<lower
            lot_S=stoploss/((upper-close)/2)
            strategy.entry("OP_S",strategy.short,qty=stopcon==true?lot_S:lot1,stop=emacon==true?min(basis,ema1):basis)
    if strategy.position_size>0
        strategy.exit("OP_L",stop=emacon==true?max(basis,ema1):basis,comment="exit_L")
    if strategy.position_size<0
        strategy.exit("OP_S",stop=emacon==true?min(basis,ema1):basis,comment="exit_S")

Plus de