The Jurik DMX indicator is an advanced tool used in technical analysis to measure the direction of market movement and the strength of a trend. Based on Jurik technology, developed by Jurik Research, known for its ability to reduce noise in market data, the Jurik DMX offers smoother and more accurate signals compared to other traditional indicators like the ADX (Average Directional Index). This article will explore how the Jurik DMX works, how to configure it, and how to interpret its signals within the context of the ProRealTime platform.
The Jurik DMX is an advanced version of the directional movement indicator (DMX), utilizing Jurik smoothing technology to provide a more accurate and less noisy measure of the direction and strength of a trend in financial markets. While the traditional ADX indicator can be prone to generating false signals due to market volatility, the Jurik DMX smooths out these fluctuations, allowing traders to more clearly identify true trends.
Jurik technology is especially valued for its ability to minimize signal lag while maintaining a high degree of responsiveness to market changes. This is achieved through advanced mathematical algorithms that dynamically adjust smoothing parameters according to market conditions.
Compared to other directional indicators, the Jurik DMX stands out for:
These benefits make the Jurik DMX a powerful tool for traders seeking to improve their trend analysis and reduce the likelihood of making decisions based on erroneous signals.
The Jurik DMX is an indicator that combines several advanced mathematical components to offer a precise measure of the market’s directional movement. Below is an explanation of the logic behind its calculation and the role of the main variables used in its code.
This focus on advanced smoothing allows the Jurik DMX to provide clear and reliable signals, reducing the influence of minor fluctuations and helping traders identify the real trends in the market.
The configuration of the Jurik DMX indicator is crucial for adapting it to different market conditions and trading styles. Below are the main parameters that can be adjusted, along with recommendations on how to optimize them for the best results.
With the proper configuration, the Jurik DMX indicator becomes a versatile tool that can adapt to various trading strategies, offering clear and reliable signals across a wide range of market conditions.
The Jurik DMX is a powerful indicator that can offer clear signals about the direction and strength of a trend. However, it is important to understand how to interpret these signals correctly to maximize their effectiveness in trading. Below are the main signals generated by the Jurik DMX and how to use them in the context of technical analysis.
The Jurik DMX can be even more powerful when combined with other technical indicators. Common approaches include:
The Jurik DMX is an advanced indicator that can provide a significant advantage in technical analysis due to its ability to smooth market data and reduce noise. Unlike other traditional directional indicators, the Jurik DMX uses advanced smoothing technology to offer more accurate and reliable signals, helping traders identify true trends and minimize the risk of false signals.
Proper configuration of the Jurik DMX is crucial for adapting it to different market conditions, whether used for intraday or long-term trading. Additionally, the correct interpretation of its signals, especially when combined with other indicators, can significantly enhance the accuracy and effectiveness of a trading strategy.
By implementing the Jurik DMX in ProRealTime, traders can benefit from a powerful tool that allows them to make informed and potentially more profitable decisions. With the flexibility to adapt to various strategies, this indicator is a valuable addition for any serious trader looking to improve their technical analysis.
Below is the complete code for the Jurik DMX indicator in ProBuilder. You can copy and paste this code directly into the ProRealTime platform and adjust the parameters as needed.
//PRC_Jurik DMX Histogram
//version = 0
//13.03.24
//Iván González @ www.prorealcode.com
//Sharing ProRealTime knowledge
/////////////////////////////////////////////////////////////////////
///inputs////////////////////////////////////
siglen = 5 // Signal Smoothing length
phs = 0 //Jurik Phase
len = 32 //Length
////////////////////////////////////////////
len = MAX(len, 1)
len1 = max(log(sqrt(0.5*(len-1)))/log(2)+2,0)
Pow1 = max(len1-2,0.5)
avglen = 65
//////PlusDM and MinusDM////////////////////
if barindex=0 then
up = high
down = high
else
up = high-high[1]
down = -(low-low[1])
endif
if up > down and up > 0 then
plusDM = up
else
plusDM = 0
endif
if down > up and down > 0 then
minusDM = down
else
minusDM = 0
endif
////////////////////////////////
//TRUR - JURIK AVERAGE
IF BarIndex < avglen+1 THEN
Filt0tr = tr
Filt1tr = tr
trur = tr
bsmaxtr = 0
bsmintr = 0
vsumtr = 0
avoltytr = 0
ELSE
del1tr = tr-bsmaxtr[1]
del2tr = tr-bsmintr[1]
div = 1/(10+10*(min(max(len-10,0),100))/100)
if abs(del1tr)>abs(del2tr) then
voltytr = abs(del1tr)
else
voltytr = abs(del2tr)
endif
vsumtr = vsumtr[1]+div*(voltytr-voltytr[10])
tempavgtr = average[avglen](vsumtr)
y= barindex+1
if (y <= avglen+1) then
avoltytr = avoltytr[1]+2*(vsumtr-avoltytr[1])/(avglen+1)
else
avoltytr = tempavgtr
endif
if avoltytr > 0 then
dvoltytr = voltytr/avoltytr
else
dvoltytr = 0
endif
if dvoltytr > pow(len1,1/pow1) then
dvoltytr = pow(len1,1/pow1)
else
dvoltytr = dvoltytr
endif
if dvoltytr < 1 then
dvoltytr= 1
else
dvoltytr = dvoltytr
endif
pow2tr = pow(dvoltytr,pow1)
len2 = sqrt(0.5*(len-1))*len1
kvtr = pow(len2/(len2+1),sqrt(pow2tr))
if del1tr > 0 then
bsmaxtr = tr
else
bsmaxtr = tr - kvtr*del1tr
endif
if del2tr < 0 then
bsmintr = tr
else
bsmintr = tr - kvtr*del2tr
endif
if phs < -100 then
phaseratio = 0.5
elsif phs > 100 then
phaseratio = 2.5
else
phaseratio =phs/100+1.5
endif
beta = 0.45 * (len - 1) / (0.45 * (len - 1) + 2)
alphatr = pow(beta,pow2tr)
Filt0tr = (1 - alphatr) * tr + alphatr * Filt0tr[1]
Det0tr = (tr - Filt0tr[0]) * (1 - beta) + beta * Det0tr[1]
Filt1tr = Filt0tr[0] + phaseratio * Det0tr[0]
Det1tr = (Filt1tr[0] - trur[1]) * ((1 - alphatr) * (1 - alphatr)) + (alphatr * alphatr) * Det1tr[1]
trur = trur[1] + Det1tr[0]
ENDIF
/////Plus
IF BarIndex < avglen+1 THEN
Filt0pl = 0
Filt1pl = 0
jurikPlus = 0
bsmaxpl = 0
bsminpl = 0
vsumpl = 0
avoltypl = 0
ELSE
del1pl = plusDM-bsmaxpl[1]
del2pl = plusDM-bsminpl[1]
div = 1/(10+10*(min(max(len-10,0),100))/100)
if abs(del1pl)>abs(del2pl) then
voltypl = abs(del1pl)
else
voltypl = abs(del2pl)
endif
vsumpl = vsumpl[1]+div*(voltypl-voltypl[10])
tempavgpl = average[avglen](vsumpl)
y= barindex+1
if (y <= avglen+1) then
avoltypl = avoltypl[1]+2*(vsumpl-avoltypl[1])/(avglen+1)
else
avoltypl = tempavgpl
endif
if avoltypl > 0 then
dvoltypl = voltypl/avoltypl
else
dvoltypl = 0
endif
if dvoltypl > pow(len1,1/pow1) then
dvoltypl = pow(len1,1/pow1)
else
dvoltypl = dvoltypl
endif
if dvoltypl < 1 then
dvoltypl= 1
else
dvoltypl = dvoltypl
endif
pow2pl = pow(dvoltypl,pow1)
len2 = sqrt(0.5*(len-1))*len1
kvpl = pow(len2/(len2+1),sqrt(pow2pl))
if del1pl > 0 then
bsmaxpl = plusDM
else
bsmaxpl = plusDM - kvpl*del1pl
endif
if del2pl < 0 then
bsminpl = plusDM
else
bsminpl = plusDM - kvpl*del2pl
endif
if phs < -100 then
phaseratio = 0.5
elsif phs > 100 then
phaseratio = 2.5
else
phaseratio =phs/100+1.5
endif
beta = 0.45 * (len - 1) / (0.45 * (len - 1) + 2)
alphapl = pow(beta,pow2pl)
Filt0pl = (1 - alphapl) * plusDM + alphapl * Filt0pl[1]
Det0pl = (plusDM - Filt0pl[0]) * (1 - beta) + beta * Det0pl[1]
Filt1pl = Filt0pl[0] + phaseratio * Det0pl[0]
Det1pl = (Filt1pl[0] - jurikPlus[1]) * ((1 - alphapl) * (1 - alphapl)) + (alphapl * alphapl) * Det1pl[1]
jurikPlus = jurikPlus[1] + Det1pl[0]
ENDIF
plus = (100*jurikPlus/trur)
///////////////////////////////////////////////
/////minus
IF BarIndex < avglen+1 THEN
Filt0mn = 0
Filt1mn = 0
jurikMinus = 0
bsmaxmn = 0
bsminmn = 0
vsummn = 0
avoltymn = 0
ELSE
del1mn = minusDM-bsmaxmn[1]
del2mn = minusDM-bsminmn[1]
div = 1/(10+10*(min(max(len-10,0),100))/100)
if abs(del1mn)>abs(del2mn) then
voltymn = abs(del1mn)
else
voltymn = abs(del2mn)
endif
vsummn = vsummn[1]+div*(voltymn-voltymn[10])
tempavgmn = average[avglen](vsummn)
y= barindex+1
if (y <= avglen+1) then
avoltymn = avoltymn[1]+2*(vsummn-avoltymn[1])/(avglen+1)
else
avoltymn = tempavgmn
endif
if avoltymn > 0 then
dvoltymn = voltymn/avoltymn
else
dvoltymn = 0
endif
if dvoltymn > pow(len1,1/pow1) then
dvoltymn = pow(len1,1/pow1)
else
dvoltymn = dvoltymn
endif
if dvoltymn < 1 then
dvoltymn= 1
else
dvoltymn = dvoltymn
endif
pow2mn = pow(dvoltymn,pow1)
len2 = sqrt(0.5*(len-1))*len1
kvmn = pow(len2/(len2+1),sqrt(pow2mn))
if del1mn > 0 then
bsmaxmn = minusDM
else
bsmaxmn = minusDM - kvmn*del1mn
endif
if del2mn < 0 then
bsminmn = minusDM
else
bsminmn = minusDM - kvmn*del2mn
endif
if phs < -100 then
phaseratio = 0.5
elsif phs > 100 then
phaseratio = 2.5
else
phaseratio =phs/100+1.5
endif
beta = 0.45 * (len - 1) / (0.45 * (len - 1) + 2)
alphamn = pow(beta,pow2mn)
Filt0mn = (1 - alphamn) * minusDM + alphamn * Filt0mn[1]
Det0mn = (minusDM - Filt0mn[0]) * (1 - beta) + beta * Det0mn[1]
Filt1mn = Filt0mn[0] + phaseratio * Det0mn[0]
Det1mn = (Filt1mn[0] - jurikMinus[1]) * ((1 - alphamn) * (1 - alphamn)) + (alphamn * alphamn) * Det1mn[1]
jurikMinus = jurikMinus[1] + Det1mn[0]
ENDIF
minus = 100*jurikMinus/trur
/////////////////////////////////////////////////////////////
////////Trigger
trigger = plus-minus
///////////////////////////////////////////////////////////
///////signal
siglen = MAX(siglen, 1)
len1 = max(log(sqrt(0.5*(siglen-1)))/log(2)+2,0)
Pow1 = max(len1-2,0.5)
avglen = 65
IF BarIndex < avglen+1 THEN
Filt0 = 0
Filt1 = 0
signal = 0
bsmax = 0
bsmin = 0
vsum = 0
avolty = 0
ELSE
del1 = trigger-bsmax[1]
del2 = trigger-bsmin[1]
div = 1/(10+10*(min(max(siglen-10,0),100))/100)
if abs(del1)>abs(del2) then
volty = abs(del1)
else
volty = abs(del2)
endif
vsum = vsum[1]+div*(volty-volty[10])
tempavg = average[avglen](vsum)
y= barindex+1
if (y <= avglen+1) then
avolty = avolty[1]+2*(vsum-avolty[1])/(avglen+1)
else
avolty = tempavg
endif
if avolty > 0 then
dvolty = volty/avolty
else
dvolty = 0
endif
if dvolty > pow(len1,1/pow1) then
dvolty = pow(len1,1/pow1)
else
dvolty = dvolty
endif
if dvolty < 1 then
dvolty= 1
else
dvolty = dvolty
endif
pow2 = pow(dvolty,pow1)
len2 = sqrt(0.5*(siglen-1))*len1
kv = pow(len2/(len2+1),sqrt(pow2))
if del1 > 0 then
bsmax = trigger
else
bsmax = trigger - kv*del1
endif
if del2 < 0 then
bsmin = trigger
else
bsmin = trigger - kv*del2
endif
if phs < -100 then
phaseratio = 0.5
elsif phs > 100 then
phaseratio = 2.5
else
phaseratio =phs/100+1.5
endif
beta = 0.45 * (siglen - 1) / (0.45 * (siglen - 1) + 2)
alpha = pow(beta,pow2)
Filt0 = (1 - alpha) * trigger + alpha * Filt0[1]
Det0 = (trigger - Filt0[0]) * (1 - beta) + beta * Det0[1]
Filt1 = Filt0[0] + phaseratio * Det0[0]
Det1 = (Filt1[0] - signal[1]) * ((1 - alpha) * (1 - alpha)) + (alpha * alpha) * Det1[1]
signal = signal[1] + Det1[0]
ENDIF
/////////////////////////////////////////////////////
/////color
if trigger >=0 and trigger>=signal then
r=0
g=120
elsif trigger >=0 and trigger<signal then
r=0
g=255
elsif trigger <0 and trigger<signal then
r=120
g=0
else
r=255
g=0
endif
return trigger as "Histo DMX"coloured(r,g,0)style(histogram),trigger as "DMX" style(line), signal as "Signal"coloured("white")style(line,2)