Stratégie de suivi intelligent double B

Auteur:ChaoZhang est là., Date: 2024-01-18 15:41:20 Les résultats sont disponibles au moment où vous les souhaitez.
Les étiquettes:

img

Il s'agit d'une stratégie de trading qui utilise des bandes de Bollinger.

Principe de stratégie

La stratégie calcule la bande supérieure, la bande moyenne et la bande inférieure des bandes de Bollinger pour déterminer si le prix actuel se situe dans la plage volatile et donc prendre des décisions sur l'ouverture ou la fermeture des positions. Lorsque le prix approche la bande supérieure, il est considéré comme le point extrême pour les longs et la stratégie choisit de fermer les positions longues. Lorsque le prix tombe près de la bande inférieure, il est considéré comme le point extrême pour les shorts et la stratégie choisit d'ouvrir des positions longues.

En outre, la stratégie introduit également des facteurs d'inversion de tendance. S'il y a un signal d'inversion, il déclenchera également les décisions d'achat ou de vente correspondantes. Plus précisément, la logique de la stratégie est la suivante:

  1. Calculer les bandes de Bollinger supérieures, moyennes et inférieures
  2. Jugez si le prix traverse les bandes et les signaux d'inversion
    1. Dépassement de la bande du milieu comme signal de tendance
    2. Près de la bande supérieure ou inférieure comme signaux de renversement
  3. Envoyer des ordres d'achat, de vente ou de clôture

En utilisant les caractéristiques des bandes de Bollinger et en combinant les facteurs de tendance et d'inversion, la stratégie tente d'attraper des points d'inversion lorsque la volatilité augmente.

Les avantages de la stratégie

Cette stratégie présente les avantages suivants par rapport aux stratégies de moyenne mobile ordinaires:

  1. Plus sensible, capable de saisir les opportunités lorsque les prix fluctuent violemment
  2. Combiner les facteurs de tendance et de renversement pour éviter les pertes dues à des renversements prématurés
  3. A un certain effet FILTER pour éviter les achats/ventes inutiles dans les zones non volatiles
  4. Jugez la direction de la tendance principale à travers la bande du milieu pour réduire la fréquence de négociation
  5. Augmenter les conditions de filtrage d'inversion pour réduire les erreurs de jugement

En général, cette stratégie combine relativement bien les bandes de Bollinger et les barres de prix. Elle se négocie à des points d'inversion raisonnables pour assurer un certain niveau de bénéfices tout en contrôlant les risques.

Risques et optimisation

Toutefois, cette stratégie présente encore certains risques:

  1. Les paramètres BB inappropriés ne permettent pas de capturer pleinement les fluctuations des prix
  2. Un jugement erroné du signal de renversement, des renversements manquants ou des renversements erronés
  3. Faible efficacité des signaux de la bande médiane lorsque la tendance n'est pas claire

En conséquence, les optimisations futures peuvent se concentrer sur:

  1. Optimisation adaptative des paramètres BB basée sur différents produits
  2. Améliorer les modèles d'apprentissage automatique pour juger de la probabilité d'inversion
  3. Passer à d'autres indicateurs lorsque la tendance n'est pas claire
  4. Combinez plus de modèles de prix pour filtrer les signaux de trading

Conclusion

En conclusion, il s'agit d'un modèle de stratégie de trading typique de Bollinger Bands. Il évite les transactions inefficaces excessives courantes pour l'utilisation de Bollinger Bands seuls en introduisant un jugement d'inversion de tendance pour filtrer les signaux, ce qui peut théoriquement conduire à de bonnes performances de stratégie. Mais les paramètres et le filtrage des signaux ont encore besoin d'une optimisation et d'une amélioration supplémentaires pour la robustesse et pour réduire les erreurs de jugement.


/*backtest
start: 2023-12-18 00:00:00
end: 2024-01-17 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy("Noro's Bollinger Strategy v1.2", shorttitle = "Bollinger str 1.2", overlay = true )

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")

length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length")
mult = input(2.0, defval = 2.0, minval = 0.001, maxval = 50, title = "Bollinger Mult")
source = input(ohlc4, defval = ohlc4, title = "Bollinger Source")

uset = input(true, defval = true, title = "Use trend entry")
usect = input(true, defval = true, title = "Use counter-trend entry")

fromyear = input(2018, defval = 2018, 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")
showbands = input(true, defval = true, title = "Show Bollinger Bands")

//Bollinger Bands
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev

//Lines
col = showbands ? black : na 
plot(upper, linewidth = 1, color = col)
plot(basis, linewidth = 1, color = col)
plot(lower, linewidth = 1, color = col)

//Body
body = abs(close - open)
abody = ema(body, 30)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0 
up1 = bar == -1 and close >= basis and close < upper and (close < strategy.position_avg_price or strategy.position_size == 0) and uset
dn1 = bar == 1 and close <= basis and close > lower and (close > strategy.position_avg_price or strategy.position_size == 0) and uset
up2 = close <= lower and usect
dn2 = close >= upper and usect
exit = (strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open) and body > abody / 2

//Trading
if up1 or up2
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn1 or dn2
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    
if exit
    strategy.close_all()

Plus de