// DMI ---------------------------------
len2 = input.int(12, minval=1, title="DI Length",group = "DMI")
plusDM2 = na(up2) ? na : (up2 > down2 and up2 > 0 ? up2 : 0)
minusDM2 = na(down2) ? na : (down2 > up2 and down2 > 0 ? down2 : 0)
trur2 = ta.rma(ta.tr, len2)
plus2 = fixnan(100 * ta.rma(plusDM2, len2) / trur2)
minus2 = fixnan(100 * ta.rma(minusDM2, len2) / trur2)
adx2 = 100 * ta.rma(math.abs(plus2 - minus2) / (sum2 == 0 ? 1 : sum2), lensig)
dmi_long = ((plus2 > adx2) and (adx2 > 20) and (plus2 > 20)) or (((adx2 > adx2[1]) and (adx2[1] > adx2[2])) and (plus2 > adx2) and (adx2 >20)) or ((ta.crossover(plus2, minus2) and adx2 > 40)) or ((adx2 > 30) and (minus2 < plus2) and (plus2 > 25))
dmi_up = ((plus2[0] > plus2[1]) and (plus2[0] > plus2[2]) and (plus2[0] > plus2[3])) and ((adx2 > adx2[1]) and (adx2[1] > adx2[2]) and (adx2[2] > adx2[3]))
dmi_cross_up = ta.crossover(plus2, minus2)
dmi_bottom = (adx2 > 55) and (minus2 > 40) and (plus2 <15) //or ((minus2 < 20) and (plus2 <20) and (adx2 < 35))
dmi_short = ((ta.crossover(minus2, plus2) and adx2 > 20)) or ((adx2 > 32) and (minus2 > plus2)) or ((minus2 > adx2) and (adx2 > 40) and (minus2 > 25)) or (((adx2 > adx2[1]) and (adx2[1] > adx2[2])) and (minus2 > adx2) and (adx2 > 25)) or ((minus2 > plus2) and (adx2 >30))
dmi_down = ((minus2[0] > minus2[1]) and (minus2[0] > minus2[2]) and (minus2[0] > minus2[3])) and ((adx2 > adx2[1]) and (adx2[1] > adx2[2]) and (adx2[2] > adx2[3]))
dmi_cross_down = ta.crossover(minus2, plus2)
dmi_top = (adx2 > 55) and (plus2 > 40) and (minus2 <15)
DMI_long = ta.crossover(plus2, minus2)
DMI_short = ta.crossover(minus2, plus2)
// DMI 2 ---------------------------------
lensig2 = input.int(35, title="ADX Smoothing", minval=1, maxval=50, group="DMI 2")
diLength = input.int(25, minval=1, title="DI Length", group="DMI 2")
dmiDown = -ta.change(low)
plusDM = na(dmiUp) ? na : (dmiUp > dmiDown and dmiUp > 0 ? dmiUp : 0)
minusDM = na(dmiDown) ? na : (dmiDown > dmiUp and dmiDown > 0 ? dmiDown : 0)
trur = ta.rma(ta.tr, diLength)
plus = fixnan(100 * ta.rma(plusDM, diLength) / trur)
minus = fixnan(100 * ta.rma(minusDM, diLength) / trur)
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig2)
DMI_long2 = minus > plus and adx < adx[1] and adx[1] > adx[2]
DMI_short2 = minus < plus and adx > adx[1] and adx[1] > adx[2