Stratégie de détrending basée sur l'indicateur de pourcentage des bandes de Bollinger


Date de création: 2023-12-06 14:43:39 Dernière modification: 2023-12-06 14:43:39
Copier: 0 Nombre de clics: 651
1
Suivre
1619
Abonnés

Stratégie de détrending basée sur l’indicateur de pourcentage des bandes de Bollinger

Aperçu

La stratégie est basée sur l’indicateur de pourcentage de la bande de Brin combiné avec les indicateurs RSI et MFI, en détectant que les prix des produits financiers ont percé la bande de Brin et sont descendus, en combinant les signaux de survente et de survente du RSI et du MFI, pour prendre des décisions plus ou moins favorables.

Principe de stratégie

  1. Calculer le pourcentage de la ceinture de Brin ((BB%)). Le BB% indique la différence de prix par rapport à la moyenne de la ceinture de Brin, et la direction du marché est déterminée par le canal de la ceinture de Brin.
  2. Combination des indicateurs RSI et MFI pour juger si une transaction est sur-achetée ou sur-vendue. Le RSI pour juger si une transaction est sur-achetée ou sur-vendue en comparant la hausse et la baisse moyennes sur une période donnée.
  3. Faire plus lorsque le prix est descendu de la barre de Brin de bas en haut; Faire plus lorsque le prix est descendu de la barre de Brin de haut en bas en haut. Filtrer les signaux de survente et de surachat en combinaison avec les indicateurs RSI et MFI.

Avantages stratégiques

  1. Il est important d’éviter les mouvements du marché et de réduire les fluctuations des bénéfices.
  2. La combinaison de plusieurs indicateurs permet de filtrer les signaux et d’améliorer la précision de la prise de décision.
  3. Les paramètres sont flexibles et la stratégie peut être adaptée en fonction des caractéristiques de risque/bénéfice.
  4. Il s’applique aux indices à forte volatilité tels que les matières premières, les devises et les crypto-monnaies.

Risques et solutions

  1. La rupture de la ceinture de Brin est plus susceptible de produire de faux signaux et nécessite un filtrage de plusieurs combinaisons d’indicateurs.
  2. Les signaux de rupture doivent être jugés avec la souplesse requise pour éviter de manquer une bonne occasion.
  3. Ajuster les paramètres de réglage pour contrôler le risque, par exemple en ajustant la taille de la position, en augmentant la limite de stop loss, etc.

Direction d’optimisation

  1. L’ajout de mécanismes de stop-loss basés sur la volatilité, tels que l’indicateur ATR.
  2. L’introduction d’un modèle d’apprentissage automatique pour aider à déterminer la qualité du signal de rupture.
  3. Optimiser le mécanisme de sélection des variétés participatives et adapter dynamiquement les critères de participation.
  4. Le système de prise de décision est amélioré en combinant des indicateurs d’humeur, des informations et d’autres éléments.

Résumer

Cette stratégie est principalement appliquée aux variétés non tendancielles à forte volatilité, permettant de réaliser des transactions de détrend grâce à une combinaison de chaînes de Bryn et d’indicateurs. Les paramètres peuvent être ajustés pour contrôler les caractéristiques de risque et de rendement.

Code source de la stratégie
/*backtest
start: 2023-11-05 00:00:00
end: 2023-12-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "BB%/MFI/RSI", shorttitle = "BB%/MFI/RSI", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//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 = "Lot, %")
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")

source = hlc3
length = input(14, minval=1), mult = input(2.0, minval=0.001, maxval=50), bblength = input(50, minval=1, title="BB Period")
DrawRSI_f=input(true, title="Draw RSI?", type=bool)
DrawMFI_f=input(false, title="Draw MFI?", type=bool)
HighlightBreaches=input(true, title="Highlight Oversold/Overbought?", type=bool)

DrawMFI = (not DrawMFI_f) and (not DrawRSI_f) ? true : DrawMFI_f
DrawRSI = (DrawMFI_f and DrawRSI_f) ? false : DrawRSI_f
// RSI
rsi_s = DrawRSI ? rsi(source, length) : na
plot(DrawRSI ? rsi_s : na, color=maroon, linewidth=2)

// MFI
upper_s = DrawMFI ? sum(volume * (change(source) <= 0 ? 0 : source), length) : na
lower_s = DrawMFI ? sum(volume * (change(source) >= 0 ? 0 : source), length) : na
mf = DrawMFI ? rsi(upper_s, lower_s) : na
plot(DrawMFI ? mf : na, color=green, linewidth=2)

// Draw BB on indices
bb_s = DrawRSI ? rsi_s : DrawMFI ? mf : na
basis = sma(bb_s, length)
dev = mult * stdev(bb_s, bblength)
upper = basis + dev
lower = basis - dev
plot(basis, color=red)
p1 = plot(upper, color=blue)
p2 = plot(lower, color=blue)
fill(p1,p2, blue)

b_color = (bb_s > upper) ? red : (bb_s < lower) ? lime : na
bgcolor(HighlightBreaches ? b_color : na, transp = 0)

//Signals
up = bb_s < lower and close < open
dn = bb_s > upper and close > open
size = strategy.position_size
lp = size > 0 and close > open
sp = size < 0 and close < open
exit = (up == false and dn == false) and (lp or sp)

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()