Here’s what happened:
The downside Echo’s doji received a back test.

There was an extra high energy level reached allowing for an oversized move beyond W3D which was at 1.1088 at the time.
There was a kiss exchange between the red and green volatility lines, but overall the compression receiving side remains the downside (meaning the market is going higher).
Just like I never understand when people talk about a “structure”, I don’t ever understand when they refer to a “buy/sell setup”. Don’t even get me started on “generating money”.
I understand things when I can write binary filters for something.
Yes, I would call an M & M-expansionary sequence a buy / sell setup but only because I have tangible proof for increasing directional volatility with an expectation of a break out with a kickback zone of typically 12 pips to accumulate in and add the remainder fancied size upon the violation of the E-M.

The directional volatility has to stop expanding for a wave to end. On the way up the pullbacks are greater than usual, but the directional volatility has not stopped expanding yet.
It is sheer luck to be born in this era when people are enabled by AI.
I made this entire album with all of its contents in 3 days. Not because I was rushed by anything, but I was in a creative enough mode to make 16 new tracks.

if ((Open[i]<Close[i] || Open[i+1]<Open[i+1]) && Low[i]<iMA(symbol,0,8,0,MODE_EMA,PRICE_MEDIAN,i)) {
if (Low[i+1]<Low[i] && Open[i+1]>Close[i+1]) ObjectCreate("Citera"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], Low[i+1]-20*Point);
else ObjectCreate("Citera"+IntegerToString(i), OBJ_TEXT, 0, Time[i], Low[i]-20*Point);
if ((iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,2,i+1))-Low[i])*10000<3.2) ObjectSetText("Citera"+IntegerToString(i), NormalizeDouble((iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,2,i+1))-Low[i])*10000,2), 17, "Impact", Green);
else ObjectSetText("Citera"+IntegerToString(i), NormalizeDouble((iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,2,i+1))-Low[i])*10000,2), 11, "Impact", Navy);
if (High[i+3]-Low[i+3]>220*Point && Low[i+3]<iBands(symbol,0,60,2,0,PRICE_MEDIAN,MODE_UPPER,i+3)) ObjectSetText("Citera"+IntegerToString(i), " "+NormalizeDouble((iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,2,i+1))-Low[i])*10000,2)+" BUY", 11, "Impact", Black);
}
if ((Open[i]>Close[i] || Open[i+1]>Open[i+1]) && High[i]>iMA(symbol,0,8,0,MODE_EMA,PRICE_MEDIAN,i)) {
if (High[i+1]>High[i] && Open[i+1]<Close[i+1]) ObjectCreate("Citera"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], High[i+1]+35*Point);
else
ObjectCreate("Citera"+IntegerToString(i), OBJ_TEXT, 0, Time[i], High[i]+35*Point);
if ((High[i]-(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,2,i+1))))*10000<3.2)
ObjectSetText("Citera"+IntegerToString(i), NormalizeDouble((High[i]-(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,2,i+1))))*10000,2), 18, "Impact", Red);
else ObjectSetText("Citera"+IntegerToString(i), NormalizeDouble((High[i]-(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,2,i+1))))*10000,2), 11, "Impact", Brown);
if (High[i+3]-Low[i+3]>220*Point) ObjectSetText("Citera"+IntegerToString(i), " "+NormalizeDouble((High[i]-(iLow(symbol,0,iLowest(symbol,0,MODE_LOW,2,i+1))))*10000,2)+" SELL", 11, "Impact", Black);
}