Cette stratégie calcule l'indicateur MACD et son histogramme MACD pour détecter les signaux de divergence entre l'histogramme MACD et le mouvement des prix, générant ainsi des signaux de négociation. Lorsqu'un nouveau haut de prix mais aucun nouveau haut dans l'histogramme MACD est détecté, un signal de divergence baissier est généré. Lorsqu'un nouveau bas de prix mais aucun nouveau bas dans l'histogramme MACD n'est détecté, un signal de divergence haussière est généré. Combiné avec l'indicateur ATR pour le stop loss et le take profit, il effectue des opérations de suivi de tendance.
Le principe de base de cette stratégie est d'utiliser l'indicateur MACD et son histogramme MACD pour refléter les changements dans les tendances des prix et détecter les signaux de divergence entre l'histogramme MACD et le prix en tant que condition déclenchante des signaux de négociation.
Plus précisément, la stratégie calcule d'abord la ligne MACD, la ligne de signal et l'histogramme MACD. Ensuite, en définissant la fonction fractale pour détecter les pics et les vallées de l'histogramme MACD pour extraire les maxima et les minima locaux. Combiné avec le prix le plus élevé et le prix le plus bas, il détermine s'il existe une divergence entre l'histogramme MACD et le prix.
Lorsque le prix atteint un nouveau sommet mais que l'histogramme MACD n'atteint pas un nouveau sommet, un signal de divergence baissière regular_bearish_div est généré. Lorsque le prix tombe à un nouveau plus bas mais que l'histogramme MACD ne tombe pas à un nouveau plus bas, un signal de divergence haussière regular_bullish_div est généré.
Enfin, lorsque des signaux de divergence baissiers et haussiers sont générés, la stratégie émet des ordres courts et longs respectivement et quitte les positions avec ATR stop loss et take profit.
Cette stratégie présente les avantages suivants:
En utilisant la caractéristique de divergence entre l'histogramme MACD et le prix, il peut capturer les virages dans les tendances des prix tôt.
Les paramètres d'arrêt des pertes et de prise de profit ATR sont raisonnables pour contrôler efficacement la perte maximale par transaction.
L'utilisation d'une méthode de suivi de tendance peut maximiser les bénéfices.
Des paramètres raisonnables filtrent certains signaux de trading bruyants.
La logique de la stratégie est claire et facile à comprendre, facile à valider dans le trading en direct.
Cette stratégie comporte également des risques:
La divergence du MACD ne conduit pas nécessairement à un renversement des prix, il existe certains risques de faux signaux.
Les paramètres d'arrêt des pertes et de prise de bénéfices déraisonnables peuvent entraîner des pertes excessives ou des bénéfices insuffisants.
Les signaux de divergence avec des cycles courts peuvent être causés par le bruit et doivent être filtrés correctement.
Les produits de négociation et les paramètres incompatibles auront également une incidence sur les performances de la stratégie.
Solution correspondante:
Augmenter les exigences de longueur et de magnitude de la divergence pour filtrer les faux signaux.
L'établissement doit fournir des informations détaillées sur les risques liés à l'utilisation de l'indice ATR pour déterminer les risques liés à l'utilisation de l'indice.
Sélectionnez différents paramètres pour différents produits de trading. Effectuez une optimisation des paramètres pour trouver des combinaisons optimales de paramètres.
Cette stratégie peut également être optimisée dans les directions suivantes:
Confirmation de divergence plus complexe, telle que la confirmation de divergence de volume.
Optimiser les paramètres MACD pour trouver la meilleure combinaison de paramètres.
Optimisez les multiples de l'ATR stop loss et profit.
Ajouter des algorithmes d'apprentissage automatique pour aider à juger de la fiabilité des signaux de divergence.
Ajouter la prédiction du modèle pour déterminer la probabilité d'inversion de prix.
Ajustez dynamiquement les paramètres de stratégie en fonction des changements de la situation du marché.
En résumé, cette stratégie de suivi de tendance de la divergence MACD de Candlestick Demigod utilise la divergence entre l'histogramme MACD et le prix pour capturer les tendances. Les paramètres raisonnables d'arrêt de perte et de prise de profit ATR peuvent contrôler les risques par transaction. La logique de la stratégie est claire et facile à comprendre, qui vaut la peine d'être validée dans le trading en direct. Des optimisations de suivi peuvent être effectuées dans de nombreux aspects pour obtenir de meilleurs résultats.
/*backtest start: 2024-01-04 00:00:00 end: 2024-02-03 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © bigwin_sun // copyright: Tradingvue Limited //@version = 5 strategy(title = "Demigod : CDMA histogram Divergence strategy", shorttitle = "Demigod strategy", overlay = false, pyramiding = 100) //macd input fastMA = input.int(13, title = "fast Length", minval = 1, group = "CDMA") slowMA = input.int(34, title = "slow Length", minval = 1, group = "CDMA") src = input.source(title = "source", defval = close, group = "CDMA") signalSmooth = input.int(9, title="ma Length", minval = 1, group = "CDMA") //Divergenc divLength = input.int(title = "Divergenc Length", defval = 5, minval = 1, maxval = 50, inline = "ATRLength", group = "Divergence") divStren = input.float(title="Divergenc Strength", defval = 2, minval = 1.0, maxval = 5.0, inline = "ATRLength", group = "Divergence") //atr input atrLength = input.int(13, title = "ATR Length", minval = 1, inline = "ATRLength", group = "ATR") m = input.float(1.0, "ATR multyple", minval = 0.5, inline = "ATRLength", group = "ATR", step = 0.5) collong = input.color(color.teal, title = "upper color", inline = "ATR显示", group = "ATR") colshort = input.color(color.red, title = "under color", inline = "ATR显示", group = "ATR") // MACD--------------------------------------------------------------------------------------------------------------------------------- DivOffset = -2 macdLine = ta.ema(src, fastMA) - ta.ema(src, slowMA) signalLine = ta.ema(macdLine, signalSmooth) histogram = macdLine - signalLine histogramColor = if histogram > 0 histogram > histogram[1] ? color.lime : color.green else histogram < histogram[1] ? color.maroon : color.red // cdma histogram plot(histogram, title = "MACD histogram", linewidth = 2, style = plot.style_histogram, color = histogramColor) plot(0, title = "zero line", linewidth = 1, color = color.gray) // Divergenc calculation------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //peak / valley fundation f_top_fractal(_src)=>_src[4] < _src[2] and _src[3] < _src[2] and _src[2] > _src[1] and _src[2] > _src[0] and _src > 0 f_bot_fractal(_src)=>_src[4] > _src[2] and _src[3] > _src[2] and _src[2] < _src[1] and _src[2] < _src[0] and _src < 0 f_fractalize(_src)=>f_top_fractal(_src) ? 1 : f_bot_fractal(_src) ? -1 : 0 //peak / valley value fractal_top1 = f_fractalize(histogram) > 0 ? true : false //histogram[2] : na fractal_bot1 = f_fractalize(histogram) < 0 ? true : false //histogram[2] : na //previouse peak or valley high_prev1 = ta.valuewhen(fractal_top1, histogram[2], 0)[2] high_price1 = ta.valuewhen(fractal_top1, high[2], 0)[2] low_prev1 = ta.valuewhen(fractal_bot1, histogram[2], 0)[2] low_price1 = ta.valuewhen(fractal_bot1, low[2], 0)[2] //Divergenc : cdma histogram against candle value regular_bearish_div1 = high[2] > high_price1 + divStren and histogram[2] < high_prev1 / divStren and ta.barssince(fractal_top1[1]) > divLength regular_bullish_div1 = low[2] < low_price1 - divStren and histogram[2] > low_prev1 / divStren and ta.barssince(fractal_bot1[1]) > divLength //-------------------------cdma Divergenc range------------------------------------------------ //histogramColor col1 = regular_bearish_div1 ? color.red : na col2 = regular_bullish_div1 ? #00FF00EB : na //plot plot(title='看跌背离', series= fractal_top1 ? histogram[2] : na, color=col1, linewidth=3, offset=DivOffset) plot(title='看涨背离', series= fractal_bot1 ? histogram[2] : na, color=col2, linewidth=3, offset=DivOffset) // calculate ATR -------------------------------------------------------------------------------------------------------------------------------------------------- atr = ta.ema(ta.tr(true), atrLength) * m up = atr + high dw = low - atr //stratety : enrty and exit--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- if regular_bearish_div1 and fractal_top1 //if regular_bullish_div1 and fractal_bot1 //label.new(bar_index, histogram[2], text = "Short", textcolor = color.white, color = color.gray, style = label.style_label_lower_left) strategy.entry("Short", strategy.short, qty = 1) strategy.exit("exitShort", "Short", stop = up, limit = dw - atr) if regular_bullish_div1 and fractal_bot1 //if regular_bearish_div1 and fractal_top1 //label.new(bar_index, histogram[2], text = "Long", textcolor = color.white, color = color.fuchsia, style = label.style_label_upper_left) strategy.entry("Long", strategy.long, qty = 1) strategy.exit("exitLong", "Long", stop = dw, limit = up + atr)