Bollinger Band, moyenne mobile et stratégie de négociation combinée MACD

Auteur:ChaoZhang est là., Date: 2024-02-04 15h42 et 23h
Les étiquettes:

img

Vue d'ensemble de la stratégie

Cette stratégie combine la bande de Bollinger, la moyenne mobile et le MACD, formant un système de négociation relativement complet.

Nom et justification de la stratégie

La stratégie s'appelle Triangle Anchoring Trend Tracking Strategy. Le nom souligne son utilisation de trois indicateurs techniques pour déterminer la direction de la tendance et les points d'entrée d'ancrage.

La logique de base du trading est la suivante:

  1. Comparer la bande moyenne de Bollinger, l'EMA et la ligne zéro du MACD pour déterminer si le marché est en phase de tendance haussière ou baissière.

  2. Trouver des opportunités d'entrée. Une fois une tendance identifiée, la stratégie vérifie si l'EMA traverse la bande moyenne BB et si l'histogramme MACD traverse la ligne de signal pour déterminer les entrées.

  3. Définir l'objectif de profit et le stop-loss. Une fois entré, les niveaux d'objectif et de stop-loss sont prédéfinis.

Analyse des avantages

Le plus grand avantage de cette stratégie est l'utilisation simultanée des outils de tendance, moyenne mobile et MACD pour guider les décisions.

Premièrement, la BB Mid Band reflète clairement la direction principale de la tendance actuelle.

Deuxièmement, BB lui-même a de fortes caractéristiques d'enveloppe. La zone autour de la bande moyenne indique également certains niveaux de support/résistance.

En outre, le MACD mesure la croissance et la diminution de l'élan haussier/baissier.

Enfin, l'objectif de profit et le stop loss préétabli contrôlent le risque/rendement des transactions individuelles, assurant ainsi la stabilité globale.

Analyse des risques

Malgré l'utilisation de multiples outils d'analyse, les principaux risques sont les suivants:

  1. Les paramètres BB incorrects ne reflètent pas clairement la tendance principale.

  2. Le système EMA signale une longueur mais le MACD ne se transforme pas clairement en positif, les forces baissières peuvent s'étendre.

  3. L'objectif de profit/intervalle de cessation des pertes est trop large, la perte d'une seule transaction s'élargit.

Les principales solutions sont les suivantes:

  1. Ajustez les paramètres BB pour que la bande moyenne reflète efficacement la tendance principale.

  2. Introduire plus d'indicateurs techniques pour juger de la dynamique taureau/ours.

  3. Évaluer les transactions antérieures et optimiser l'objectif de profit/stop loss.

Directions d'optimisation

La stratégie peut être encore améliorée dans les domaines suivants:

  1. Introduire plus d'indicateurs tels que KDJ, ATR, etc. pour faciliter le jugement des tendances et améliorer la précision.

  2. Mettre en œuvre des arrêts plus sophistiqués comme arrêt de trail, arrêt de rupture, etc.

  3. Évaluer les performances de différents produits, affiner les paramètres pour les adapter aux différentes conditions du marché.

  4. Testez et modifiez la stratégie basée sur les résultats des tests antérieurs sur différentes périodes et marchés.

  5. Incorporer l'apprentissage automatique pour l'optimisation automatique des paramètres et la mise à jour dynamique de la stratégie.

Conclusion

Cette stratégie exploite BB, MA et MACD ensemble. Elle a un jugement de tendance clair, certaines caractéristiques d'enveloppe et capte également quelques renversements. Avec plus d'outils auxiliaires pour juger des entrées/sorties, elle peut obtenir des performances plus fiables. Une évaluation et une amélioration supplémentaires de cette stratégie sont justifiées et devraient produire un outil quantitatif robuste.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined Strategy", overlay=true, shorttitle="Comb Strat", default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Precio de beneficio y Stop Loss
takeProfitTicks = 87636
stopLossTicks = 53350

// Bollinger Bands + EMA
length_bb = input(150, title="BB Length")
src_bb = input(close, title="BB Source")
mult = input(2.0, title="BB StdDev")
basis = ta.sma(src_bb, length_bb)
dev = mult * ta.stdev(src_bb, length_bb)
upper = basis + dev
lower = basis - dev

len_ema = input(34, title="EMA Length")
src_ema = input(close, title="EMA Source")
out_ema = ta.ema(src_ema, len_ema)

typeMA = input("SMA", title="Method")
smoothingLength = input(5, title="Length")

var float smoothingLine = na
if (typeMA == "SMA")
    smoothingLine := ta.sma(out_ema, smoothingLength)
else if (typeMA == "EMA")
    smoothingLine := ta.ema(out_ema, smoothingLength)

// MACD
fast_length = input(title="Fast Length", defval=9)
slow_length = input(title="Slow Length", defval=17)
src_macd = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval=1, maxval=50, defval=9)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

fast_ma = sma_source == "SMA" ? ta.sma(src_macd, fast_length) : ta.ema(src_macd, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src_macd, slow_length) : ta.ema(src_macd, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

// Condiciones de compra y venta
longCondition = (out_ema > basis) and (macd > signal) and (signal > 0)
shortCondition = (out_ema < basis) and (macd < signal) and (signal < 0)

// Variables de estado
var bool longExecuted = na
var bool shortExecuted = na

// Estrategia
if (longCondition and not longExecuted)
    strategy.entry("Long", strategy.long)
    longExecuted := true
    shortExecuted := na
if (shortCondition and not shortExecuted)
    strategy.entry("Short", strategy.short)
    shortExecuted := true
    longExecuted := na

// Take Profit y Stop Loss para Compras y Ventas Cortas
strategy.exit("Take Profit/Close Long", from_entry="Long", profit=takeProfitTicks, loss=stopLossTicks)
strategy.exit("Take Profit/Close Short", from_entry="Short", profit=takeProfitTicks, loss=stopLossTicks)

// Cierre de posiciones cuando la dirección cambia
if ((out_ema < basis) and (macd < signal))
    strategy.close("Long")
    longExecuted := na
if ((out_ema > basis) and (macd > signal))
    strategy.close("Short")
    shortExecuted := na

// Plots
plot(basis, "BB Basis", color=#FF6D00)
plot(upper, "BB Upper", color=color.new(#2962FF, 0.5))
plot(lower, "BB Lower", color=color.new(#2962FF, 0.5))

plot(smoothingLine, title="Smoothing Line", color=#f37f20, linewidth=2)

hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(hist, title="Histogram", style=plot.style_columns, color=(hist >= 0 ? (hist[1] < hist ? color.green : color.red) : (hist[1] < hist ? color.red : color.green)))
plot(macd, title="MACD", color=color.blue)
plot(signal, title="Signal", color=color.orange)


Plus de