Not sure if this is going to change in the future, but it certainly seems to be true for now on EurUsd.
The strong/sustained rallies seem to have a pacing of approximately 165 pips.
This single piece of information implies a great many things, for instance, that you should expect any move up to cap out at 155-175 pips unless there is an arrow giving away that you could see 2x or 3x of that metric.

Yes, the ugly colored lines are intentionally 20 pips wide. The blue arrows point at the highs of the green arrow days for the long trip to be made actual.
#property copyright "Daily Grid by Macdulio, (c) 2026."#property link "http://www.forexfore.blog"#property indicator_chart_window#property indicator_buffers 3#property indicator_color1 Tan extern int lookback = 1000;double MFI[];double st18[], RSI2[], volup[], voldn[];double cls[], cls2[], df[], ds[], dt[];int gridadjust[];int dir[];bool c77[];//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init() { IndicatorBuffers(3); SetIndexStyle(0,DRAW_LINE,0,23,indicator_color1); SetIndexBuffer(0,df); SetIndexStyle(1,DRAW_LINE,0,23,indicator_color1); SetIndexBuffer(1,ds); SetIndexStyle(2,DRAW_LINE,0,23,indicator_color1); SetIndexBuffer(2,dt); return(0); }int start(){ ArrayResize(df, Bars); ArrayInitialize(df, 100); ArrayResize(ds, Bars); ArrayInitialize(ds, 100); ArrayResize(dt, Bars); ArrayInitialize(dt, 100); ArrayResize(gridadjust, Bars); ArrayInitialize(gridadjust,0); ArrayResize(dir, Bars); ArrayInitialize(dir,0); ArrayResize(RSI2, Bars); ArrayInitialize(RSI2, EMPTY_VALUE); ArrayResize(MFI, Bars); ArrayInitialize(MFI, EMPTY_VALUE); ArrayResize(c77, Bars); ArrayInitialize(c77, false); ArrayResize(volup, Bars); ArrayInitialize(volup, EMPTY_VALUE); ArrayResize(st18, Bars); ArrayInitialize(st18, EMPTY_VALUE);ArrayResize(voldn, Bars); ArrayInitialize(voldn, EMPTY_VALUE);ArrayResize(cls, Bars); ArrayInitialize(cls, EMPTY_VALUE);ArrayResize(cls2, Bars); ArrayInitialize(cls2, EMPTY_VALUE);int i,j;string symbol = Symbol();deletetxt1("Countess");deletetxt1("Pick");deletetxt1("Bing");deletetxt1("Bracht");deletetxt1("KAROLY");int counter, counterd; for (i=lookback-1; i>=0; i--) { voldn[i]=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,4,i))+90*Point; volup[i]=iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,4,i))-90*Point; st18[i]=iStochastic(symbol,0,18,3,3,0,0,MODE_MAIN,i); RSI2[i]=iRSI(symbol,0,2,PRICE_MEDIAN,i); cls[i]=cls[i+1]; if (st18[ArrayMinimum(st18,10,i+1)]<4.4) c77[i]=true;/// 3-sample low with stoch reading below 4.5 or 9.5 to 27.5 if ( i>0 && ( !( c77[i+1] && Low[i+1]<iBands(symbol,0,20,2,0,PRICE_CLOSE,MODE_LOWER,i+1))) // && iLow(symbol,0,iLowest(symbol,0,MODE_LOW,5,i-1))<=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,6,i-1)) // && !(High[i+1]-Low[i+1]>730*Point && Close[i+1]>Open[i+1]) && !(High[i+1]<High[i+4] && Low[i+1]>Low[i+4]) && iLow(symbol,0,i)==iLow(symbol,0,iLowest(symbol,0,MODE_LOW,2,i-1)) && (st18[i]<4.5 || (st18[i]>9.5 && st18[i]<27.5) || (st18[i+1]>9.5 && st18[i+1]<18.5)) // && Low[i]-Low[i+1]<430*Point && (Low[i]-Low[i+2]<430*Point || Low[i]-Low[i+2]>1000*Point) && (High[i]>High[i+1]-80*Point || (Open[i]<iBands(symbol,0,20,2,0,PRICE_CLOSE,MODE_LOWER,i)+50*Point && Close[i]>iBands(symbol,0,20,2,0,PRICE_CLOSE,MODE_LOWER,i) ) )// && Open[i]<Close[i] && High[i]<iMA(symbol,0,44,0,MODE_EMA, PRICE_MEDIAN,i)// && High[i]<iBands(symbol,0,20,2,0,PRICE_CLOSE,MODE_MAIN,i)-290*Point && (MathAbs(iBands(symbol,0,20,2,0,PRICE_CLOSE,MODE_MAIN,i)-iMA(symbol,0,44,0,MODE_EMA, PRICE_MEDIAN,i))>380*Point || High[i]>High[i+1] ) && Low[i+1]>iBands(symbol,0,20,2,0,PRICE_CLOSE,MODE_LOWER,i+1)-700*Point && Low[i+2]>iBands(symbol,0,20,2,0,PRICE_CLOSE,MODE_LOWER,i+2)-700*Point ){ //&& (st18[i]<4.5 || (st18[i]>9.5 && st18[i]<18)) if (gridadjust[ArrayMaximum(gridadjust,14,i+1)]<1) cls[i]=Low[i]; gridadjust[i]=1; // df[i]=cls[i]+.01650; // ds[i]=cls[i]+.03300; // dt[i]=cls[i]+.04950; ObjectCreate("Bingt"+IntegerToString(i),OBJ_VLINE,0, Time[i], 0); ObjectSet("Bingt"+IntegerToString(i),OBJPROP_COLOR,clrBlue); if (st18[i]>9) ObjectSet("Bingt"+IntegerToString(i),OBJPROP_COLOR,clrPaleGreen); ObjectSet("Bingt"+IntegerToString(i),OBJPROP_WIDTH,14); ObjectSet("Bingt"+IntegerToString(i),OBJPROP_STYLE,STYLE_DOT); ObjectSet("Bingt"+IntegerToString(i),OBJPROP_BACK,1); } } for (i=lookback-1; i>=0; i--) { df[i+1]=cls[i+1]+.01650; ds[i+1]=cls[i+1]+.03300; dt[i+1]=cls[i+1]+.04950; if (RSI2[i+2]<7 && Low[i+1]>iMA(symbol,0,9,0,MODE_EMA,PRICE_MEDIAN,i+1)-760*Point && Low[i+1]<Low[i+2] && High[i+1]<High[i+3]){ ObjectCreate("Bracht"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+1], Low[i+1]-50*Point); ObjectSetText("Bracht"+DoubleToStr(i), CharToStr(233), 32, "Wingdings", clrGreen); } } 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 struggle is still on for YouTube, receiving and posting all the music that I have made in the last 6 months – 10 albums are still missing. After that, I have a long, long AI music article for release that has been in the works.
Finally, my Billy Corgan album is there.
