How would you know that this Wave 3 up is over, and you are in a Wave 4 correction?

The answer is Fractal Evaluation.

You need a Fractal outside the 30-sample BB and then count to 4 and look at the location of that candle relative to the BB and the 8 EMO.

The following 2 pictures show N (meaning Neutral with a Green tinge for being above the 9D EMA). The three quarters is a reminder that even during questionable times there should be a move 3/4 way up to the upper BB as a relatively safe exit.

The last example is how Wave 2 down behaved.

The N¾ had its move to 3/4 ways and even poked out above the upper BB before another leg down which pierced below the municipal trench (E207L). The swing low in front of the N was violated.

Then, there was a Green arrow up – fractal evaluation.

//// fractal + 4 evaluator downside
if (Low[i+4]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+4) && iFractals(symbol,0,MODE_LOWER,i+4) && (iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)-iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i))>400*Point)
{
    ObjectCreate("HOT"+i,OBJ_TEXT, 0, Time[i],Low[i]-90*Point);
    ObjectSetText("HOT"+i,"N-¾", 26, "Impact", clrGreen);
    if (Low[i]<iMA(symbol,0,356,0,MODE_SMA,PRICE_MEDIAN,i))       ObjectSetText("HOT"+i,"N-¾", 16, "Impact", clrMagenta);
  
    if (High[i]<iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i) && Open[i]>Close[i]) ObjectSetText("HOT"+i,CharToStr(234), 26, "Wingdings", clrRed);
     if (Close[i]>iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i)-20*Point && Open[i]<Close[i] && ExtATRBuffer2[i]>25 && (ExtATRBuffer2[i]<41 || ExtATRBuffer2[i]>110)) ObjectSetText("HOT"+i,CharToStr(233), 26, "Wingdings", clrGreen);  
}