
Esta estrategia utiliza un conjunto de indicadores técnicos, como el IMACD, el EMA y la tabla de equilibrio a primera vista, para construir un modelo de árbol de decisión integral para emitir señales de compra y venta.
Hacer más señales: Hacer más cuando el IMACD es de un color determinado y el EMA 40 es superior al de la imagen de la nube
Señales de vacío: vacío cuando el IMACD está en rojo y el EMA 40 está por debajo de la órbita de la nube
Solución de riesgos: optimización de la configuración de parámetros, ajuste de la longitud de la EMA, simplificación de los procesos de operación.
Esta estrategia utiliza una combinación de varios indicadores para identificar tendencias y construir un modelo de árbol de decisión para generar señales de negociación. La ventaja es que la calidad de la señal es alta, la precisión es alta y es adecuada para la optimización gradual. Se debe prestar atención a la optimización de parámetros y a las estrategias de stop loss para controlar el riesgo de negociación y obtener un rendimiento estable 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)