Stratégie améliorée d'inversion des bandes de Bollinger

Auteur:ChaoZhang est là., Date: le 21 septembre 2023 à 11h45
Les étiquettes:

Résumé

Cette stratégie utilise un indicateur Bollinger Bands amélioré pour identifier les points d'inversion des prix, va long lorsque le prix approche de la bande inférieure et ferme la position lorsqu'une bougie verte apparaît, dans le but de capturer la réversion moyenne à la bande inférieure.

La logique de la stratégie

  1. Calculer les paramètres de base, de dev, de BB supérieur et de BB inférieur de BB standard.

  2. Calculer la SMA et les bandes d'écart upex2 et dnex2 à un certain pourcentage de la SMA.

  3. Prenez la moyenne de upex2, dnex2 avec BB supérieur, BB inférieur pour obtenir upex3 et dnex3.

  4. Prenez plus de upex3 et de BB supérieur comme nouvelle bande supérieure upex, plus petit de dnex3 et de BB inférieur comme nouvelle bande inférieure dnex.

  5. Aller long lorsque le prix est inférieur à dnex, fermer la position lorsque la bougie verte apparaît (fermer > ouvrir).

Analyse des avantages

  1. Le BB amélioré améliore la sensibilité du BB d'origine aux signaux d'inversion antérieurs.

  2. Filtre les fouets avec un motif de chandelier.

  3. Les résultats des tests antérieurs montrent une rentabilité stable de 2008 à 2018, courbe lisse, DD max < 20%.

  4. Levier configurable, heures de négociation pour le contrôle des risques.

Analyse des risques

  1. Un mauvais réglage des paramètres BB peut entraîner une survente ou des opportunités manquées.

  2. Longtemps seulement, incapable de profiter de l'inversion de tendance.

  3. Le filtre à bougies peut être retardé, incapable de sortir en temps opportun.

  4. Les données des tests antérieurs de 10 ans sont insuffisantes pour tester la robustesse.

  5. Ne peut pas s'adapter à de grands espaces ou à des sauts d'ouverture.

Directions d'optimisation

  1. Combinaisons de paramètres d'essai pour optimiser les réglages BB.

  2. Ajouter d'autres filtres de signal pour améliorer la rentabilité.

  3. Considérez les transactions à découvert lorsque le prix dépasse la fourchette supérieure.

  4. Mettre en place un stop loss pour limiter les pertes d'une seule transaction.

  5. Développer un réglage automatique en fonction des changements du marché.

  6. Optimisez les règles d'entrée pour les lacunes et les sauts.

  7. Élargir la période de test de retour aux paramètres de test.

Résumé

Cette stratégie identifie les points d'inversion avec BB amélioré et va long près de la bande inférieure avec filtre de bougie pour une prise de profit rapide. Les performances de backtest sont bonnes. Mais longues seulement, échantillon limité, paramétrage nécessaire. Peut faire face à un repli lorsque le marché change. Les prochaines étapes sont la confirmation des signaux pour augmenter le taux de gain, les transactions courtes, un backtest plus long pour la robustesse, pour améliorer l'adaptabilité et la stabilité.


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

//Noro
//2018

//@version=2
strategy(title = "Noro's Advanced Bollinger Bands Strategy v1.0", shorttitle = "ABB str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
p = input(20, "bars")
d = input(25, "percent")
showlines = input(true, defval = true, title = "Show Lines?")
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")

mult = input(2.0, minval=0.001, maxval=50)
basis = sma(close, p)
dev = mult * stdev(close, p)
source = close
upperBB = basis + dev
lowerBB = basis - dev
b1 = plot(basis, color=gray, linewidth=1)
p1 = plot(upperBB, color=aqua,  linewidth=1)
p2 = plot(lowerBB, color=aqua, linewidth=1)

//SMAs
sma = sma(close, p)
upex2 = sma * ((100 + d) / 100)
dnex2 = sma * ((100 - d) / 100)

upex3 = (upex2 + upperBB) / 2
dnex3 = (dnex2 + lowerBB) / 2

upex = max(upperBB, upex3)
dnex = min(lowerBB, dnex3)
//exit = (high > sma and low < sma)
exit = close > open


//Lines
col = showlines ? blue : na
plot(upex, linewidth = 3, color = col, transp = 0)
plot(sma, linewidth = 3, color = col, transp = 0)
plot(dnex, linewidth = 3, color = col, transp = 0)

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[p]))
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, limit = dnex)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, limit = upex)

if exit
    strategy.close_all()

Plus de