Stratégie de déclin de la tendance de l'indice BB en pourcentage

Auteur:ChaoZhang est là., Date: 2023-12-06 14:43:39 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie est basée sur l'indice de pourcentage BB combiné avec les indicateurs RSI et MFI. Elle prend des décisions longues et courtes en détectant les écarts de prix des bandes de Bollinger supérieures et inférieures, ainsi que les signaux de survente/surachat RSI et les signaux de survente/surachat MFI.

La logique de la stratégie

  1. Calculer Bollinger Band Percentage (BB%). BB% représente l'écart type du prix par rapport à la bande moyenne de Bollinger, qui juge la direction du marché à travers le canal de Bollinger.
  2. Incorporer des indicateurs RSI et des IFM pour déterminer les conditions de surachat et de survente. RSI compare le gain moyen et la perte moyenne sur une période de temps pour déterminer les niveaux de surachat et de survente.
  3. Lorsque le prix franchit le niveau inférieur de Bollinger vers le haut, allez long; lorsque le prix franchit le niveau supérieur de Bollinger vers le bas, allez court.

Les avantages

  1. Le trading à tendance décroissante évite les tendances du marché et réduit les fluctuations des rendements.
  2. La combinaison de plusieurs indicateurs filtre les signaux et améliore la précision des décisions.
  3. Les paramètres sont flexibles pour ajuster les caractéristiques de risque-rendement de la stratégie.
  4. Applicable aux instruments très volatils tels que les matières premières, le forex, les crypto-monnaies, etc.

Risques et solutions

  1. Il existe une forte probabilité de faux signaux provenant de ruptures de Bollinger, nécessitant une combinaison d'indicateurs multiples pour la filtration.
  2. Le jugement des signaux de rupture nécessite des critères appropriés pour éviter de manquer de bonnes opportunités.
  3. Ajuster les paramètres pour contrôler les risques, tels que la taille des positions, l'augmentation des lignes de stop loss, etc.

Directions d'optimisation

  1. Incorporer des mécanismes de stop loss basés sur la volatilité tels que l'indicateur ATR.
  2. Introduire des modèles d'apprentissage automatique pour aider à juger de la qualité du signal de rupture.
  3. Optimiser les mécanismes de sélection des instruments afin d'ajuster dynamiquement les instruments participants.
  4. Incorporer plus de facteurs tels que les indicateurs de sentiment, les nouvelles, etc. pour améliorer le cadre de décision.

Conclusion

Cette stratégie s'applique principalement aux instruments non-trending à forte volatilité. Elle implémente le trading de tendance décroissante via des combinaisons de canaux et d'indicateurs Bollinger. Les caractéristiques de risque-rendement peuvent être contrôlées en ajustant les paramètres. Des améliorations supplémentaires peuvent être apportées en introduisant plus d'indicateurs et de modèles auxiliaires pour optimiser la qualité des décisions, obtenant ainsi de meilleures performances de 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()

Plus de