Stratégie de négociation de rupture de la dynamique de la bande de Bollinger

Auteur:ChaoZhang est là., Date: 2024-02-05 10:53:46 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie combine l'indicateur de bande de Bollinger et les indicateurs de volume pour identifier les opportunités de rupture de dynamique forte au-dessus de la bande supérieure de Bollinger lorsque le volume de négociation est élevé et entre dans des positions longues.

La logique de la stratégie

  1. Utilisez l'indicateur Bollinger Band pour déterminer si le prix dépasse la bande supérieure.
  2. Utiliser des indicateurs de volume des transactions pour déterminer si le volume actuel est nettement supérieur à la moyenne des périodes précédentes.
  3. Entrez dans une position longue lorsque le volume des transactions est élevé et que le prix dépasse la bande supérieure de Bollinger.
  4. Utilisez des indicateurs de moyenne mobile pour déterminer la tendance à court et moyen terme afin de réduire les pertes dans le temps.

Cette stratégie prend principalement en compte trois facteurs: le niveau des prix, l'élan et la tendance. Lorsque le prix dépasse la bande supérieure de Bollinger dans la zone d'achat, une augmentation du volume de négociation indique une forte dynamique et un afflux de capitaux. C'est le bon moment pour entrer dans une position longue.

Les avantages

  1. Des signaux précis, évitant de fausses fuites, combinant un filtre de volume, il n'achète que sur une forte dynamique, réduisant ainsi le risque.

  2. Capable de réduire les pertes dans le temps grâce à la détermination de la tendance des moyennes mobiles, réduisant ainsi les pertes de détention.

  3. Stratégie quantitative mise en œuvre combinant plusieurs indicateurs pour la prise de décision, paramètres flexibles adaptés à différents produits et délais.

  4. Structures de code claires, faciles à lire et à entretenir, conception modulaire du calcul des indicateurs, génération de signaux et gestion de position.

Les risques

  1. Les bandes de Bollinger pourraient échouer lors de fluctuations de prix extrêmes, manquer de signaux ou générer de faux signaux.

  2. Les signaux d'achat peuvent ne pas être rentables sans un volume de trading suffisant.

  3. La détermination de la tendance des moyennes mobiles pourrait également échouer, ne pouvant pas garantir pleinement un stop loss efficace.

  4. Un mauvais réglage des paramètres affecte également la rentabilité de la stratégie.

Directions d'optimisation

  1. Ajouter plus d'indicateurs techniques pour une meilleure analyse de tendance et de support/résistance, améliorant le stop loss, par exemple les modèles de bougies, les canaux, les niveaux de support clés.

  2. Ajouter des modèles d'apprentissage automatique pour juger des possibilités réelles de rupture, réduisant les faux signaux. par exemple, les modèles d'apprentissage profond LSTM.

  3. Optimiser les stratégies de gestion des capitaux telles que la dimensionnement dynamique des positions, le suivi des arrêts de perte pour réduire l'impact des pertes d'un seul commerce.

  4. Testez plus de produits et de délais, ajustez des paramètres comme les bandes de Bollinger, la fenêtre de volume pour améliorer la robustesse de la stratégie.

Conclusion

Cette stratégie intègre les bandes de Bollinger et les indicateurs de volume de négociation pour identifier les opportunités d'achat à forte dynamique, avec des moyennes mobiles garantissant un stop loss efficace.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
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/
// © KAIST291

//@version=4
initial_capital=1000
strategy("prototype", overlay=true)
length1=input(1)
length3=input(3)
length7=input(7)
length9=input(9)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma9= sma(close,length9)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
mult4= input(2.5, minval=0.001, maxval=50, title="exp2")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
dev4= mult4 * stdev(src, length)
upper2=basis + dev4
lower2=basis - dev4
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=( BV>SV and BV>Davgvol)
bull2=(BV>SV and BV>Davgvol)
bux =(close>Supper and close>Slower and volume<Davgvol)
bear=(SV>BV and SV>Davgvol)
con=(BV>Wavgvol and rsi>80)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>upper1 and close>Supper and high>upper and rsi<80)
    strategy.entry("Long",strategy.long)

if (strategy.position_avg_price*1.02<close)
    strategy.close("Long")
else if (low<ma9 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (ma20>close and strategy.position_avg_price<close )
    strategy.close("Long")
else if (rsi>80 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
    strategy.close("Long")
else if (high<upper and strategy.position_avg_price<close)
    strategy.close("Long")
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120))

if (close<strategy.position_avg_price*0.98)
    strategy.close("Short")

else if (rsi<20)
    strategy.close("Short")



Plus de