An indicator used in technical analysis that determines the overbought and oversold conditions of a particular asset. This indicator is very similar to the Relative Strength Index (RSI). The main difference between the two is that the RSI uses a fixed number of time periods (usually 14), while the Dynamic Momentum Index uses different time periods as volatility changes.
This indicator is interpreted in the same manner as the RSI where the readings below 30 are deemed to be oversold and more than 70 levels are deemed to be overbought. The number of time periods used in the dynamic momentum index decreases as the volatility of the underlying asset increases, making this indicator more sensitive to price changes than the RSI. This version has an additional smoothing in an RSX usage form for calculating the original RSI pitch. It has been added to make it a little more readable. The DMI Chande is less smooth than this original version and can raise more false signals. Using the RSX instead of RSI not add any lag at all, so we can say that using an RSX instead of RSI could be classified as “1% improvement” rule – which is sure it not be worse than the original Chande’s DMI.
(description found on internet). Indicator translated from Metatrader5 version by a request in forum.
Settings explanation:
_ MAStdDevMode : moving average type for smoothing the ATR value used to get the volatility of the current instrument
_ DmiLowerLimit & DmiUpperLimit : bounds for DMI periods (DMI calculated period can’t be less or more than these 2 limits)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
//PRC_DMI of RSX | indicator //31.01.18 //Nicolas @ www.prorealcode.com //Sharing ProRealTime knowledge //translated from MT5 code //https://www.prorealcode.com/topic/tushar-chandes-dmi-conversion-code-mq5-to-prorealtime/ // --- settings StdDevPeriod = 5 // Period of Standard Deviation MAStdDevPeriod = 8 // Period of smoothing MAStdDevMode = 0 // Mode of smoothing MA DMIPeriod = 15 // Dynamic Momentum Index Period DmiLowerLimit = 10 // Dynamic Periods Lower Bound DmiUpperLimit = 50 // Dynamic Periods Upper Bound LevelUp = 60 // Lower level LevelDown = 40 // Upper level // --- end of settings if barindex>DMIperiod then SD = STD[StdDevPeriod](customclose) ASD = Average[MAStdDevPeriod,MAStdDevMode](SD) RSIterm = max(1,ROUND(DMIPeriod / (SD/ASD))) RSIterm = Max(Min(RSIterm,DmiUpperLimit),DmiLowerLimit) //RSI calculation plus = summation[max(1,round(RSIterm))](customclose-customclose[1]>0) minus = summation[max(1,round(RSIterm))](customclose-customclose[1]<0) //plus pow = 1 per = RSIterm if barindex>per then beta = 0.45*(per-1)/(0.45*(per-1)+2) if pow=1 then alpha = beta elsif pow=2 then alpha = beta*beta elsif pow=3 then alpha = beta*beta*beta elsif pow=4 then alpha = beta*beta*beta*beta elsif pow=5 then alpha = beta*beta*beta*beta*beta else alpha = beta endif tmp0 = (1-alpha)*plus + alpha*tmp0[1] tmp1 = (plus - tmp0[0])*(1-beta) + beta*tmp1[1] tmp2 = tmp0[0] + tmp1[0] tmp3 = (tmp2[0] - tmp4[1])*((1-alpha)*(1-alpha)) + (alpha*alpha)*tmp3[1] tmp4 = tmp4[1] + tmp3[0] avgplus = tmp4 ftmp0 = (1-alpha)*minus + alpha*ftmp0[1] ftmp1 = (minus - ftmp0[0])*(1-beta) + beta*ftmp1[1] ftmp2 = ftmp0[0] + ftmp1[0] ftmp3 = (ftmp2[0] - ftmp4[1])*((1-alpha)*(1-alpha)) + (alpha*alpha)*ftmp3[1] ftmp4 = ftmp4[1] + ftmp3[0] avgminus = ftmp4 endif RS = avgplus/avgminus DMIRSX = 100 - 100 / ( 1 + RS ) r=100 g=100 b=100 if DMIRSX>LevelUp then r=0 g=255 b=0 elsif DMIRSX<LevelDown then r=255 g=185 b=15 endif endif return DMIRSX coloured(r,g,b) style(line,3) as "Dynamic Momentum Index", levelup coloured(100,100,100) style(dottedline) as "level up", leveldown coloured(100,100,100) style(dottedline) as "level down" |
Share this
No information on this site is investment advice or a solicitation to buy or sell any financial instrument. Past performance is not indicative of future results. Trading may expose you to risk of loss greater than your deposits and is only suitable for experienced investors who have sufficient financial means to bear such risk.
ProRealTime ITF files and other attachments :PRC is also on YouTube, subscribe to our channel for exclusive content and tutorials
Bonjour, merci pour l’indicateur, j’utilise un RSI de 7 période, sur du 1 min, est’il possible de changer sa base de période ? si oui comment faire ? merci encore j’avais pas pensé que le RSI pouvait avoir du retard !
Changer la base de périodes du RSI original ? Le RSI a du “retard” puisqu’il est toujours nécessaire d’évaluer le terrain (et donc de regarder le passé) pour donner l’information sur la bougie courante.
merci, je voulais savoir quel paramètre il faut modifier sur votre indicateur pour le modifier sur la période 7 de votre indicateur
Cet indicateur est dynamique, il n’utilise pas de période fixe
Bonjour Nicolas,
Lorsque j’importe l’indicateur via l’itf et que je l’attache au graphique, il apparait ce message “Erreur dans l’indicateur : PRC_DMI of RSX (5 8 0 15 10 50 60 40) — Un parametre de type entier positif est attendu avec SUMMATION”.
Pourrais-tu m’eclairer à ce sujet stp ?
Je suis sur la v11 de prt.
Merci à toi,
Cordialement,
Romain
Dans ce cas, il faut changer les lignes qui comportent l’instruction SUMMATION comme ceci: summation[max(1,RSIterm)]
Bonjour Nicolas, je suis desolé mais cela ne fonctionne toujours pas …
Merci de ton retour
Hello Nicholas
Is it possible to attach a revised code?
I tried to change according to your instructions but the indicator is not working yet.
Thanks in advance for your help
Alex
PFA below a revised version:
//PRC_DMI of RSX | indicator
//31.01.18
//Nicolas @ http://www.prorealcode.com
//Sharing ProRealTime knowledge
//translated from MT5 code
//https://www.prorealcode.com/topic/tushar-chandes-dmi-conversion-code-mq5-to-prorealtime/
// — settings
StdDevPeriod = 5 // Period of Standard Deviation
MAStdDevPeriod = 8 // Period of smoothing
MAStdDevMode = 0 // Mode of smoothing MA
DMIPeriod = 15 // Dynamic Momentum Index Period
DmiLowerLimit = 10 // Dynamic Periods Lower Bound
DmiUpperLimit = 50 // Dynamic Periods Upper Bound
LevelUp = 60 // Lower level
LevelDown = 40 // Upper level
// — end of settings
if barindex>DMIperiod then
SD = STD[StdDevPeriod](customclose)
ASD = Average[MAStdDevPeriod,MAStdDevMode](SD)
RSIterm = max(1,ROUND(DMIPeriod / (SD/ASD)))
RSIterm = Max(Min(RSIterm,DmiUpperLimit),DmiLowerLimit)
//RSI calculation
plus = summation[max(1,round(RSIterm))](customclose-customclose[1]>0)
minus = summation[max(1,round(RSIterm))](customclose-customclose[1]per then
beta = 0.45*(per-1)/(0.45*(per-1)+2)
if pow=1 then
alpha = beta
elsif pow=2 then
alpha = beta*beta
elsif pow=3 then
alpha = beta*beta*beta
elsif pow=4 then
alpha = beta*beta*beta*beta
elsif pow=5 then
alpha = beta*beta*beta*beta*beta
else
alpha = beta
endif
tmp0 = (1-alpha)*plus + alpha*tmp0[1]
tmp1 = (plus – tmp0[0])*(1-beta) + beta*tmp1[1]
tmp2 = tmp0[0] + tmp1[0]
tmp3 = (tmp2[0] – tmp4[1])*((1-alpha)*(1-alpha)) + (alpha*alpha)*tmp3[1]
tmp4 = tmp4[1] + tmp3[0]
avgplus = tmp4
ftmp0 = (1-alpha)*minus + alpha*ftmp0[1]
ftmp1 = (minus – ftmp0[0])*(1-beta) + beta*ftmp1[1]
ftmp2 = ftmp0[0] + ftmp1[0]
ftmp3 = (ftmp2[0] – ftmp4[1])*((1-alpha)*(1-alpha)) + (alpha*alpha)*ftmp3[1]
ftmp4 = ftmp4[1] + ftmp3[0]
avgminus = ftmp4
endif
RS = avgplus/avgminus
DMIRSX = 100 – 100 / ( 1 + RS )
r=100
g=100
b=100
if DMIRSX>LevelUp then
r=0
g=255
b=0
elsif DMIRSX<LevelDown then
r=255
g=185
b=15
endif
endif
return DMIRSX coloured(r,g,b) style(line,3) as "Dynamic Momentum Index", levelup coloured(100,100,100) style(dottedline) as "level up", leveldown coloured(100,100,100) style(dottedline) as "level down"
Thanks Nicolas
Still a problem in line 29
Please take a look.
thanks again
Alex
code is modified in the above post, use that one.
Still a problem in line 29
Please take a look.
thanks again
Alex