#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 Red
extern 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);
} }