RSI et Bollinger Bands stratégie double

Auteur:ChaoZhang est là., Date: 2023-12-12 11:53:49 Je suis désolé
Les étiquettes:

img

Résumé

L'idée de base de cette stratégie est de combiner l'indice de force relative (RSI) et les bandes de Bollinger, deux indicateurs techniques, pour filtrer les signaux de négociation doubles et minimiser autant que possible les interférences de faux signaux, améliorant ainsi la qualité du signal.

Lorsque l'indicateur RSI montre des signaux de surachat ou de survente alors que le prix franchit ou repousse les rails supérieur et inférieur des bandes de Bollinger, des opportunités de trading apparaissent.

Principe de stratégie

Pour la partie RSI, nous surveillons deux indicateurs RSI avec des durées de cycle différentes en même temps. L'un avec un cycle plus court est utilisé pour capturer les signaux de surachat et de survente, tandis que l'autre avec un cycle plus long est utilisé pour confirmer les renversements de tendance. Lorsque le RSI à cycle court montre un surachat / survente et le RSI à cycle long montre un renversement, nous pensons qu'une opportunité de trading s'est formée.

Pour la partie des bandes de Bollinger, nous surveillons si le prix traverse les rails supérieur et inférieur. Traverser le rail supérieur des bandes de Bollinger est le point de vente, et traverser le rail inférieur est le point d'achat. En même temps, nous surveillons également si le prix recule vers les bandes de Bollinger afin que les opportunités d'inversion puissent être capturées en temps opportun.

Lorsque les signaux RSI et Bollinger Bands apparaissent simultanément, nous pensons que l'opportunité de trading a pris forme et un ordre de trading est émis.

Analyse des avantages

  • Le filtrage à double indicateur offre une plus grande fiabilité et évite les transactions inutiles
  • Capture des opportunités à la fois dans les phases de tendance et d'inversion du marché
  • Paramètres configurables pour les réglages réglables selon les besoins
  • Gestion intégrée du temps et de l'argent

Analyse des risques

  • Des paramètres de Bollinger Bands incorrects peuvent provoquer de faux signaux
  • Incapable de faire face à une volatilité extrême du marché
  • La divergence du RSI peut générer des signaux incorrects
  • Optimisation des paramètres nécessaires pour s'adapter aux différents produits et cycles

Les risques peuvent être évités et contrôlés par l'optimisation des paramètres, une réduction appropriée des positions, une intervention manuelle, etc.

Directions d'optimisation

  • Ajuster les paramètres de l'indice de résistance pour optimiser les jugements de surachat/survente
  • Ajustez la largeur des bandes de Bollinger pour optimiser les stratégies de rupture
  • Ajouter un mécanisme de gestion de position
  • Ajouter une stratégie de stop loss
  • Incorporer davantage d'indicateurs pour construire des modèles multifactoriels

Conclusion

L'indicateur RSI et les bandes de Bollinger utilisent pleinement les forces des deux indicateurs pour générer des signaux de haute qualité.


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

//@version=4
strategy("Ezieh Str.v2", shorttitle="Ezieh Str.v2", overlay=true, pyramiding=10, currency=currency.USD, slippage=3, commission_type=strategy.commission.cash_per_order, commission_value=0.04, initial_capital=1000)



UseDateFilter  = input(title="Enable Date Filter"         ,type=input.bool    ,defval=false                               ,group="Date & Time" ,tooltip="Turns on/off date filter")
StartDate      = input(title="Start Date Filter"          ,type=input.time    ,defval=timestamp("1 Jan 2000 00:00 +0000") ,group="Date & Time" ,tooltip="Date & time to start excluding trades")
EndDate        = input(title="End Date Filter"            ,type=input.time    ,defval=timestamp("1 Jan 2100 00:00 +0000") ,group="Date & Time" ,tooltip="Date & time to stop excluding trades")
UseTimeFilter  = input(title="Enable Time Session Filter" ,type=input.bool    ,defval=false                               ,group="Date & Time" ,tooltip="Turns on/off time session filter")
TradingSession = input(title="Trading Session"            ,type=input.session ,defval="1000-2200:1234567"                 ,group="Date & Time" ,tooltip="No trades will be taken outside of this range")

In(t)      => na(time(timeframe.period, t)) == false
TimeFilter = (UseTimeFilter and not In(TradingSession)) or not UseTimeFilter
DateFilter = time >= StartDate and time <= EndDate

DateTime = (UseDateFilter ? not DateFilter : true) and (UseTimeFilter ? In(TradingSession) : true) 

///////////// RSI
L_RSI_Length     = input(7  , title="L_Length")
L_RSI_OverSold   = input(45 , title="L_OverSold")
S_RSI_Length     = input(14 , title="S_Length")
S_RSI_OverBought = input(65 , title="S_OverBought")

price = close
Lvrsi = rsi(price, L_RSI_Length)
Svrsi = rsi(price, S_RSI_Length)

///////////// Bollinger Bands
BBlength = input(title="Bollinger Period Length", type=input.integer, defval=100, minval=2)
BBmult = 2.1 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
BBbasis = sma(price, BBlength)
BBdev = BBmult * stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
plot(BBbasis, color=color.aqua,title="Bollinger Bands SMA Basis Line")
p1 = plot(BBupper, color=color.silver,title="Bollinger Bands Upper Line")
p2 = plot(BBlower, color=color.silver,title="Bollinger Bands Lower Line")
fill(p1, p2)


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")



///////////// Condition
LongCondition  = crossover(Lvrsi, L_RSI_OverSold)    and crossover(close  ,BBlower)
ShortCondition = crossunder(Svrsi, S_RSI_OverBought) and crossunder(close,BBupper)
Longexcon      = crossunder(low, BBupper)
Shortexcon     = crossover(low, BBlower)

qt = round(strategy.equity/price, 3)

///////////// RSI + Bollinger Bands Strategy
if (not na(Lvrsi))

    if LongCondition and DateTime
        strategy.entry("RSI_BB_L", strategy.long, qty=qt,  comment="Long")
    else
        strategy.cancel(id="RSI_BB_L")
        
    if Longexcon
        strategy.close("RSI_BB_L", qty_percent = 100, comment = "L_exit")
    
    if ShortCondition and DateTime
        strategy.entry("RSI_BB_S", strategy.short, qty=qt,  comment="Short")
    else
        strategy.cancel(id="RSI_BB_S")
        
    if Shortexcon
        strategy.close("RSI_BB_S", qty_percent = 100, comment = "S_exit")
    
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

Plus de