Stratégie d'arbre de décision à indicateurs multiples: IMACD, EMA et Ichimoku

Auteur:ChaoZhang est là., Date: 2024-01-22 11h25 et 56 min
Les étiquettes:

img

Résumé

Cette stratégie intègre plusieurs indicateurs techniques tels que IMACD, EMA et Ichimoku pour construire un modèle complet d'arbre de décision pour générer des signaux de trading.

La logique de la stratégie

  1. IMACD: MACD amélioré pour mieux saisir les tendances du marché via ImpulseMACD et ImpulseHisto
  2. Ichimoku: Tracez la ligne de conversion, la ligne de base, la portée principale A, la portée principale B pour identifier les niveaux de support et de résistance
  3. EMA 40: Aider à déterminer la direction de la tendance
  4. Les signaux long/court sont déclenchés en fonction de conditions spécifiques entre l'IMACD, les composants cloud et l'EMA 40

Signal long: Lorsque l'IMACD est une couleur spécifique et que l'EMA 40 est au-dessus du sommet des nuages, passez long

Signal court: lorsque l'IMACD est rouge et que l'EMA 40 est en dessous du bas des nuages, passez court

Analyse des avantages

  1. La combinaison de plusieurs indicateurs améliore la précision du jugement de la tendance
  2. Une classification claire du modèle d'arbre de décision génère des signaux de négociation sans ambiguïté
  3. Longueur EMA flexible pour une meilleure aide à la détermination des tendances
  4. Identifier mieux les niveaux de support et de résistance avec des indicateurs de nuage et de tendance

Analyse des risques

  1. Réglage complexe des paramètres avec plusieurs indicateurs
  2. Des signaux erronés peuvent être déclenchés par une longueur EMA incorrecte
  3. Difficulté à surveiller plusieurs indicateurs simultanément

Solutions aux risques: Optimiser les paramètres, ajuster la longueur de l'EMA, simplifier le flux de travail.

Directions d'optimisation

  1. Améliorer la stabilité en optimisant les paramètres
  2. Limiter les pertes avec des stratégies de stop loss
  3. Améliorer la qualité du signal par le backtesting avec des données massives
  4. Construire un modèle d'arbre de décision adaptatif avec l'apprentissage automatique

Résumé

Cette stratégie identifie les tendances en utilisant plusieurs indicateurs pour construire un modèle d'arbre de décision pour générer des signaux de trading.


/*backtest
start: 2024-01-14 00:00:00
end: 2024-01-21 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Decision Tree Strategy: IMACD, EMA and Ichimoku [cryptoonchain]", overlay=true)

lengthMA = input(34, title="Length MA")
lengthSignal = input(9, title="Length Signal")
conversionPeriods = input.int(9, minval=1, title="Conversion Line Length")
basePeriods = input.int(26, minval=1, title="Base Line Length")
laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length")
displacement = input.int(26, minval=1, title="Lagging Span")
emaLength = input(40, title="EMA Length")  // Added user-configurable EMA length

calc_smma(src, len) =>
    smma = float(na)
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

calc_zlema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    d = ema1 - ema2
    ema1 + d

src = ohlc4
hi = calc_smma(high, lengthMA)
lo = calc_smma(low, lengthMA)
mi = calc_zlema(src, lengthMA)

md = (mi > hi) ? (mi - hi) : (mi < lo) ? (mi - lo) : 0
sb = ta.sma(md, lengthSignal)
sh = md - sb
mdc = src > mi ? (src > hi ? color.rgb(128, 255, 0, 26) : color.green) : (src < lo ? color.red : color.orange)

colorCondition = color.rgb(128, 255, 0, 26)

conversionLine = math.avg(ta.lowest(conversionPeriods), ta.highest(conversionPeriods))
baseLine = math.avg(ta.lowest(basePeriods), ta.highest(basePeriods))
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = math.avg(ta.lowest(laggingSpan2Periods), ta.highest(laggingSpan2Periods))

// Use user-configurable length for EMA
ema40 = ta.ema(close, emaLength)

ebc = input(false, title="Enable bar colors")
barcolor(ebc ? mdc : na)

conversionLinePlot = plot(conversionLine, color=#2962FF, title="Conversion Line", display=display.none)
baseLinePlot = plot(baseLine, color=#B71C1C, title="Base Line", display=display.none)
laggingSpanPlot = plot(close, offset=-displacement + 1, color=#43A047, title="Lagging Span", display=display.none)
leadLine1Plot = plot(leadLine1, offset=displacement - 1, color=#A5D6A7, title="Leading Span A", display=display.none)
leadLine2Plot = plot(leadLine2, offset=displacement - 1, color=#EF9A9A, title="Leading Span B", display=display.none)
kumoCloudUpperLinePlot = plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, offset=displacement - 1, title="Kumo Cloud Upper Line", display=display.none)
kumoCloudLowerLinePlot = plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, offset=displacement - 1, title="Kumo Cloud Lower Line", display=display.none)
fill(kumoCloudUpperLinePlot, kumoCloudLowerLinePlot, color=leadLine1 > leadLine2 ? color.green : color.red)

a = (leadLine1 > leadLine2 ? leadLine1 : leadLine2) 
b = (leadLine1 < leadLine2 ? leadLine1 : leadLine2)  

if mdc == colorCondition and ema40 > a[displacement - 1]
    strategy.entry("Long", strategy.long)

if mdc == color.red and ema40 < b[displacement - 1]
    strategy.entry("Short", strategy.short)


Plus de