Stratégie de négociation de la dynamique des bandes de Bollinger à double voie

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

img

Résumé

Cette stratégie est basée sur le concept des bandes de Bollinger, en établissant des rails supérieurs et inférieurs pour le canal de prix et en les utilisant pour le jugement de tendance et la génération de signaux de trading. Plus précisément, elle calcule l'écart absolu moyen du prix comme la bande passante du canal. Le rail du milieu du canal est la moyenne mobile simple du prix, et les rails supérieurs et inférieurs sont le rail du milieu plus ou moins 1 ou 2 fois la bande passante du canal.

Principe

Les principaux points de cette stratégie sont les suivants:

  1. Calculez le rail du milieu du prix, qui est la moyenne mobile simple du prix.

  2. Calculer la moyenne mobile simple de l'écart absolu du prix sous forme de bande passante du canal.

  3. Déterminez les rails supérieurs et inférieurs en fonction du rail du milieu et de la bande passante. Le rail supérieur est le rail du milieu plus 1 ou 2 fois la bande passante. Le rail inférieur est le rail du milieu moins 1 ou 2 fois la bande passante.

  4. Calculez l'indicateur de jugement de tendance pour long et short. Lorsque le prix est au-dessus du rail supérieur 2, il est long. Lorsque le prix est en dessous du rail inférieur 2, il est court.

  5. Générer des signaux de trading. Lorsque le prix franchit le niveau supérieur du rail 2, aller long. Quand il franchit le niveau inférieur du rail 2, aller court.

  6. La ligne de stop loss pour les ordres longs est le rail 1 inférieur et pour les ordres courts, c'est le rail 1 supérieur.

  7. Calculer la taille de la position en fonction des exigences de gestion du capital.

La stratégie intègre les idées d'utiliser des moyennes mobiles pour juger des tendances, des bandes de Bollinger pour juger des surachats et des survente, et des ruptures pour effectuer des renversements.

Analyse des avantages

Les principaux avantages de cette stratégie sont les suivants:

  1. Le système à double rails permet de mieux évaluer la force de la tendance.

  2. Les bandes de Bollinger ont une forte fonction de régression pour éviter efficacement les fausses ruptures.

  3. La différence entre les deux rails combinée à la régression des bandes de Bollinger forme des signaux de trading relativement stables.

  4. Il existe une logique de stop loss/exit claire pour contrôler les risques.

  5. La taille des positions est conforme aux exigences de gestion du capital, en évitant le surendettement.

  6. L'idée de stratégie est claire et facile à comprendre et à optimiser.

  7. Des paramètres flexibles le rendent adaptable à différents marchés.

Analyse des risques

La stratégie comporte également certains risques:

  1. Les paramètres de Bollinger Bands inappropriés peuvent entraîner des effets d'abandon, ne permettant pas de suivre efficacement les prix.

  2. La différence entre les deux rails ne peut pas éviter complètement les jugements erronés de tendance.

  3. Il peut générer plus de signaux invalides sur les marchés à plage.

  4. Des pertes peuvent survenir en cas de fausse rupture.

  5. Il y a un certain décalage de temps, peut-être des points de tournant manquants.

  6. Le rapport risque/rendement est limité par le point de stop loss, incapable de suivre les tendances de façon illimitée.

Mesures de gestion des risques correspondantes:

  1. Optimiser les paramètres pour rendre les bandes de Bollinger adaptables à différents cycles.

  2. Combinez d'autres indicateurs de confirmation pour éviter toute erreur de jugement.

  3. Réduire la taille de la position pour contrôler les pertes uniques.

  4. Optimiser les points d'arrêt des pertes afin d'assurer le rapport risque/rendement.

  5. Réduire de manière appropriée le cycle pour réduire le retard.

  6. Le contrôle des risques doit être solide, pas de poursuite illimitée.

Directions d'optimisation

La stratégie peut être optimisée dans les directions suivantes:

  1. Optimiser les paramètres des bandes de Bollinger pour un meilleur suivi des prix. Des paramètres adaptatifs peuvent être introduits.

  2. Essayez différentes moyennes mobiles comme EMA, DWMA, etc.

  3. Ajoutez le filtrage de tendance pour éviter de négocier sur des marchés à fourchette.

  4. Ajoutez des méthodes de sortie agressives pour capturer plus de profits de tendance.

  5. Mettre en place plusieurs délais pour la combinaison, adaptés aux différentes conditions du marché.

  6. Ajoutez des conditions supplémentaires comme des surtensions de volume pour éviter de fausses fuites.

  7. Considérez les bandes de Bollinger inversées, vendre la bande supérieure, acheter la bande inférieure.

  8. Optimiser les paramètres pour obtenir les meilleures combinaisons de paramètres.

Résumé

L'idée générale de cette stratégie est claire et stable. Il y a également une marge d'amélioration via l'optimisation des paramètres, l'amélioration de la logique, la gestion des risques, etc. pour l'affiner davantage en une stratégie de trading quantitative très pratique.


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 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/
// © noro

//@version=4
strategy(title = "Noro's Bands Strategy", shorttitle = "Bands", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, commission_value = 0.1)

//Sattings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
len = input(20, defval = 20, minval = 1, maxval = 1000, title = "Length")
src = input(ohlc4, title = "Source")
showbb = input(true, title = "Show Bands")
showof = input(true, title = "Show Offset")
showbg = input(false, title = "Show Background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
trend = 0
trend := high > hd2 ? 1 : low < ld2 ? -1 : trend[1]
bgcol = showbg == false ? na : trend == 1 ? color.lime : color.red
bgcolor(bgcol, transp = 70)

//Lines
colo = showbb == false ? na : color.black
offset = showof ? 1 : 0
plot(hd2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, offset = offset, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 2")

//Trading
size = strategy.position_size
needstop = needlong == false or needshort == false
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if distsma > 0
    strategy.entry("Long", strategy.long, lot, stop = hd2, when = truetime and needlong)
    strategy.entry("Short", strategy.short, lot, stop = ld2, when = truetime and needshort)
sl = size > 0 ? ld2 : size < 0 ? hd2 : na
if size > 0 and needstop
    strategy.exit("Stop Long", "Long", stop = sl)
if size < 0 and needstop
    strategy.exit("Stop Short", "Short", stop = sl)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Plus de