La stratégie quantitative: les bandes de Bollinger RSI et la stratégie croisée CCI

Auteur:ChaoZhang est là., Date: 2023-12-20 16:24:49 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie combine les bandes de Bollinger, l'indice de force relative (RSI) et l'indice des canaux de produits de base (CCI) pour trouver des signaux croisés et générer des signaux d'achat et de vente.

La logique de la stratégie

Les bandes de Bollinger

Les bandes de Bollinger se composent d'une bande moyenne, d'une bande supérieure et d'une bande inférieure. La bande moyenne est généralement une moyenne mobile de 20 jours. La bande supérieure est deux écarts standard au-dessus de la bande moyenne. La bande inférieure est deux écarts standard en dessous. Les prix près de la bande inférieure peuvent indiquer une condition de survente. Les prix près de la bande supérieure peuvent indiquer une condition de surachat.

Indice de résistance

Le RSI mesure la vitesse des mouvements directionnels des prix vers le haut et vers le bas. Il montre un surachat au-dessus de 70 et un survente au-dessous de 30.

CCI

L'indicateur CCI mesure à quel point les prix se sont déplacés par rapport au prix moyen. Les lectures supérieures à +100 impliquent une condition de surachat. Les lectures inférieures à -100 impliquent une condition de survente. L'indicateur CCI reflète des niveaux de prix extrêmes.

Signaux croisés

Cette stratégie utilise des bandes de Bollinger pour juger des niveaux de surachat/survente à court terme, RSI pour mesurer la dynamique haussière/baissière et CCI pour identifier les extrêmes de prix.

Les avantages

  1. La combinaison de plusieurs indicateurs améliore la précision du signal et réduit les faux signaux
  2. Capture les opportunités d'inversion aux points tournants
  3. Les paramètres personnalisables s'adaptent aux différentes conditions du marché
  4. Filtre CCI lissé réduit le bruit et améliore la stabilité

Risques et solutions

  1. Les trois indicateurs peuvent produire de mauvais signaux entraînant des pertes.
  2. L'indice de volatilité peut être remplacé par des moyennes mobiles ou des indicateurs de volatilité.
  3. Il suffit d'arrêter les pertes sans prendre de profit.

Des possibilités d'optimisation

  1. Testez plus de combinaisons de paramètres pour trouver la configuration optimale
  2. Introduire l'apprentissage automatique pour ajuster automatiquement les paramètres
  3. Stratégies d'acquisition de bénéfices avec objectifs de profit
  4. Incorporer plus d'indicateurs comme MACD, KD pour valider les signaux

Conclusion

Cette stratégie analyse les conditions globales du marché à l'aide d'indicateurs Bollinger Bands, RSI et CCI. Elle identifie les points d'inflexion à travers des signaux croisés pour négocier les renversements du marché.


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

//@version=5
strategy(shorttitle="BBRSIstr", title="Bollinger Bands", overlay=true)
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

//RSI
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")
showDivergence = input.bool(false, title="Show Divergence", group="RSI Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"

rsiPlot = plot(rsi, "RSI", color=#7E57C2)
plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
midline = hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")

//cci
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
plot(cci, "CCI", color=#2962FF)
band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
hline(0, "Middle Band", color=color.new(#787B86, 50))
band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background")

typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing")

smoothingLine = ma(cci, smoothingLength, typeMA)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, display=display.none)


longCBB= close < lower
shortCBB = close>upper
longBRSI = rsi < 33
shortBRSI = rsi > 70
longcci = cci < -215
shortcci = cci > 250

strategy.entry("LONG", strategy.long, when = longCBB and longBRSI and longcci)
strategy.exit("Exit ", profit = 600)
strategy.entry("SHORT", strategy.short, when = shortCBB and shortBRSI and shortcci)
strategy.exit("Exit ", profit = 600)

Plus de