Stratégie de négociation quantitative basée sur les bandes de Bollinger et le MACD

Auteur:ChaoZhang est là., Date: 2024-02-23 14h30
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de trading quantitative basée sur les bandes de Bollinger et les indicateurs MACD. Elle combine le trading de rupture des bandes de Bollinger et le suivi des tendances MACD pour améliorer la qualité des signaux de trading.

Principe de stratégie

La stratégie utilise principalement les bandes de Bollinger et les indicateurs MACD pour déterminer les signaux de négociation.

Les bandes de Bollinger se composent d'une bande moyenne, d'une bande supérieure et d'une bande inférieure. Un signal d'achat est généré lorsque le prix franchit la bande inférieure. Un signal de vente est généré lorsque le prix franchit la bande supérieure. La stratégie utilise le principe de rupture des bandes de Bollinger pour déterminer des signaux de rupture plus forts.

L'indicateur MACD reflète la relation entre les moyennes mobiles à court et à long terme. Il utilise des croisements de la ligne de différence et de la ligne de signal pour déterminer les points d'entrée et de sortie.

Dans l'ensemble, la stratégie combine le suivi de tendance des bandes de Bollinger et les avantages de la moyenne mobile du MACD, visant à capturer les fluctuations plus importantes du marché dans des tendances fortes.

Les avantages de la stratégie

  1. La combinaison des bandes de Bollinger et des indicateurs MACD rend les signaux de trading plus fiables.

  2. Le suivi de la tendance des bandes de Bollinger et les croisements des moyennes mobiles MACD peuvent produire des signaux d'entrée plus forts sur les marchés en tendance.

  3. Les faux signaux peuvent être efficacement filtrés par un jugement à double indicateur, ce qui réduit le risque de négociation.

  4. Il y a une grande marge d'optimisation des paramètres de la stratégie, qui peut être ajustée en fonction des différents produits et cycles.

Risques liés à la stratégie

  1. Dans les marchés à plage, les signaux de négociation générés par les bandes de Bollinger et le MACD peuvent être fréquents, entraînant des risques de sur-trading.

  2. Trois croix dorées MACD consécutives à des niveaux bas peuvent présenter le risque d'un renversement à la baisse.

  3. La stratégie utilise plusieurs indicateurs, ce qui rend l'optimisation des paramètres et les tests de stratégie assez difficiles.

Pour lutter contre ces risques, des méthodes telles que l'ajustement des périodes de détention, le réglage des stop-loss, l'optimisation des paramètres peuvent être utilisées pour les contrôler.

Directions pour l'optimisation de la stratégie

  1. Testez les paramètres des bandes de Bollinger à plus longue période pour réduire la fréquence des transactions.

  2. Optimiser les paramètres de la ligne rapide et lente du MACD pour améliorer la sensibilité de l'indicateur.

  3. Ajouter d'autres indicateurs pour le filtrage, tels que KDJ, RSI, etc., pour améliorer la qualité du signal.

  4. Mettre en place des arrêts dynamiques pour quitter automatiquement les transactions et contrôler les risques liés aux transactions uniques.

Conclusion

En théorie, en intégrant le trading de rupture des bandes de Bollinger et le filtrage de l'indicateur MACD, cette stratégie peut produire des signaux de trading de haute qualité.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Nabz-BBMACD-2022-V1.1", shorttitle="BBM-Nabz", overlay=true)


// My 1st Pine Scrpt Indicator
// Work on best on 1Hr Chart
// Open for Help/Donations.


var float lastentry=1
int result = 0
float x = 0
drawshape = false

/////////////EMA
shortest = ta.ema(close, 20)
short = ta.ema(close, 50)
longer = ta.ema(close, 100)
longest = ta.ema(close, 200)

plot(shortest, color = color.red)
plot(short, color = color.orange)
plot(longer, color = color.aqua)
plot(longest, color = color.blue)

///////////// RSI
RSIlength = input(6,title="RSI Period Length") 
RSIoverSold = 50
RSIoverBought = 50
price = close
vrsi = ta.rsi(price, RSIlength)


///////////// Bollinger Bands
BBlength = input.int(200, minval=1,title="Bollinger Period Length")
BBmult = 2 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
BBbasis = ta.sma(price, BBlength)
BBdev = BBmult * ta.stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = ta.crossover(source, BBlower)
sellEntry = ta.crossunder(source, BBupper)



////////////// MACD
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")
TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na


///////////Strategy

bool tcu = not (ta.crossunder(price[0],shortest[0]))


if (((price[1]<BBlower[1]) and (ta.crossover(price,BBlower))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 1st IF")
    
if (((ta.crossover(delta, 0.0) and (ta.crossover(price,BBlower)))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 2nd IF")    
    
if (((ta.crossover(delta, 0.0)) and (low[0]>shortest[0])) and (price[1]<low))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 3rd IF")   //else

if (((ta.crossover(delta, 0.01)) and (high[1]<BBupper)) and (tcu))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 4th IF")

       
if ((ta.crossunder(low[0],shortest[0]) and close<shortest))
    strategy.close(id="RSI_BB_L", comment="Close by 1st IF")
    
    
    
if (price<lastentry)
    drawshape := true
    
if (price<strategy.opentrades.entry_price(0)/1.01175734321249)
    strategy.close(id="RSI_BB_L", comment="Close by 2nd IF")



plot(strategy.opentrades.entry_price(0), color=color.yellow)


Plus de