Cette stratégie est basée sur l'indicateur Dynamic Moving Average, combiné avec les bandes de Bollinger et le RSI pour le filtrage des signaux de trading. Elle implémente une tendance suivant une stratégie longue.
Le noyau de cette stratégie est de calculer la variation du prix de clôture de Heiken Ashi. Plus précisément, il calcule la différence entre la MA des barres actuelles et la MA des deux barres précédentes, puis la multiplie par un coefficient de sensibilité pour obtenir la valeur exacte de variation de la MA.
Ensuite, cette valeur de changement est comparée à la différence entre la bande supérieure et la bande inférieure des bandes de Bollinger. Si la variation de MA est supérieure à la différence de BB, elle est considérée comme une explosion de tendance. Lorsque l'explosion est positive, c'est-à-dire que la variation de MA est positive, elle génère un signal long et une barre verte. Lorsque l'explosion est négative, c'est-à-dire que la variation de MA est négative, elle génère un signal de fermeture et une barre rouge.
En outre, cette stratégie dispose d'un filtre RSI qui n'autorise des signaux longs que lorsque le RSI est supérieur à un seuil, évitant ainsi le risque d'inversion de tendance.
Les méthodes de contrôle des risques comprennent: un ajustement approprié des paramètres pour la robustesse, la combinaison d'autres indicateurs pour juger de l'inversion de tendance, l'utilisation uniquement de tendances claires à long terme, etc.
Il y a de la place pour d'autres optimisations:
Essayez différentes sources de prix comme la fermeture, les moyennes mobiles, etc. pour un meilleur lissage
Ajuster les paramètres de la période MA et BB pour optimiser les différents produits
Essayez la relation de rapport au lieu de coefficient de sensibilité pour une valeur d'indicateur plus intuitive
Ajouter d'autres filtres comme les lignes de tendance, le volume, etc. pour améliorer la qualité du signal
Développer une stratégie à court terme basée sur des modèles d'indicateurs
Incorporer des mécanismes de stop loss pour un meilleur contrôle des risques
Dans l'ensemble, il s'agit d'une tendance relativement stable suivant une stratégie. Il utilise une moyenne mobile dynamique pour déterminer la direction de la tendance, BB pour identifier les points explosifs, RSI pour filtrer les faux signaux, réalisant un système de tendance longue. Mais il comporte également certains risques, nécessitant un réglage des paramètres pour différents produits et délais, et l'incapacité de tirer profit des tendances baissières. Il y a place à d'autres améliorations telles que l'amélioration de la qualité du signal, le développement d'une stratégie courte, l'ajout d'un stop loss, etc. pour obtenir de meilleures performances.
/*backtest start: 2022-11-08 00:00:00 end: 2023-11-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 ///////////Original Script Courtesy of Lazy_Bear.... Absolute Legend\\\\\\\\\\\\\\\ strategy('SmoothedWaddah', overlay=false, initial_capital=1) sensitivity = input(150, title='Sensitivity') fastLength = input(20, title='MacD FastEMA Length') slowLength = input(40, title='MacD SlowEMA Length') channelLength = input(20, title='BB Channel Length') mult = input(1.5, title='BB Stdev Multiplier') RSI14filter = input(40, title='RSI Value trade filter') ////////////MacD Calculation of price////////////////////////////// calc_macd(source, fastLength, slowLength) => fastMA = ta.ema(source, fastLength) slowMA = ta.ema(source, slowLength) fastMA - slowMA /////////BolingerBand Calculation of Price/////////////////////// calc_BBUpper(source, length, mult) => basis = ta.sma(source, length) dev = mult * ta.stdev(source, length) basis + dev calc_BBLower(source, length, mult) => basis = ta.sma(source, length) dev = mult * ta.stdev(source, length) basis - dev //////heinkenashi chart call for closing price "smoothing mechanism"\\\\\\\\\\\\\\\\\\\\\\\\\\\ point = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close) ////////////////////T1 is change in MacD current candle from previous candle Sensitivy amplifies calculation///////////////////// t1 = (calc_macd(point, fastLength, slowLength) - calc_macd(point[1], fastLength, slowLength)) * sensitivity //////////////////////T2 is T1 from two candles prior\\\\\\\\\\\\\\\\\\\\\\\\\\\ t2 = (calc_macd(point[2], fastLength, slowLength) - calc_macd(point[3], fastLength, slowLength)) * sensitivity ////////////////E1 is difference in bolinger band upper and lower...E2 is E1 from one candle prior not needed////////////// e1 = calc_BBUpper(ohlc4, channelLength, mult) - calc_BBLower(ohlc4, channelLength, mult) //e2 = (calc_BBUpper(close[1], channelLength, mult) - calc_BBLower(close[1], channelLength, mult)) //////signal bar printing.. Up if MacD positive .. Down if MacD negative////////// trendUp = t1 >= 0 ? t1 : 0 trendDown = t1 < 0 ? -1 * t1 : 0 ///////plots difference in macD*Sensitivity, color change if increasing or decreasing. //////color is green/lime if explosion is up \ color is red/orange if explosion is down///////// plot(trendUp, style=plot.style_columns, linewidth=1, color=trendUp < trendUp[1] ? color.new(color.lime,45) : color.new(color.green,45), title='UpTrend') plot(trendDown, style=plot.style_columns, linewidth=1, color=trendDown < trendDown[1] ? color.new(color.orange,45) : color.new(color.red,45), title='DownTrend') plot(e1, style=plot.style_line, linewidth=2, color=color.new(#A0522D, 0), title='ExplosionLine') ////////////Entry conditions and Concept///////////////////// ////////////Long Only System. T1 is measuring the distance between MACD EMA's. This is Multiplied ////////////by the sensitivity so that it can be compared to the difference between BollingerBand. /////////////{this could have been a ratio maybe i will work with that in a different script.} /////////////I found that 135-175 sensitivy allows for values to be compared on most charts..... ////////////If the (difference between the EMA)*(Sensitivity) is greater than (BB upper line- BB lower line) ////////////it is considered an explosion in either the downside or the upside.The indicator will print ///////////a bar higher than the trigger line either green or red (up or down respectively)////////////////// longCondition = trendUp > e1 and ta.rsi(close, 14) > RSI14filter if longCondition strategy.entry('up', strategy.long) strategy.close('up', trendDown > e1)