Stratégie de trading à filtres multiples avec bandes de Bollinger


Date de création: 2024-01-17 15:12:57 Dernière modification: 2024-01-17 15:12:57
Copier: 1 Nombre de clics: 592
1
Suivre
1617
Abonnés

Stratégie de trading à filtres multiples avec bandes de Bollinger

Aperçu

La stratégie de négociation en bandes de Bourse à sélection multiple est une stratégie de négociation quantitative qui combine un indicateur de bandes de Bourse, un indicateur de ligne moyenne, un indicateur RSI et une caractéristique de diagramme en ligne K pour filtrer les conditions multiples et émettre un signal de négociation lorsque les conditions sont remplies. Il s’agit d’une stratégie de suivi de tendance typique qui permet de tirer profit des fluctuations de la tendance des prix sur la ligne moyenne et longue.

Principe de stratégie

Calcul de l’indicateur

La stratégie utilise principalement trois indicateurs: la bande de Brin, la moyenne et le RSI. Le milieu de la bande de Brin est la moyenne mobile simple de n jours du prix, et le haut et le bas de la bande sont respectivement le milieu + 2 fois l’écart standard et le milieu - 2 fois l’écart standard. L’indicateur RSI est un nombre compris entre 0 et 100 calculé sur la base de la hausse et de la baisse d’une période donnée.

Signaux de négociation

La stratégie génère un signal de transaction selon les trois conditions principales suivantes:

(1) Brin avec une rupture de la trajectoire descendante et un rebond de l’entité de la ligne K. Faire plus lorsque le prix de clôture est en rupture de la trajectoire descendante et que la couleur de l’entité de la ligne K est opposée à la direction de la tendance actuelle.

(2) Brin avec la rupture de la voie et le rebond de l’entité de la ligne K. Lorsque le prix de clôture est en train de traverser la voie et que la couleur de l’entité de la ligne K est opposée à la direction de la tendance actuelle, faites une pause.

(3) L’entité de la ligne K se déplace. Si la direction de la position est la même que la couleur de l’entité de la ligne K se déplace, alors la position est nulle.

En plus de cela, la stratégie a mis en place des conditions auxiliaires telles que le filtre homogène, le filtre entité K et le filtre RSI pour contrôler strictement l’entrée.

Analyse des avantages

  • Des contrôles stricts des conditions multiples permettent de réduire le risque de fausses percées
  • Le suivi des tendances réduit la fréquence des transactions
  • Les RSI aident à éviter le piège de l’inversion

Analyse des risques

  • Une mauvaise configuration des paramètres de la bande de Bryn peut entraîner une diminution du signal
  • L’échec de la percée pourrait entraîner des pertes importantes
  • La fréquence des transactions est faible et certaines opportunités peuvent être manquées.

Il est possible de réduire le risque en ajustant les paramètres des bandes de Bryn et en contrôlant strictement les arrêts de perte.

Direction d’optimisation

  • Vous pouvez tester la performance d’une stratégie sous différents paramètres pour trouver l’optimisation.
  • Les algorithmes d’apprentissage automatique peuvent être ajoutés pour permettre aux stratégies d’optimiser automatiquement les paramètres
  • Plus de facteurs et de filtres peuvent être ajoutés pour améliorer la stabilité de la stratégie

Résumer

Cette stratégie est une stratégie typique de suivi de la tendance de la ligne médiane et longue. En sélectionnant des conditions multiples, en contrôlant strictement le moment d’entrée et de sortie, en adoptant une méthode de négociation de tendance, on peut réduire les transactions inutiles et capturer la tendance de la ligne médiane du marché.

Code source 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()