
La stratégie consiste à calculer l’indicateur MACD et sa colonne MACD pour détecter les signaux de déviation entre la colonne MACD et le mouvement des prix, puis à générer des signaux de transaction. Lorsqu’un nouveau sommet est détecté mais que la colonne MACD ne crée pas de nouveau sommet, un signal de déviation haussier est généré. Lorsqu’un nouveau bas est détecté mais que la colonne MACD ne crée pas de nouveau bas, un signal de déviation haussier est généré.
Le principe central de la stratégie est d’utiliser l’indicateur MACD et sa colonne MACD comme un indicateur de la tendance des prix, pour détecter les signaux de déviation entre la colonne MACD et le prix, comme condition de déclenchement du signal de négociation.
Plus précisément, la stratégie commence par calculer la ligne MACD, la ligne de signal et la colonne MACD. Ensuite, en définissant une fonction fractal, on détecte le pic et la vallée de la colonne MACD, en extraisant les valeurs maximales et minimales locales. On combine ensuite les prix maximaux et minimaux pour déterminer s’il existe un écart entre la colonne MACD et le prix.
Un signal régulier de baisse de k_bearish_div est généré lorsque le prix a atteint un nouveau sommet, mais la colonne MACD n’a pas atteint un nouveau sommet; un signal régulier de baisse de k_bullish_div est généré lorsque le prix a atteint un nouveau bas, mais la colonne MACD n’a pas atteint un nouveau bas.
Finalement, la stratégie émet des ordres de faire court et de faire plus lorsque des signaux de retrait de la baisse et de retrait de la hausse sont émis, respectivement, et quitte la position avec un stop loss et un stop stop ATR.
Cette stratégie présente les avantages suivants:
Le décalage entre la colonne du MACD et le prix permet de saisir les changements de tendance des prix à l’avance.
Le Stop Loss Stop est un réglage raisonnable qui permet de contrôler efficacement la perte maximale d’une seule transaction.
Le suivi des tendances permet de maximiser les profits.
Les paramètres sont raisonnables et permettent de filtrer certains signaux de transaction bruyants.
La logique de la stratégie est claire et compréhensible, facile à vérifier sur le terrain.
Cette stratégie comporte aussi des risques:
Si le MACD s’écarte d’une tendance, cela n’entraînera pas nécessairement un renversement des prix, mais il existe un certain risque de faux signaux.
Un arrêt de perte déraisonnable peut entraîner des pertes excessives ou des bénéfices trop faibles.
Les déviations de la fréquence du signal peuvent être dues au bruit et doivent être filtrées de manière appropriée.
Les variétés de transactions et les paramètres qui ne correspondent pas peuvent également affecter l’efficacité de la stratégie.
La réponse:
Augmentation de la longueur et de la largeur requises pour filtrer les faux signaux.
Utilisez l’ATR comme indicateur de stop-loss et ajustez le multiplicateur de l’ATR pour contrôler le risque d’une seule transaction.
Sélectionnez différents paramètres pour différentes variétés de transactions. Optimisez les paramètres pour trouver la meilleure combinaison de paramètres.
La stratégie peut également être optimisée dans les directions suivantes:
Une confirmation de déviation plus complexe, telle que la confirmation de déviation de volume.
Optimiser les paramètres du MACD pour trouver la meilleure combinaison de paramètres
Optimiser le nombre de fois que l’arrêt de perte de l’ATR est arrêté.
L’ajout d’algorithmes d’apprentissage automatique pour aider à déterminer la fiabilité des signaux déviants.
Le prix de l’or est le prix de l’or, et le prix de l’or est le prix de l’or.
Adapter dynamiquement les paramètres stratégiques en fonction de l’évolution de l’environnement du marché.
Dans l’ensemble, l’indicateur MACD de la carte de BIDDAGO est éloigné de la stratégie de suivi de la tendance, en utilisant la caractéristique de l’écart entre la colonne du MACD et le prix, pour réaliser la capture de la tendance. Le paramètre de stop loss ATR est raisonnable et permet de contrôler le risque de transaction unique. La logique de la stratégie est claire et facile à comprendre et vaut la peine d’être vérifiée sur le terrain.
/*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)