Les ressources ont été chargées... Je charge...

Stratégie de négociation à bande de Bollinger à filtres multiples

Auteur:ChaoZhang est là., Date: 2024-01-17 15:12:57 La date est le 17 janvier.
Les étiquettes:

img

Résumé

La stratégie de trading multi-filtre Bollinger Band est une stratégie de trading quantitative qui combine l'indicateur Bollinger Band, l'indicateur de moyenne mobile, l'indicateur RSI et les caractéristiques graphiques de ligne K pour un dépistage multiconditionnel afin de générer des signaux de trading lorsque les conditions sont remplies.

Principe de stratégie

Calcul des indicateurs

La stratégie utilise principalement trois indicateurs: les bandes de Bollinger, la moyenne mobile et le RSI. Parmi eux, le rail du milieu des bandes de Bollinger est la moyenne mobile simple de prix de n jours, et les rails supérieur et inférieur sont respectivement les rails du milieu +2 écarts types et les rails du milieu -2 écarts types.

Signaux de négociation

La stratégie génère des signaux de trading à travers les trois conditions principales suivantes:

(1) Breakout de la bande inférieure de Bollinger et contradiction du corps de la ligne K. Lorsque le prix de clôture franchit la bande inférieure vers le haut et que la couleur du corps de la ligne K contredit la direction de la tendance actuelle, allez long.

(2) Breakout de la bande supérieure de Bollinger et contradiction du corps de la ligne K. Lorsque le prix de clôture franchit la bande supérieure vers le bas et que la couleur du corps de la ligne K contredit la direction de la tendance actuelle, passez à la vente.

(3) Inversion du corps en ligne K. Si la direction de la position est compatible avec l'inversion de la couleur du corps en ligne K, fermez la position.

En outre, la stratégie définit également des filtres de moyenne mobile, des filtres de carrosserie de ligne K, des filtres RSI et d'autres conditions auxiliaires pour contrôler strictement l'entrée.

Analyse des avantages

  • Le contrôle de plusieurs conditions strictes peut réduire le risque de fausses fuites
  • La méthode de suivi des tendances réduit la fréquence des transactions
  • L'indicateur RSI aide à éviter les pièges d'inversion

Analyse des risques

  • Les paramètres de Bollinger mal réglés peuvent entraîner peu de signaux.
  • Les échecs peuvent entraîner des pertes plus importantes.
  • Une fréquence de négociation moindre peut faire perdre certaines opportunités de négociation

Les risques peuvent être réduits en ajustant les paramètres de Bollinger et en contrôlant strictement les arrêts.

Directions d'optimisation

  • Performance des stratégies de test sous différents paramètres pour trouver les paramètres optimaux
  • Ajouter des algorithmes d'apprentissage automatique pour optimiser automatiquement les paramètres
  • Ajouter plus de facteurs et de filtres pour améliorer la stabilité de la stratégie

Résumé

Dans l'ensemble, cette stratégie est une stratégie typique de suivi de tendance à moyen et long terme. En effectuant un dépistage multiconditionnel et en contrôlant strictement les délais d'entrée et de sortie avec une approche de trading de tendance, elle peut réduire les transactions inutiles et capturer les tendances du marché à moyen et long terme. Il y a encore beaucoup de place pour optimiser cette stratégie en ajustant les paramètres, en ajoutant plus d'outils auxiliaires, etc., afin d'améliorer encore la stabilité et la rentabilité de la stratégie.


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

//Noro
//2018

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

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

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

usebf = input(true, defval = true, title = "Use body-filter")
usecf = input(true, defval = true, title = "Use color-filter")
userf = input(true, defval = true, title = "Use RSI-filter")

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")
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 filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 2 or usebf == false

//Color filter
bar = close > open ? 1 : close < open ? -1 : 0 
gb = bar == 1 or usecf == false
rb = bar == -1 or usecf == false

//RSI Filter
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
rsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
ursi = rsi > 70 or userf == false
drsi = rsi < 30 or userf == false

//Signals
up = close <= lower and rb and body and drsi and (close < strategy.position_avg_price or strategy.position_size == 0)
dn = close >= upper and gb and body and ursi and (close > strategy.position_avg_price or strategy.position_size == 0)
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

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

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

Plus de