Filtering

In my world of filtering, you never know how good the end result will be. It doesn’t matter how long it takes to find something that aligns your thinking with market changes for consistent money-making.

I must say I used my time well this week. I was off. Started with the right indicator: the Market Type.

First, the standing.

The convergence isn’t completely finished.

There’s probably a bit more volatility missing with one of them blue arrows.

See, that’s my lead signal now. The black arrow down has some issues; I have one example that received a 15-pip beat before turning for good, and has too many expressions for my liking. The blue is behaving like a darling.

   /////Drop from vax25 bottoming
      if (voldn[i+1]>24.5 && (voldn[i]<voldn[i+1]-10 || (voldn[i]<voldn[i+1]-2) && voldn[ArrayMaximum(voldn,16,i)]>voldn[ArrayMaximum(voldn,3,i)])
       &&  volup[i]<voldn[i] 
       && ((volup[i]<14 && volup[i]<voldn[i]-2) || (voldn[i+1]>42 ))
       && iLow(symbol,0,iLowest(symbol,0,MODE_LOW,2,i))==iLow(symbol,0,iLowest(symbol,0,MODE_LOW,8,i))     
       ){
            ObjectCreate("Darchellent"+DoubleToStr(i), OBJ_TEXT, 2, Time[i], 20);
            ObjectSetText("Darchellent"+DoubleToStr(i), CharToStr(241), 71, "Wingdings", clrBlue);
      }

I’d say it is never too late to invent a really good signal.


Lately, it’s Pet Shop Boys and some Billy Corgan that sell reasonably well.

My Cure-like songs are above 100 already.

They deleted album #71 from the Topic without a single word. All I knew was that the quantity dropped from 2292 to 2276, a loss of 16 songs. Most of my albums have 16-18 tracks. It took me a month and a half to figure out what went missing, since DistroKid showed no errors. The why may remain unknown forewer. YouTube has stopped showing quantity for the topic entirely.

Market Speed

First, regarding the age-old question: what is a trend?

No simple answer still, but I can give you two different answers that should help you out.

Answer 1: Trending is one-sided volatility compression that has been persisting for a while.

For my trading – Forex- the duration to call a trend is 2 hours, and you’ll need one side of the volatility to be kept below 10 while the other needs to be outside.

Dual compression is a squeeze. The first picked direction is what you should go with.

The new add-on part to the Market Type indicator.
////holding compression - downtrend
if (volup[i]<=10 && volup[i+1]<=10 && volup[i+2]<=10 && volup[i+3]<=10 && volup[i+4]<=10){
ObjectCreate("Pituss"+IntegerToString(i),OBJ_TREND,2, Time[i], 9, Time[i+1], 10);
ObjectSet("Pituss"+IntegerToString(i), OBJPROP_COLOR, clrYellow);
ObjectSet("Pituss"+IntegerToString(i), OBJPROP_WIDTH, 6 );
ObjectSet("Pituss"+IntegerToString(i), OBJPROP_STYLE, 2 );
ObjectSet("Pituss"+IntegerToString(i), OBJPROP_BACK, 0 );
ObjectSet("Pituss"+IntegerToString(i), OBJPROP_RAY_RIGHT, 0 );
if (volup[i]<=10 && volup[i+1]<=10 && volup[i+2]<=10 && volup[i+3]<=10 && volup[i+4]<=10 && !(voldn[i]<=10 && voldn[i+1]<=10 && voldn[i+2]<=10 && voldn[i+3]<=10 && voldn[i+4]<=10) && voldn[i]<voldn[i+1] && voldn[i]<voldn[i+2] && voldn[i+2]<10){
ObjectCreate("Darchelleni"+DoubleToStr(i), OBJ_TEXT, 2, Time[i], 20);
ObjectSetText("Darchelleni"+DoubleToStr(i), CharToStr(222), 51, "Wingdings", clrCrimson);
}
}
////holding compression - uptrend
if (voldn[i]<=10 && voldn[i+1]<=10 && voldn[i+2]<=10 && voldn[i+3]<=10 && voldn[i+4]<=10){
ObjectCreate("PitussX"+IntegerToString(i),OBJ_TREND,2, Time[i], 11, Time[i+1], 10);
ObjectSet("PitussX"+IntegerToString(i), OBJPROP_COLOR, clrBlue);
ObjectSet("PitussX"+IntegerToString(i), OBJPROP_WIDTH, 4 );
ObjectSet("PitussX"+IntegerToString(i), OBJPROP_STYLE, 2 );
ObjectSet("PitussX"+IntegerToString(i), OBJPROP_BACK, 0);
ObjectSet("PitussX"+IntegerToString(i), OBJPROP_RAY_RIGHT, 0 );
if (voldn[i]<=10 && voldn[i+1]<=10 && voldn[i+2]<=10 && voldn[i+3]<=10 && voldn[i+4]<=10 && !(volup[i]<=10 && volup[i+1]<=10 && volup[i+2]<=10 && volup[i+3]<=10 && volup[i+4]<=10) && volup[i]<volup[i+1] && volup[i]<volup[i+2] && volup[i+1]<10){
ObjectCreate("Darchelleni"+DoubleToStr(i), OBJ_TEXT, 2, Time[i], 20);
ObjectSetText("Darchelleni"+DoubleToStr(i), CharToStr(221), 51, "Wingdings", clrDarkGreen);
}
}

The second thing is what a strong trend is: prevention of a mean reversion. We had a 23-day-long strong downtrend.

I have invented hundreds of indicators; most of them never got a name, just got added to some existing code.

The Market Type indicator is probably one of my top 3 inventions.

The next one, Market Speed, is somewhere in the top 10.

The point of this indicator is to figure out what the market is doing: topping, bottoming, or just making a temporary swing high/low.

The stand-alone triangles that fall short of a 10 reading are V tops and bottoms that cause a temporary pullback to S-120 (the diagonal blue line below).

So, a top was made; you should be shorting until you see either a temporary V bottom or a complex bottom printing.

Not sure; maybe I have posted it before.

#property copyright "Copyright © 2025, Macdulio"
#property link "https://forexfore.blog"
#property description "V1.0"
#property description "Market Speed"
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 clrDarkGreen
#property indicator_color3 clrMagenta
#property indicator_color2 clrCoral
#property indicator_level1 10
#property indicator_level2 20
#property indicator_level3 30
#property indicator_level4 40
#property indicator_level5 50
#property indicator_level6 60
#property indicator_levelcolor clrBlue
#property indicator_levelstyle STYLE_DOT
double E44[], ExtMovingBuffer[];
double ExtLowerBuffer[];
extern int booster = 10;
extern double valuemonitor = 28;
extern int lookback = 800;
extern int indicator_window = 3;
extern int sample = 200;
extern double FSize=32;
double upper[], middle[], lower[];
double avg;
double FMax = FSize*6/5;
double iHi4[];
double iLo4[];
string symbol = Symbol();
double ExtATRBuffer[],ExtATRBuffer2[],ExtATRBuffer3[],ExtATRBuffer4[],ExtATRBuffer5[],stoch60[];
double corr[],corr2[], RSI2[], squeeze[];
int init(){
SetIndexBuffer(0,ExtATRBuffer);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,4,indicator_color1);
SetIndexBuffer(1,ExtATRBuffer2);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,4,indicator_color2);
SetIndexBuffer(2,ExtATRBuffer3);
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,4,indicator_color3);
return(0);
}
//+------------------------------------------------------------------+
//| Average True Range |
//+------------------------------------------------------------------+
int start(){
ArrayResize(ExtATRBuffer, Bars);
ArrayInitialize(ExtATRBuffer, 0);
ArrayResize(ExtATRBuffer2, Bars);
ArrayInitialize(ExtATRBuffer2, 0);
ArrayResize(ExtATRBuffer3, Bars);
ArrayInitialize(ExtATRBuffer3, EMPTY_VALUE);
ArrayResize(ExtATRBuffer4, Bars);
ArrayInitialize(ExtATRBuffer4, EMPTY_VALUE);
ArrayResize(ExtATRBuffer5, Bars);
ArrayInitialize(ExtATRBuffer5, EMPTY_VALUE);
ArrayResize(ExtMovingBuffer, Bars);
ArrayInitialize(ExtMovingBuffer,0);
ArrayResize(ExtLowerBuffer, Bars);
ArrayInitialize(ExtLowerBuffer,0);
ArrayResize(E44, Bars);
ArrayInitialize(E44,EMPTY_VALUE);
ArrayResize(iHi4, Bars);
ArrayInitialize(iHi4, EMPTY_VALUE);
ArrayResize(iLo4, Bars);
ArrayInitialize(iLo4, EMPTY_VALUE);
ArrayResize(stoch60, Bars);
ArrayInitialize(stoch60, EMPTY_VALUE);
ArrayResize(RSI2, Bars);
ArrayInitialize(RSI2, EMPTY_VALUE);
ArrayResize(corr, Bars);
ArrayInitialize(corr, EMPTY_VALUE);
ArrayResize(corr2, Bars);
ArrayInitialize(corr2, EMPTY_VALUE);
ArrayResize(middle, Bars);
ArrayInitialize(middle, EMPTY_VALUE);
ArrayResize(squeeze, Bars);
ArrayInitialize(squeeze, 0);
ArrayResize(upper, Bars);
ArrayInitialize(upper, EMPTY_VALUE);
ArrayResize(lower, Bars);
ArrayInitialize(lower, EMPTY_VALUE);
int i,j;
int ucount=0;
int dcount=0;
double std;
for (i=0; i<lookback; i++){
E44[i]=iMA(symbol,0,44,0,MODE_EMA, PRICE_MEDIAN,i);
for (j=i; j<i+20; j++)
ExtMovingBuffer[i]=ExtMovingBuffer[i]+E44[j];
ExtMovingBuffer[i]=ExtMovingBuffer[i]/20;
}
deletetxt1("God");
deletetxt1("Ladi");
deletetxt1("Bitera");
for (i=lookback-1; i>=0; i--)
{
std = iStdDevOnArray(ExtMovingBuffer,0,10,0,0,i);
ExtLowerBuffer[i]=ExtMovingBuffer[i]-std;
}
for(i=Bars-100; i>=0; i--){
if (Period()==240) iHi4[i]=iMA(NULL,0,52,0,MODE_EMA, PRICE_HIGH,i);
else if (Period()==30) iHi4[i]=iMA(NULL,0,414,0,MODE_EMA, PRICE_HIGH,i);
else if (Period()==60) iHi4[i]=iMA(NULL,0,207,0,MODE_EMA, PRICE_HIGH,i);
if (Period()==240) iLo4[i]=iMA(NULL,0,52,0,MODE_EMA, PRICE_LOW,i);
else if (Period()==30) iLo4[i]=iMA(NULL,0,414,0,MODE_EMA, PRICE_LOW,i);
else if (Period()==60) iLo4[i]=iMA(NULL,0,207,0,MODE_EMA, PRICE_LOW,i);
stoch60[i]=iStochastic(symbol,60,60,3,3,MODE_SMA,0,MODE_SIGNAL,i);
RSI2[i]=iRSI(symbol,0,2,PRICE_MEDIAN,i);
///Outside BB kick back measure
if (High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)){
ObjectCreate("Ladi"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], High[i]+20*Point);
ObjectSetText("Ladi"+IntegerToString(i), NormalizeDouble(DoubleToStr((High[i]-Close[i])*10000,2),2), 17, "Impact", Gray);
}
///parabolic break up
if ((High[i+3]>High[i+4] || High[i+4]>High[i+5])
&& Close[i+3]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+3)
&& High[i+1]-Low[i+1]<900*Point
&& (High[i+2]-Low[i+2]>400*Point || (Close[i+4]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+4) && Close[i+5]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+5)))
&& High[i+2]<High[i+3] && Close[i+2]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+2)
&& Close[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1) && High[i+1]==iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,4,i+1))
&& High[i+1]>iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_UPPER,i+1)
)
{
ObjectCreate("Bitera"+IntegerToString(i), OBJ_TEXT, 0, Time[i+12], High[i+1]+50*Point);
ObjectSetText("Bitera"+IntegerToString(i), "PARABOLIC MOVE!!! "+DoubleToStr(NormalizeDouble(Close[i+1],4),4) , 21, "Impact", Navy);
}
///parabolic break down
if ((Low[i+3]<Low[i+4] || Low[i+4]<Low[i+5])
&& Close[i+3]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+3)
&& High[i+1]-Low[i+1]<900*Point
&& (High[i+3]-Low[i+3]>400*Point || (Close[i+4]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+4) && Close[i+5]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+5)))
&& Low[i+2]>Low[i+3] && Close[i+2]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+2)
&& Close[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+1)+20*Point
&& Low[i+1]<=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,4,i+1))+20*Point
&& Low[i+1]<iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_LOWER,i+1)
)
{
ObjectCreate("Bitera"+IntegerToString(i), OBJ_TEXT, 0, Time[i+12], Low[i+1]-30*Point);
ObjectSetText("Bitera"+IntegerToString(i), "PARABOLIC MOVE!!! "+DoubleToStr(NormalizeDouble(Close[i+1],4),4) , 21, "Impact", Navy);
}
}
deletetxt1("Pepper");
deletetxt1("Panace");
deletetxt1("PLOT");
deletetxt1("LINE");
deletetxt1("Goal");
deletetxt1("Ladi");
for(i=lookback; i>=0; i--){
///reversal wick - upside
if (High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i) && (High[i]-Low[i])>180*Point && Close[i]<High[i]-(High[i]-Low[i])/5*3 && Open[i]<High[i]-(High[i]-Low[i])/3
&& High[i]>High[i+1]
){
ObjectCreate("Goal"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], High[i]-(High[i]-Low[i])/3+30*Point);
ObjectSetText("Goal"+IntegerToString(i), CharToStr(220), 38, "Wingdings", Red);
}
///reversal wick - upside, between 2 candles
if (High[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1)
&& (High[i+1]-Low[i])>180*Point
&& Close[i]<High[i+1]-(High[i+1]-Low[i])/5*3
&& Close[i]<Open[i]
&& Open[i]>=Close[i+1]
//&& Open[i]<High[i]-(High[i]-Low[i])/3
// && High[i]<High[i+1]
){
ObjectCreate("Goal"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], High[i+1]-(High[i]-Low[i])/3+30*Point);
ObjectSetText("Goal"+IntegerToString(i), CharToStr(220), 38, "Wingdings", Red);
}
///reversal wick - downside
if (Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i)
&& Low[i]<Low[i+1]
//&& (High[i]-Low[i])>140*Point
&& Close[i]>Low[i]+(High[i]-Low[i])/5*3 && Open[i]>Low[i]+(High[i]-Low[i])/3){
ObjectCreate("Goal"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], Low[i]+(High[i]-Low[i])/3+30*Point);
ObjectSetText("Goal"+IntegerToString(i), CharToStr(220), 38, "Wingdings", Green);
}
///reversal wick - downside, between 2 candles
if (Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i)
&& Low[i]<Low[i+1]
&& Close[i]>Open[i]
//&& (High[i]-Low[i])>140*Point
&& Close[i]>Low[i]+(High[i+1]-Low[i])/5*2
//&& Open[i+1]>Low[i+1]+(High[i]-Low[i])/3
){
ObjectCreate("Goal"+IntegerToString(i), OBJ_TEXT, 0, Time[i+1], Low[i]+(High[i+1]-Low[i])/3+30*Point);
ObjectSetText("Goal"+IntegerToString(i), CharToStr(220), 38, "Wingdings", Green);
}
middle[i] = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_TYPICAL, i);
avg = findAvg(20, i);
upper[i] = middle[i] + avg;
lower[i] = middle[i] - avg;
if (High[i]>(iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)-5*booster*Point)) {ExtATRBuffer[i]=(High[i]-iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i))*10000+booster;
if (ExtATRBuffer[i]>valuemonitor) ExtATRBuffer3[i]=ExtATRBuffer[i];
}
if (Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i)+5*booster*Point) {ExtATRBuffer2[i]=(iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i)-Low[i])*10000+booster;
if (ExtATRBuffer2[i]>valuemonitor) ExtATRBuffer3[i]=ExtATRBuffer2[i];
}
////////
if (ExtATRBuffer[i]==0 && ExtATRBuffer[i+1]==0 && ExtATRBuffer[i+2]==0 && ExtATRBuffer[i+3]==0) ucount=0;
if (ExtATRBuffer2[i]==0 && ExtATRBuffer2[i+1]==0 && ExtATRBuffer2[i+2]==0 && ExtATRBuffer2[i+3]==0 && ExtATRBuffer2[i+4]==0 && ExtATRBuffer2[i+5]==0) dcount=0;
if (ExtATRBuffer[i+1]>ExtATRBuffer[i] && ExtATRBuffer[i+1]>ExtATRBuffer[i+4] && ExtATRBuffer[i+1]>ExtATRBuffer[i+3] && ExtATRBuffer[i+1]>ExtATRBuffer[i+2] && ExtATRBuffer[i+1]>9
&& (ExtATRBuffer[i+3]>0 || ExtATRBuffer[i+1]>15)) {ucount++;
ObjectCreate("Ladi"+IntegerToString(i), OBJ_TEXT, indicator_window, Time[i+1], ExtATRBuffer[i]+10);
ObjectSetText("Ladi"+IntegerToString(i), ucount, 17, "Impact", Maroon);
}
if (ExtATRBuffer2[i+1]>ExtATRBuffer2[i] && (ExtATRBuffer2[i+1]>ExtATRBuffer2[i+2]+10 || (ExtATRBuffer2[i]>ExtATRBuffer2[i+4] && ExtATRBuffer2[i+1]>25 && ExtATRBuffer2[i+3]>ExtATRBuffer2[i+4] && ExtATRBuffer2[i+3]<ExtATRBuffer2[i+1] )) ) {dcount++;
ObjectCreate("Ladi"+IntegerToString(i), OBJ_TEXT, indicator_window, Time[i+1], ExtATRBuffer2[i]+10);
ObjectSetText("Ladi"+IntegerToString(i), dcount, 17, "Impact", Maroon);
}
}
deletetxt1("AveriD");
deletetxt1("AverD");
int twodigits=0;
if (ExtATRBuffer[0]!=0) twodigits = NormalizeDouble((High[0]-iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,0))*10000+booster,0);
if (ExtATRBuffer2[0]!=0) twodigits = NormalizeDouble((iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,0)-Low[0])*10000+booster,0);
int tens = round(twodigits/10);
int ones = twodigits-tens*10;
string stens, sones;
switch(tens)
{
case 1: stens=CharToStr(140);
break;
case 2: stens=CharToStr(141);
break;
case 3: stens=CharToStr(142);
break;
case 4: stens=CharToStr(143);
break;
case 5: stens=CharToStr(144);
break;
case 6: stens=CharToStr(145);
break;
case 7: stens=CharToStr(146);
break;
case 8: stens=CharToStr(147);
break;
case 9: stens=CharToStr(148);
break;
default: stens=CharToStr(139);
break;
}
//deletetxt1("AverD");
switch(ones)
{
case 1: sones=CharToStr(140);
break;
case 2: sones=CharToStr(141);
break;
case 3: sones=CharToStr(142);
break;
case 4: sones=CharToStr(143);
break;
case 5: sones=CharToStr(144);
break;
case 6: sones=CharToStr(145);
break;
case 7: sones=CharToStr(146);
break;
case 8: sones=CharToStr(147);
break;
case 9: sones=CharToStr(148);
break;
default: sones=CharToStr(139);
break;
}
string jointstring=stens+sones;
ObjectCreate("AveriD",OBJ_LABEL,indicator_window, 0,0);
ObjectSet("AveriD",OBJPROP_CORNER,3);
ObjectSet("AveriD",OBJPROP_XDISTANCE,20);
ObjectSet("AveriD",OBJPROP_YDISTANCE,27);
ObjectSetText("AveriD",jointstring,40,"Wingdings",DimGray);
if (twodigits>booster+15) ObjectSetText("AveriD",jointstring,40,"Wingdings",Tomato);
if (twodigits>booster+19) ObjectSetText("AveriD",jointstring,40,"Wingdings",DeepPink);
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);
} }
double findAvg(int period, int shift) {
double sum=0;
for (int x=shift;x<(shift+period);x++) {
sum += High[x]-Low[x];
}
sum = sum/period;
return (sum);
}

Some success with these three as of late:

I now have 12 tracks with 1K+ views.

Minor Earthquakes

Small changes this week – I would not be looking for downside here.

There was a double divergence made on the downside, and as you may notice, albeit above 66, I did not paint 74 red.

The reason is the lack of volatility. The filter I use now is having to poke outside the 30-sample BB on the 30 min. I do not know if the market maker would be pressed to buy in already here, but that mean reversion has been put off for too long now.

The orange moat hanging above like a cloud. Doesn’t it bother your eyes? I sure think that it would be walked in on next.

I wasn’t betting on the bowback either, but now I’m thinking that, on a close-up, this is how a volatility whip should register: Money flow going from one extreme to the other (re-calibrating the meter).

This move is to start expanding on volatility in preparation for a larger move next, typically in the opposite direction. We are also building on higher lows, if you have noticed.

There are a lot of professional volume prints lately, like during an accumulation you would see.

I’m not paying much attention to some prior plots I made, but here there’s a rounded triangle that was meant to gauge the downside pressure by pointing out the strength to the downside based on where the lower low would get between 3 and 18 pips. In this case, it did not ever reach 3. That’s weaker to the downside than the lowest normal reading.

Like that animated movie. What was it called? Up!


This was a more popular one as of late:

…and let’s do two editors’ choices.

A calculated note
A calibrated path
Blood on the soul
A scar on the hand
It was so nice and dandy
But it was just a pretense

[Verse 1]
The sharpest pain is not the way
He let go, she chose not to stay
He loved, then lost it
No claim, no gain, no final scream
She needed nothing but her dream
[Chorus]
Her name was Summer
And she loved like summer
Yes, she loved like summer
Left with the wind
Forgot to say bye-bye
[Verse 2]
Everything went
Capilation, time dilation
The epillator, the smell of dinner
It was a true capitulation
Like Napoleon losing it all for once
[Bridge]
Dislocated like layers of the Earth
Sinking memories, all hope deceived
No final call - the heart had stalled
[Final Chorus]
Yes, she loved like summer
She loved like summer
Gone with the wind
Forgot to say bye-bye
[Outro]
The ballad of esoteric joy
Washed down with ascorbic acid

The next POC up is at 1.1333

Saying The DD Part

Saying the Double Divergence part out loud.

See, I have more answers than anyone out there, since I invent indicators.

Sustainable reversals

A beat over a double divergence recognized by my Market Type indicator. The beat can be 3-15 pips typically.


    /////green to green taper
      if (volup[i]<volup[i+1] && volup[i+2]<=volup[i+1] 
      && volup[i+3]<=volup[i+1] 
         && volup[ArrayMaximum(volup,56,i+1)]>18 
         && volup[i+1]>=voldn[ArrayMaximum(volup,4,i+1)]
         && ((volup[i+1]>9 && RSI2[i+1]>85) || volup[i+1]>=19)
         && volup[i+1]<33
         
         && volup[ArrayMaximum(volup,66,i+4)]>=volup[i+1] 
         && volup[ArrayMaximum(volup,12,i+1)]>voldn[ArrayMaximum(voldn,12,i+1)] 
         && voldn[i+1]<volup[i+1]
         && High[i+1]==iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,30,i+1))
         ){ 
         ObjectCreate("Rocket"+IntegerToString(i),OBJ_TREND,indicator_window, Time[ArrayMaximum(volup,36,i+4)],volup[ArrayMaximum(volup,36,i+4)],Time[i+1],volup[i+1]);
         ObjectSet("Rocket"+IntegerToString(i),OBJPROP_COLOR,clrMediumSpringGreen);
         if (High[ArrayMaximum(volup,26,i+4)]>High[+1]) ObjectSet("Rocket"+IntegerToString(i),OBJPROP_COLOR,clrLimeGreen);
         ObjectSet("Rocket"+IntegerToString(i),OBJPROP_WIDTH,6);
         ObjectSet("Rocket"+IntegerToString(i),OBJPROP_BACK,1);     
         ObjectSet("Rocket"+IntegerToString(i),OBJPROP_RAY_RIGHT,0);
         
         if (Close[i+1]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+1)){
          if (i<300) {ObjectCreate("PitusX"+IntegerToString(i),OBJ_VLINE,0, Time[i+1], 0);
      ObjectSet("PitusX"+IntegerToString(i), OBJPROP_COLOR, clrWhite );
      greentogreen[i]=1;
      }
      if ((tup[ArrayMaximum(tup,5,i+5)]>0 && tup[ArrayMaximum(tup,10,i+11)]<1 && ((volup[i+1]<14 && RSI2[i+1]>90)
     || RSI2[i+1]>95)) && High[i+1]<High[ArrayMaximum(volup,66,i+4)]
      ) { ObjectSet("PitusX"+IntegerToString(i), OBJPROP_COLOR, clrDeepPink );
      
      if (i<300){
                 ObjectCreate( "Banalisation"+IntegerToString(i), OBJ_HLINE, 0,  Time[0], High[i+1]+270*Point);
               ObjectSet("Banalisation"+IntegerToString(i), OBJPROP_COLOR, clrDeepPink);
               ObjectSet("Banalisation"+IntegerToString(i), OBJPROP_WIDTH, 3 );
               ObjectSet("Banalisation"+IntegerToString(i), OBJPROP_RAY_RIGHT, false );
               ObjectSet("Banalisation"+IntegerToString(i), OBJPROP_STYLE, 1 );
               
                ObjectCreate( "Banalisations"+IntegerToString(i), OBJ_HLINE, 0,  Time[0], High[i+1]+530*Point);
               ObjectSet("Banalisations"+IntegerToString(i), OBJPROP_COLOR, clrDeepPink);
               ObjectSet("Banalisations"+IntegerToString(i), OBJPROP_WIDTH, 3 );
               ObjectSet("Banalisations"+IntegerToString(i), OBJPROP_RAY_RIGHT, false );
               ObjectSet("Banalisations"+IntegerToString(i), OBJPROP_STYLE, 1 );
               
               
                ObjectCreate( "Banalisationz"+IntegerToString(i), OBJ_HLINE, 0,  Time[0], High[i+1]+780*Point);
               ObjectSet("Banalisationz"+IntegerToString(i), OBJPROP_COLOR, clrDeepPink);
               ObjectSet("Banalisationz"+IntegerToString(i), OBJPROP_WIDTH, 6 );
               ObjectSet("Banalisationz"+IntegerToString(i), OBJPROP_RAY_RIGHT, false );
               ObjectSet("Banalisationz"+IntegerToString(i), OBJPROP_STYLE, 1 );
             }  
      
      }     
      ObjectSet("PitusX"+IntegerToString(i), OBJPROP_WIDTH, 4 );
      ObjectSet("PitusX"+IntegerToString(i), OBJPROP_STYLE, 2 );
      ObjectSet("PitusX"+IntegerToString(i), OBJPROP_BACK, 1 );}
  

No momentum timeout measured by my gray RSI2 diamonds.


 ////diamond up 
 if (RSI2[i]>92.5){  
               ObjectCreate("Darchellen"+DoubleToStr(i), OBJ_TEXT, 1, Time[i], 86);
               ObjectSetText("Darchellen"+DoubleToStr(i), CharToStr(117), 21, "Wingdings", clrDimGray);
            if (RSI2[i]>98 || 
            (High[i]>iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_UPPER,i)+50*Point && 
            High[i+1]<iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_UPPER,i+1)+60*Point))  {ObjectSetText("Darchellen"+DoubleToStr(i), CharToStr(117), 21, "Wingdings", clrPurple);
         }    
         }
         
////diamond down
if (RSI2[i]<8.3){  
    ObjectCreate("Darchellen"+DoubleToStr(i), OBJ_TEXT, 1, Time[i], 26);
    ObjectSetText("Darchellen"+DoubleToStr(i), CharToStr(117), 21, "Wingdings", clrDimGray);
    if (RSI2[i]<3 
    || (Low[i]<iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_LOWER,i)-50*Point && Low[i+1]>iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_LOWER,i+1)-60*Point)) {ObjectSetText("Darchellen"+DoubleToStr(i), CharToStr(117), 21, "Wingdings", clrPurple);
    }
} 

Capsizing after a balance of reset hits a two-thirds extreme.

I have more answers than AI, since AI has no intuition. I cannot rationally explain why I had to add a 10% adjustment; it felt necessary. It is amazing how well it worked.

    /////balance of reset green 
      if (greentogreen[ArrayMaximum(greentogreen,26,i)]>0 && RSI2[i]>15 && RSI2[i+1]<10) {
         j=i+1;
         greensum=RSI2[i];       
         while (j<i+57 || greentogreen[j-1]>0){
           if (greentogreen[j-1]>0) break;
           greensum=greensum+RSI2[j];
         j++;
         }
         ObjectCreate("Fraca"+DoubleToStr(i), OBJ_TEXT, 1, Time[i+2], 76);
         ObjectSetText("Fraca"+DoubleToStr(i), DoubleToStr(NormalizeDouble(greensum/(j-i+1)+10,0),0)+"%", 47, "Impact", clrDarkGreen);
         if (greensum/(j-i+1)<40) ObjectSet("Fraca"+DoubleToStr(i), OBJPROP_COLOR, clrCrimson);
           if (greensum/(j-i+1)<=23) ObjectSet("Fraca"+DoubleToStr(i), OBJPROP_COLOR, clrGreen);
            if (greensum/(j-i+1)>=56) ObjectSet("Fraca"+DoubleToStr(i), OBJPROP_COLOR, clrCrimson);
      }
      
      
      
          /////balance of reset red 
      if (redtored[ArrayMaximum(redtored,96,i)]>0 && RSI2[i]<85 && RSI2[i+1]>90) {
         j=i+1;
         redsum=RSI2[i];       
         while (j<i+50){
           if (redtored[j-1]>0 || redtored[j-1]>0) break;
           redsum=redsum+RSI2[j];
         j++;
         }
         ObjectCreate("Fraca"+DoubleToStr(i), OBJ_TEXT, 1, Time[i+2], 76);
         ObjectSetText("Fraca"+DoubleToStr(i), DoubleToStr(NormalizeDouble(redsum/(j-i+1)+10,0),0)+"%", 47, "Impact", clrCrimson);
         if (redsum/(j-i+1)>40) ObjectSet("Fraca"+DoubleToStr(i), OBJPROP_COLOR, clrGreen);
          if (redsum/(j-i+1)<=23) ObjectSet("Fraca"+DoubleToStr(i), OBJPROP_COLOR, clrGreen);
           if (redsum/(j-i+1)>=56) ObjectSet("Fraca"+DoubleToStr(i), OBJPROP_COLOR, clrCrimson);
    
      }

There was a capitulation (The 100-pip beat over the fresh low made on the previous day), but no momentum to the upside yet, no mean reversion.

It was interesting to see that 62% of the people were long at the revisit of the fresh low. This imbalance made the flush, the capitulation-push possible.

The convergence has not finished.


The new adverb for AI is Super Trump Donald Very Stable Genius Intelligence With Genetic Disposition Because Uncle Went To Michigan Institute Of Technology Plus Wharton Finance and the Sharper Image. Steak too.

Never heard of Mozart, but it seems as bad as Suno. The quality is not for human consumption.

This guy claims to have 16 million streams. Sounds like BS. I have made 2600 songs; 2276 are still available on streaming services, and I’m showing 66k streams. And I make quality stuff, not just for bitrate, but based on the effort I spend on writing and construction.

Understanding Mean Reversion

The starting point of a mean reversion is a capsizing of the holdings.

My proxy for holdings detection is the “balance of reset” value calculated from the last stochastic divergence.

I am fascinated with this subject, as I seem to come across deeper mechanical undertanding such as where capsizing becomes a real danger. As it turns out, about 2/3 of directional bets facing a slow down carries an impending mean reversion.

In other words, a print at or below 33% or a print at or above 66% shows a counter-productive market with a high risk of an impending reversal.

What I am measuring is the average of the RSI2 prints until the opposite extreme from the last Market Type divergence.

For instance:

A change from almost 2/3 short to almost 2/3 long is a total capsizing.

Two gray divergences after a new volatility compression anchor is a prime way to find a period of “slowing”.

The orange dots on the bottom are maximum squeeze; when it goes to red, then blue, it is starting to release – in this case to the upside of course.

After capsizing, the stochastic unraveling (going from one extreme to the other) is providing the fuel necessary for the return.

A trending move often has a telltale, a “failed auction,” saying that the move is on, but the actual starting point is made by a conscious bet made around the fair price, not waiting for a deep, 30% discount. This aggression could form around the backtest of the 120 SMA (30 min).

Once the move is in place, the E44 would serve as a limit, and at greater compression, the E16.

The yellow arrows show the trip highs.



//4-hour high vol surge & reversal
if (High[i+1]==iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,8,i+1)) && Close[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1)
&& High[i]<High[i+1] && High[i+1]-Low[i+1]>80*Point 
&& Low[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+1)
&& (Close[i+1]<Open[i+1] || (Close[i+1]<High[i+1]-(High[i+1]-Low[i+1])/3*2)  )){
 ObjectCreate("Fox"+IntegerToString(i),OBJ_TREND,0, Time[i+1], High[i+1], Time[i+1], Low[i+1]);
      if (High[i+1]-Low[i+1]>130*Point) {ObjectSet("Fox"+IntegerToString(i),OBJPROP_COLOR,clrOrangeRed); 
         if (High[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1)) {ObjectCreate("DOGZ"+IntegerToString(i),OBJ_TEXT, 0, Time[i+3],High[i+1]+90*Point);
         ObjectSetText("DOGZ"+IntegerToString(i),"A", 36, "Impact", clrRed);
              }
         if (iHigh(symbol,0,i+1)>iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,8,i+2))) {ObjectCreate("DOGZ"+IntegerToString(i),OBJ_TEXT, 0, Time[i+3],High[i+1]+190*Point);
         ObjectSetText("DOGZ"+IntegerToString(i),"4 Tripper", 36, "Impact", clrRed);
     
         }
          if (iHigh(symbol,0,i+1)>iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,8,i+2)) 
          && High[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1)) {ObjectCreate("DOGZ"+IntegerToString(i),OBJ_TEXT, 0, Time[i+3],High[i+1]+90*Point);
         ObjectSetText("DOGZ"+IntegerToString(i),"4A", 36, "Impact", clrRed);
           // FourAU[i]=High[i+1];
         }
      }
      else {ObjectSet("Fox"+IntegerToString(i),OBJPROP_COLOR,clrGold); 
       if (stoch[i+1]>80 && High[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1)
       
       && (iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1)-iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+1))>460*Point
       ){
               ObjectSet("Fox"+IntegerToString(i),OBJPROP_COLOR,clrOrange); 
               ObjectCreate("DOGZ"+IntegerToString(i),OBJ_TEXT, 0, Time[i+3],High[i+1]+90*Point);
                ObjectSetText("DOGZ"+IntegerToString(i),"A(2)", 36, "Impact", clrRed);
          
         }
      }
      ObjectSet("Fox"+IntegerToString(i),OBJPROP_WIDTH,13);
      ObjectSet("Fox"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
       ObjectSet("Fox"+IntegerToString(i),OBJPROP_BACK,1);
}      


To prevent a mean reversion from playing out in full, they must step up at about a fluctuation maximum (41 pips) before the E-414 band (guard rail).

The E-414 band, of course, isn’t a hard stop; the momentum would typically carry the price past, by up to a fluctuation maximum as well.

I’ll teach you a new way of looking at the stochastic reading. The only one that makes sense is 120-sample on the 30-minute, which is 60 on the 60. Only the main line; don’t confuse yourself. A 50% read is a fair price. 80% is 30% discount for bears; 20% is a 30% discount for bulls.

The true resistance of the downtrend is the moat. This is between 1 fluctuation maximum from the mean and the 712 SMA (30-min). When it is wider than 27 pips (35.6 currently) it is to be considered impenetrable on a single try.

As for duration, a mean reversion takes around 48 hours on average to play out. The distance isn’t always large, although even a 2.5x fluctuation-maximum move is still more than 100 pips, but the speed is an important factor which could elevate this into a worthwhile weekly options play.

All in all, it seems like the bulls dropped the matzo ball into the close, but as a setup, this is still bullish until the stochastic goes overbought.


Two clips today, they are fighting it out.


This was the rejection at the previous week’s low:

Prestidigitation

I always get pissed off by people using scientific sounding words to refer to something they themselves are unable to define.

Perhaps it’s because I think like a programmer. Discretionary stuff like “structure” and “taking a buy setup” is meaningless since there is no binary flowchart that I can turn into code.

At the same time, less arrogant expressions can find their way into useful tools.

For instance, sell weakness can be a collection of expressions, that would include:

– 3 failures (fractal prints) near the 4H 30-sample BB.

The blue diagonals show tie-offs touching the 9-day EMA (52 EMA on 4H).

– Or sell the beat of the 6th gray diamond on the 30-minute.

The collection of exits similarly would be made up of different things.

An hourly gray volatility compression divergence is one of the events that seem to score high.

Now, I was missing one of the plausible definitions for “buy strength” last Friday.

Check out this immense Money Flow divergence upon re-testing (matching) the 200-hour low.

The lowest MF print was 43.87, where the sell off hit the price bracket. With such bullish money flow, the breakdown was doomed.

I could use a shortcut, however. For instance, an 8-pip drop in downside volatility, meaning a 30-minute candle closing back by 8+ pips after a volatility print exceeding 24. Just as there is flat top-drop, there is flat bottom-lift.

See, this is a must. A binary answer. Buy or don’t. Sell or not.

See, ideally there would be a lower low.

See in this TA chart, where the bars are indicators of price data in a two-dimensional field and trendlines indicate possible limits, both the blue and the green trendlines could chip in for some support.

There is still a high-volume node between 1.1440 and 1.1437 (cyan numbers).

The projected exit block (support zone is 1.1442-1.1400)

The daily stochastic is still embedded to the downside, and the retracements have only marginally exceeded the R0 level so far.

My vote is on no mean reversion yet, lower low first.


Based On This

Based on the long-term stochastic range, we had a reaction off the upper reversal zone, then found some support at the overbought neckline.

Based on weekly pro volume prints, there’s a resistance zone 1.1786-1.1836, a support zone 1.1437-.1.1393. We are at about 40% of the range, and the vax seems to be suggesting a back test/undercut closing the volatility imbalance (crappy word still).

The upside seems complete, with 3 stalls around the 4H 30BB. Time to print a new comfort box (blue box with red opposing magnet) lower.

The upside was a no-momentum crown, a bear flag. On the downside, there was one stochastic bar print so far. There should be more.

High-volume nodes at 1.1542 and 1.1440.

It has been crazy difficult to trade the bear flag, as any volatility above 24 was bought without exception, but the rallies have been resulting in subsequent lower highs. The last liquidity break showed a balance of 46% longs. Friday was the first day when the daily 19 SMA was not touched all day after 10 trading days of revolving around it.

I’m 5 lots short on balance.


Balance Of Reset

If you are curious, this was Snake 2, and the squirt got called off.

My thinking currently revolves around the reset that occurs after a volatility divergence.

The Market Type indicator is the only one that can hold a candle to an RSI2, and it has some special use cases.

I don’t know if I can get the calculation right in one pass, but here it is.

We are talking about the RSI sequence that prints after a red-to-red or a green-to-green divergence; these get highlighted usually with a white vertical line.

The plotted percentages represent the outcome of the “reset”: what ratio of bulls remains with the trade.


      /////balance of reset green 
      if (greentogreen[ArrayMaximum(greentogreen,16,i)]>0 && RSI2[i]>15 && RSI2[i+1]<9) {
         j=i+1;
         greensum=RSI2[i];       
         while (j<i+17 || greentogreen[j-1]>0){
           if (greentogreen[j-1]>0) break;
           greensum=greensum+RSI2[j];
         j++;
         }
         ObjectCreate("Fraca"+DoubleToStr(i), OBJ_TEXT, 1, Time[i+2], 76);
         ObjectSetText("Fraca"+DoubleToStr(i), DoubleToStr(NormalizeDouble(greensum/(j-i+1)+10,0),0)+"%", 47, "Impact", clrDarkGreen);
         if (greensum/(j-i+1)<40) ObjectSet("Fraca"+DoubleToStr(i), OBJPROP_COLOR, clrCrimson);
      }
      
      
      
          /////balance of reset red 
      if (redtored[ArrayMaximum(redtored,16,i)]>0 && RSI2[i]<85 && RSI2[i+1]>90) {
         j=i+1;
         redsum=RSI2[i];       
         while (j<i+17){
           if (redtored[j-1]>0 || redtored[j-1]>0) break;
           redsum=redsum+RSI2[j];
         j++;
         }
         ObjectCreate("Fraca"+DoubleToStr(i), OBJ_TEXT, 1, Time[i+2], 76);
         ObjectSetText("Fraca"+DoubleToStr(i), DoubleToStr(NormalizeDouble(redsum/(j-i+1)+10,0),0)+"%", 47, "Impact", clrCrimson);
         if (redsum/(j-i+1)>40) ObjectSet("Fraca"+DoubleToStr(i), OBJPROP_COLOR, clrGreen);
      }

The bears have the upper hand currently, but not by much. The high-volume prints were all higher.

I believe we would see a lower low, but gotta be cautious about dollar strength, as Cem Karsan keeps warning about next Tuesday, as the window closes for a high-volatility print. There would be no rate hike, and that needs to be priced in at some point.

One slight weekly lower low was all that happened; the price is kept out at the slightest high-volume block and seems trapped.

There was a backtest of the prior week’s pivot, but then the support was bought just as hard.


Snake 1

I said last week that the market would mean-revert, go to 1.1610, then 1.157x. This all played out on Friday afternoon.

I don’t use a whole lot of moving averages, and I generally acknowledge the 9-day EMA as the mean (414 HL2 EMA on 30 min), but I do follow another one, the 712 SMA, quasi as my secondary mean.

The market started trending on Thursday, so currently there is an End-Of-Wave sequence being printed. There has been only the first snake ladder, so that means 2 more lower lows for sure, and there has to be another snake ladder to confirm the next lower low before the squirt print on the downside.

Now, I plotted a 15 SMA smoothed on the daily to give a better idea of where the low-risk fade could start.

Although the RSI2 shows an optimal read for a turn, you normally need 4 purple prints on the CounterForce52, so this is early days.

There are high-volume prints to be swept at 1.1565 and 1.1541.

Currently, I would sell anything above the E-44 on the 30-minute.


The San Miguel Castle Show in Tenerife is an excuse to post some Medieval J-Lo, but since no one is going to click on that, here’s some even more creative stuff.

The Way I See It

Now I have 2 examples of accumulation rallies (back-to-back).

Both of them started with a sideways bounce off the 6-sample 20-pip bracket. (Brown Arrow).

A professional number of buys occurred in both valleys before the run-up.

What made the second one more powerful (a double pump of sorts) was that the market experienced a squeeze, receiving an Extra/High energy charge before the next series of waves up.

 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 (Low[i+1]<volup[i+1] && Close[i+1]>volup[i+1] && Low[i+4]>volup[i+4] && Low[i+3]>volup[i+3] && Low[i]>volup[i]
       && volup[i]<=volup[i+1] && volup[i+2]<=volup[i+3]
       ){
         ObjectCreate("Svxth"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+1], Low[i+1]-10*Point); 
         ObjectSetText("Svxth"+DoubleToStr(i), "Accm+3 humps->R15->30", 23, "Impact", clrGreen);
          ObjectCreate("Svxthh"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+1], Low[i+1]-70*Point); 
         ObjectSetText("Svxthh"+DoubleToStr(i), "Above weekly high->70-ac DBL-DVG+", 23, "Impact", clrGreen);
         
         
       }

What I’m really here to talk about is the exits.

The first exit was a 30-print on the Market Type, but the ultimate exit is what matters here.

There were 3 humps that mattered; the first divergence was auto-plotted, the second I had to draw in myself because I usually don’t look for one over this distance.

#3 was only settled after 3x the 30-minute printing smaller bars were settled. Then it was an “ac” = Above Cut.

So is this a buy now? Not yet. There has not been a sideways bounce off the bracket, and there hasn’t been an R15 prompt.


I have also made a summary of R15 (without an accumulation signal) exit possibilities.

A sustainable rally ends in a parabolic print with a magenta diamond / in a magenta diamond print after 20 hours of no magentas / outside the red bracket, making a new 200H+ print (new high).

Example one: parabolic w/ magenta.

Exit #2: 20 hours of nothing, first magenta print.

The last R-15 sustainable run-up was a bow-back, which made a marginally higher high.

Sure, the conditions are ideal to start an R-15 sustainable run-up, but there hasn’t been a catalyst (a spark, RSI2 spiking below 15), and I personally think that you are going to see a mean reversion next; the mean is around 1.1610 at the moment, but the reversion should take this to 1.157x.

The food for thought part is that at the beginning of a rally you can already know if it’s going to be a sustainable run-up or a spasm, and that different kinds of rallies mean having to be monitoring for different kinds of exits.


This one did surprisingly well for its kind (not popular genre, not upbeat song), and I hope there was more to this than the cover image.

I typed in “Metro Goldwing” as part of the text to be reshuffled by Suno. It refused to do it. I wonder why.