My indicator draws an arrow when the condition for drawing is false and I can't figure it out why, as it produces the following prints:
Swing Low = False | CB = 2617
Swing Low = False | CB = 2618
Swing Low = False | CB = 2619
More confusing, if I put the Print in the statement body after the Draw.Arrow, it doesn't get executed, so again, how does the arrow get drawn?
private void PriceSwingLow()
{
Print("Swing Low = " + ((Math.Round(Lows[0][0] - MIN(Lows[0], MinSpan)[1], 2) >= TickSize && Math.Round(MIN(Lows[0], MinSpan - 1)[2] - MIN(Lows[0], MinSpan)[1], 2) >= TickSize
&& CurrentBar - (CurrentBar - LowestBar(Lows[0], MinSpan + 1)) == 1)
|| (CurrentBar - flatLowPriceBar == 1 && Math.Round(Lows[0][0] - FlatLowPrice[w-1], 2) >= TickSize && Math.Round(Lows[0].GetValueAt(flatLowPriceBar - 1) - FlatLowPrice[w-1], 2) >= TickSize)) + " | CB = " + CurrentBar + "\r\n-");
if ((Math.Round(Lows[0][0] - MIN(Lows[0], MinSpan)[1], 2) >= TickSize && Math.Round(MIN(Lows[0], MinSpan - 1)[2] - MIN(Lows[0], MinSpan)[1], 2) >= TickSize
&& CurrentBar - (CurrentBar - LowestBar(Lows[0], MinSpan + 1)) == 1)
|| (CurrentBar - flatLowPriceBar == 1 && Math.Round(Lows[0][0] - FlatLowPrice[w-1], 2) >= TickSize && Math.Round(Lows[0].GetValueAt(flatLowPriceBar - 1) - FlatLowPrice[w-1], 2) >= TickSize))
{
Lprice.Add(MIN(Lows[0], MinSpan)[1]); // u
LpriceBar.Add(CurrentBar - LowestBar(Lows[0], MinSpan + 1)); // u
if (DrawArrows)
Draw.ArrowUp(this, "Swing Up" + " | L P = " + LpriceBar[u], true, CurrentBar - LpriceBar[u], Lprice[u] - 3 * TickSize, Brushes.White, true);
u++;
}
}
The code below produces the following prints:
Hprice.Count = 10 | HpriceBar[t-1] = 2619 | HpriceBar[t-2] = 2592 | Bar = 2620
Hprice.Count = 11 | HpriceBar[t-1] = 2625 | HpriceBar[t-2] = 2619 | Bar = 2626
As you can see, the script sees different values for HpriceBar[t-1] and HpriceBar[t-2] on Bar 2626, but when it draws the line, it takes equal values
private void NegativeDivergence()
{
if (Hprice.Count != listCountH)
{
if (b > 0 && HpriceBar[t-1] - HSwDMIbar[b-1] <= BarDiff /*&& HpriceBar[t-1] - HSwDMIbar[b-1] >= 0*/)
HSwDMIbarHP.Add(HSwDMIbar[b-1]); // f
else
HSwDMIbarHP.Add(HpriceBar[t-1]);
if (t > 1 && f > 0)
{
// Lower DMI Swing High and Higher Price
ND1 = Math.Round(Hprice[t-1] - Hprice[t-2], 2) >= 0 && Math.Round(DMI1.Values[0].GetValueAt(HSwDMIbarHP[f-1]) - DMI1.Values[0].GetValueAt(HSwDMIbarHP[f]), 2) > 0;
Print ("Hprice.Count = " + Hprice.Count + " | HpriceBar[t-1] = " + HpriceBar[t-1] + " | HpriceBar[t-2] = " + HpriceBar[t-2] + " | Bar = " + CurrentBar + "\r\n-");
if (!negDiv && ND1)
{
//PrintNegDiv();
negDiv = true; // NEG DIV = Reversal Down
if (ND1)
{
if (DrawPriceLine) // ###*** Line Start = Line End on 14.02.2020 / 10:50am ***###
Draw.Line(this, "Neg Div " + " / P S " + HpriceBar[t-2] + " / P E " + HpriceBar[t-1],
true, CurrentBar - HpriceBar[t-2], Hprice[t-2], CurrentBar - HpriceBar[t-1], Hprice[t-1], negDivColour, divDashStyle, 1, true);
if (DrawPriceLine)
Draw.Line(this, "DMI Neg Div " + " / Dmi S " + HSwDMIbarHP[f-1] + " / Dmi E " + HSwDMIbarHP[f],
true, CurrentBar - HSwDMIbarHP[f-1], DMI1.Values[0].GetValueAt(HSwDMIbarHP[f-1]), CurrentBar - HSwDMIbarHP[f], DMI1.Values[0].GetValueAt(HSwDMIbarHP[f]), negDivColour, divDashStyle, 1, false);

Comment