Esta estrategia integra múltiples indicadores técnicos como IMACD, EMA e Ichimoku para construir un modelo integral de árbol de decisiones para generar señales comerciales.
Signo largo: Cuando IMACD es un color específico y EMA 40 está por encima de la nube, ir largo
Cuando el IMACD está en rojo y la EMA 40 está por debajo del fondo de las nubes, corta
Soluciones de riesgo: Optimice la configuración de parámetros, ajuste la longitud de la EMA, simplifique el flujo de trabajo.
Esta estrategia identifica tendencias utilizando múltiples indicadores para construir un modelo de árbol de decisión para generar señales comerciales. Los pros son señales de alta calidad y precisas. Consiste en espacio para la optimización progresiva. Requiere enfoque en el ajuste de parámetros y el stop loss para controlar los riesgos para rendimientos constantes a largo plazo.
/*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)