This street-smart stuff, where you identify overbought and oversold (supply and demand) and make up rules that you cannot sell in the “discount” area, is going to leave you with diddly squat for profits.

Being oversold means nothing. Knowing that the selling has embedded yields you the safest sell, where the market is virtually unable to move against your position, and can provide continuous returns.

Lots of surplus lines in the following code, I have not weeded it out fully just for this occasion, so forgive me for that.
#property copyright "Volatility Compression Failure by Macdulio, (c) 2026."#property link "http://www.forexfore.blog"#property indicator_chart_window#property indicator_buffers 3#property indicator_color1 Green#property indicator_color2 Redextern int lookback = 1000;double RSI2[], volup[], voldn[];int dir[], u30[], d30[];//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init() { IndicatorBuffers(3); //--- upper band SetIndexStyle(0,DRAW_LINE,0,3,indicator_color1); SetIndexBuffer(0,volup); SetIndexLabel(0,"Bands Upper");//--- lower band SetIndexStyle(1,DRAW_LINE,0,3,indicator_color2); SetIndexBuffer(1,voldn); SetIndexLabel(1,"Bands Lower"); return(0); }int start(){ ArrayResize(u30, Bars); ArrayInitialize(u30, 0); ArrayResize(d30, Bars); ArrayInitialize(d30, 0); ArrayResize(dir, Bars); ArrayInitialize(dir,0); ArrayResize(volup, Bars); ArrayInitialize(volup, EMPTY_VALUE); ArrayResize(voldn, Bars); ArrayInitialize(voldn, EMPTY_VALUE);int i;string symbol = Symbol();deletetxt1("Countess");deletetxt1("Singende");deletetxt1("KAROLY");deletetxt1("BOG");int counter, counterd; for (i=lookback-1; i>=0; i--) { dir[i]=dir[i+1]; if ((iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,6,i+1))-Close[i+1])>300*Point && !((iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,6,i+2))-Close[i+2])>300*Point) ){ ObjectCreate("BOG"+IntegerToString(i),OBJ_TEXT, 1, Time[i+1],35); ObjectSetText("BOG"+IntegerToString(i),"30!", 16, "Impact", clrBlack); d30[i]=1; if (dir[i]>0) dir[i]=0; } if ((Close[i+1]-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,6,i+1)))>300*Point && !((Close[i+2]-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,6,i+2)))>300*Point) ){ ObjectCreate("BOG"+IntegerToString(i),OBJ_TEXT, 1, Time[i+1],75); ObjectSetText("BOG"+IntegerToString(i),"30!", 16, "Impact", clrBlue); u30[i]=1; if (dir[i]<0) dir[i]=0; } if (High[i]-Low[i]>145*Point){ if (u30[i+10]>0 && Close[i]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i) && Close[i+1]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+1)) dir[i]=1; if (d30[i+10]>0 && Close[i]<iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i) && Close[i+1]<iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+1)) dir[i]=-1; if (u30[i+11]>0 && Close[i]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i) && Close[i+1]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+1)) dir[i]=1; if (d30[i+11]>0 && Close[i]<iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i) && Close[i+1]<iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+1)) dir[i]=-1; if (u30[i+12]>0 && Close[i]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i) && Close[i+1]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+1)) dir[i]=1; if (d30[i+12]>0 && Close[i]<iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i) && Close[i+1]<iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+1)) dir[i]=-1; } // if ((iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,5,i+1))-Close[i+1])>200*Point && dir[i]>0) dir[i]=0; // if ((Close[i+1]-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,5,i+1)))>200*Point && dir[i]<0) dir[i]=0; voldn[i]=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,5,i))+200*Point; volup[i]=iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,5,i))-200*Point; if (Close[i]<iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i) && Close[i]<voldn[i]) { ObjectCreate("KAROLYI"+IntegerToString(i), OBJ_RECTANGLE, 0, Time[i+1], voldn[i], Time[i], Low[i]); ObjectSetInteger(0,"KAROLYI"+IntegerToString(i),OBJPROP_COLOR,clrSalmon); ObjectSetInteger(0,"KAROLYI"+IntegerToString(i),OBJPROP_WIDTH,4); ObjectSetInteger(0,"KAROLYI"+IntegerToString(i),OBJPROP_BACK,1); } if (Close[i]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i) && Close[i]>volup[i]) { ObjectCreate("KAROLYI"+IntegerToString(i), OBJ_RECTANGLE, 0, Time[i+1], volup[i], Time[i], High[i]); ObjectSetInteger(0,"KAROLYI"+IntegerToString(i),OBJPROP_COLOR,clrChartreuse); ObjectSetInteger(0,"KAROLYI"+IntegerToString(i),OBJPROP_WIDTH,4); ObjectSetInteger(0,"KAROLYI"+IntegerToString(i),OBJPROP_BACK,1); } } for (i=600; i>=0; i--) { ObjectCreate("Singende"+DoubleToStr(i), OBJ_TEXT, 1, Time[i], 50); if (dir[i]>0) ObjectSetText("Singende"+DoubleToStr(i), CharToStr(110), 12, "Wingdings", clrMediumSpringGreen); if (dir[i]<0) ObjectSetText("Singende"+DoubleToStr(i), CharToStr(110), 12, "Wingdings", clrCrimson); if (dir[i]==0) ObjectSetText("Singende"+DoubleToStr(i), CharToStr(110), 12, "Wingdings", clrYellow); ObjectSetInteger(0,"Singende"+DoubleToStr(i),OBJPROP_BACK,1); } return(0); } void deletetxt1(string text){ for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--){ string on = ObjectName(iObj); if(StringFind(on, text) == 0) ObjectDelete(on);} }
The current market type is “no counter-directional volatility market”, in short, “no volatility”, which here means absolutely no buying that would achieve a 30+ pip close on the 30-minute chart for the latest low within 3 hours. If you are looking at the last row, you would see that there hasn’t been a print greater than 30 for 169 bars (85 hours).























































