Stratégie d'inversion de tendance des bandes de Bollinger

Auteur:ChaoZhang est là., Date: 2023-11-01 11h29 et 34 min
Les étiquettes:

img

Résumé

Cette stratégie utilise les bandes de Bollinger et la moyenne mobile pour aller LONG ou SHORT lorsque le prix s'approche des bandes supérieures ou inférieures.

La logique

La stratégie identifie deux signaux d'entrée:

  1. Signal long: lorsque le prix de clôture atteint la bande inférieure alors qu'il est au-dessus de la ligne EMA, la bougie précédente était baissière et la bougie actuelle est haussière.

  2. Signal court: lorsque le prix de clôture atteint la bande supérieure alors qu'il est en dessous de la ligne EMA, la bougie précédente était haussière et la bougie actuelle baissière.

Le niveau de stop loss est fixé au prix d'entrée plus/moins le ratio risque/rendement multiplié par la distance entre le prix d'entrée et le niveau de prise de profit.

Le profit de prise utilise le profit de prise dynamique. Le profit de prise longue est fixé à la bande inférieure. Le profit de prise courte est fixé à la bande supérieure.

Les avantages

  1. Combine les atouts des stratégies de suivi de tendance et de réversion moyenne, et présente de bonnes performances sur les marchés à fourchette.

  2. Utilise des bandes de Bollinger pour identifier les niveaux de surachat et de survente, améliorant ainsi la précision des signaux d'inversion.

  3. Le stop loss fixe facilite la gestion des risques.

  4. La prise de profit dynamique permet de maximiser les profits.

Les risques

  1. Les stratégies d'évasion sont susceptibles d'arrêter les courses.

  2. Le stop loss est fréquent lorsque le marché est trop mouvementé.

  3. Le stop loss fixe ne s'adapte pas à la volatilité du marché.

  4. Un mauvais réglage des paramètres des bandes de Bollinger peut conduire à des résultats médiocres.

Amélioration

  1. Incorporer l'indicateur RSI pour filtrer les signaux d'entrée. Par exemple, n'allez longs que si le RSI est supérieur à 50 et court uniquement si le RSI est inférieur à 50.

  2. Mettre en œuvre un stop loss adaptatif qui ajuste la distance d'arrêt en fonction de la volatilité.

  3. Optimiser les paramètres des bandes de Bollinger pour trouver les meilleures combinaisons de paramètres.

  4. Testez différentes périodes EMA pour améliorer l'effet support/résistance de l'EMA.

Résumé

La stratégie combine la tendance et l'inversion, en entrant dans les niveaux de surachat / survente identifiés par les bandes de Bollinger. Elle maximise les profits grâce à un profit dynamique. Elle fonctionne bien sur les marchés à fourchette. Méfiez-vous des stop runs. Paramètres d'ajustement fin pour optimiser la performance.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-10-31 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// Welcome to yet another script. This script was a lot easier since I was stuck for so long on the Donchian Channels one and learned so much from that one that I could use in this one
// This code should be a lot cleaner compared to the Donchian Channels, but we'll leave that up to the pro's
// This strategy has two entry signals, long = when price hits lower band, while above EMA, previous candle was bearish and current candle is bullish
// Short = when price hits upper band, while below EMA, previous candle was bullish and current candle is bearish
// Take profits are the opposite side's band(lower band for long signals, upper band for short signals). This means our take profit price will change per bar
// Our stop loss doesn't change, it's the difference between entry price and the take profit target divided by the input risk reward
// At the time of writing this, I could probably calculate that much easier by simply multiplying the opposite band by the input risk reward ratio
// Since I want to get this script out and working on the next one, I won't clean that up, I'm sorry
// strategy(shorttitle="BB Trending Reverse Strategy", title="Bollinger Bands Trending Reverse Strategy", overlay=true, default_qty_type = strategy.cash, default_qty_value = 150, initial_capital = 1000, currency = currency.USD, commission_type = "percent", commission_value = 0.036)

// The built-in Bollinger Band indicator inputs and variables, added some inputs of my own and organised the code
length              = input(20, minval=1)
src                 = input(close, title="Source")
mult                = input(2.0, minval=0.001, maxval=50, title="StdDev")
emaInput            = input(title = "EMA Input", type = input.integer, defval = 200, minval = 10, maxval = 400, step = 1)
riskreward          = input(title = "Risk/Reward Ratio", type = input.float, defval = 1.50, minval = 0.01, maxval = 100, step = 0.01)
offset              = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
basis               = sma(src, length)
dev                 = mult * stdev(src, length)
upper               = basis + dev
lower               = basis - dev
ema                 = ema(close, emaInput)

// These are our conditions as explained above
entryLong           = low[1] <= lower[1] and low <= lower and low > ema
entryShort          = high[1] >= upper[1] and high >= upper and high < ema
reversecandleLong   = close > open and close[1] < open[1]
reversecandleShort  = close < open and close[1] > open[1]
var stopLong        = 0.0
var stopShort       = 0.0

// These are our entry signals, notice how the stop condition is within the if statement while the strategy.exit is outside of the if statement, this way the take profit targets trails up or down depending on what the price does
if reversecandleLong and entryLong and strategy.position_size == 0
    stopLong := (((close / upper - 1) * riskreward + 1) * close)
    strategy.entry("Long Entry", strategy.long, comment = "Long Entry")
    
strategy.exit("Exit Long", "Long Entry", limit = upper, stop = stopLong, comment = "Exit Long")

if reversecandleShort and entryShort and strategy.position_size == 0
    stopShort := (((close / lower - 1) / riskreward + 1) * close)
    strategy.entry("Short Entry", strategy.short, comment = "Short Entry")

strategy.exit("Exit Short", "Short Entry", limit = lower, stop = stopShort, comment = "Exit Short")


// The built-in Bollinger Band plots
plot(basis, "Basis", color=#872323, offset = offset)
p1 = plot(upper, "Upper", color=color.teal, offset = offset)
p2 = plot(lower, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=#198787, transp=95)
plot(ema, color=color.red)

// These plots are to check the stoplosses, they can  make a mess of your chart so only use these if you want to make sure these work
// plot(stopLong)
// plot(stopShort)

Plus de