oldyoungguy
Member
I don't know why the last downward arrow is there in the DMI_Oscillator indicator. There shouldn't be anything there. Because the process doesn't get there yet. I mean that place is the "future", not right now, not in the past. You can see there are no bar and MA lines in that timeline. The upward arrow never goes ahead of time. Only the downward arrow goes ahead of the time.
If you copy and paste the code, you can reproduce it. It will happen when red bars with an upward arrow exist. You can use a shorter timeframe chart to easily reproduce it.
If you copy and paste the code, you can reproduce it. It will happen when red bars with an upward arrow exist. You can use a shorter timeframe chart to easily reproduce it.
Code:
declare lower;
input length = 5;#10;
input paintBars = yes;
input averageType = AverageType.WILDERS;
def diPlus = DMI(length, averageType)."DI+";
def diMinus = DMI(length, averageType)."DI-";
plot Osc = diPlus - diMinus;
plot Hist = Osc;
plot ZeroLine = 0;
Osc.SetDefaultColor(GetColor(1));
Hist.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
Hist.SetLineWeight(3);
Hist.DefineColor("Positive", Color.UPTICK);
Hist.DefineColor("Negative", Color.DOWNTICK);
Hist.AssignValueColor(if Hist > 0 then Hist.Color("Positive") else Hist.Color("Negative"));
Hist.HideTitle();
ZeroLine.SetDefaultColor(Color.GRAY);
DefineGlobalColor("Positive", Color.UPTICK);
DefineGlobalColor("Negative", Color.DOWNTICK);
AssignPriceColor(if !paintBars
then Color.CURRENT
else if Osc > 0
then GlobalColor("Positive")
else GlobalColor("Negative"));
###################### above is copied from the TOS DMI_Oscillator study. follings are added.
input showReversalSignal = yes;
def isUp;
def isDown;
def isAboveZeroLine;
def isOnZeroLine;
if(Osc >= ZeroLine)
{
isAboveZeroLine = yes;
isOnZeroLine = no;
}
else if(Osc == ZeroLine)
{
isOnZeroLine = yes;
isAboveZeroLine = no;
}
else
{
isAboveZeroLine = no;
isOnZeroLine = no;
}
##########
if(isAboveZeroLine)
{
if(Hist > Hist[1])
{
isUp = yes;
isDown = no;
}
else if(Hist == Hist[1])
{
isUp = isUp[1];
isDown = isDown[1];
}
else
{
isUp = no;
isDown = yes;
}
}
else if(isOnZeroLine)
{
isUp = no;
isDown = no;
}
else
{
if(Hist > Hist[1])
{
isUp = yes;
isDown = no;
}
else if(Hist == Hist[1])
{
isUp = isUp[1];
isDown = isDown[1];
}
else
{
isUp = no;
isDown = yes;
}
}
plot UpSignal = if (isUp && !isUp[1]) then if (isAboveZeroLine) then ZeroLine else Osc else Double.NaN;
plot DownSignal = if (isDown && !isDown[1]) then if (!isAboveZeroLine) then ZeroLine else Osc else Double.NaN;
def color=8;
UpSignal.SetHiding(!showReversalSignal);
DownSignal.SetHiding(!showReversalSignal);
UpSignal.SetDefaultColor(getColor(color));#Color.UPTICK);
UpSignal.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
DownSignal.SetDefaultColor(getColor(color));#Color.DOWNTICK);
DownSignal.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);