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.
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
Solutions aux risques: Optimiser les paramètres, ajuster la longueur de l'EMA, simplifier le flux de travail.
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)