I have given this lesson many times, the bumper line is a 100-pip displacement with a 20x 4H delay
if (High[i+20]>iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,200,i+21))) upperbumper[i]=High[i+20]+1000*Point;
if (Low[i+20]<iLow(symbol,0,iLowest(symbol,0,MODE_LOW,200,i+21))) lowerbumper[i]=Low[i+20]-1000*Point;
The head and the right shoulder tend to have this relationship on EUR/USD. I cannot say anything similar about any other instrument.
Now take a look at where we are, that teal trendline is the very defining low of this current uptrend, I left the connection points lit, so you can see where it started.
Pay attention to how meager the bounce has been.
What are they selling and what are they buying.
I would say that in the last 72 hours, they typically sold after the 3rd hourly close above the E-44 and bought after a red volume print, mostly the undercut.
Now, triangular bells / fractal evaluation.
A gray triangle warns that bull aggression should be measured next. The undercut would likely be 3-30 pips lower. If they bought 3 pips out, they are very aggressive; if they bought 30 pips lower, they are pretty relaxed.
The current squeeze would most likely result in a volatility breakout. The rectangular strips show the numbers where the break could occur, depending on the manner of the approach (outside an expanding BB30 will do), and then you should be targeting the W3M numbers.
These numbers get adjusted when the consolidation mean gets re-adjusted. Do you have any clue about the breakout numbers for any other instrument? I don’t. It took me 12 years to figure these out.
The one example that I had until today for a peak/low coinciding with a stochastic bar print (momentum present) was this:
Note that the market speed print (distance achieved outside the 30 BB) did not coincide with the actual low print. The thin magenta line was the 3-hour span that made a support box for the price in the future, insisting on going lower.
This raises the possibility of a legitimate high made today.
The momentum high and the separation high here are also separated, and there is still momentum showing at the peak, yet it is a tired move for an extra 6 pips thanks to inertia.
I believe that the new magenta box is a sell and may be a sell more than once.
What is important in terms of a swing high getting confirmed in is that the price would close 91+ pips below the 1.1572 high for the week.
Divergent in terms of the distance achieved beyond the upper 30BB. Since we are talking 20 pips or so (the scale is set back by 20 pips inside the BB) it would have to be multiple pushes up or a motion that starts the expansion gradually first.
Although after 120 hours of rest, the 1.1473 is no longer safe, I do not think this would get there. The game would start at 1.1429 and could get within 10 pips of the break level, so 1.1457. Can’t narrow it further. That high should be the rest before returning below the daily E-9.
The scissor between the 30-min E-414L and the S-712 is currently 91 pips. I have not seen a larger number. It would be merely impossible to cross. A major consolidation would be necessary below the E-9 before being able to cross that.
I am on the side of Brent Johnson, thinking that the Dollar would make a new higher high next. I think the 1.30-1.40 Euro calls are utter rubbish.
If we get a move back up, I think it will be thrown into the brown box (the wick of the professional volume candle). Otherwise, the red strip is the main obstacle, but a fresh consolidation move it about.
When you get a momentum loss (CAT EXIT) combined with a counter-directional move of strength (thick magenta diagonal), the next call point is the 30-sample BB plus 5 pips.
From there, there are different paths to take. My guess is a back test of the 1.1150-1.1130 zone. This would also coincide with the 120 BB (blue line) top. A leg up is a good likelihood.
///45+pips rejection
if (i>1 && iFractals(symbol,0,MODE_UPPER,i) && High[i]==iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,200,i))
&& High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)
){
if (High[i]-Low[i-1]>450*Point){
ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i], High[i], Time[i-1], Low[i-1]);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Magenta);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,5);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);}
if (Low[i-2]<Low[i-1] && High[i]-Low[i-2]>450*Point){
ObjectDelete("Pinner"+IntegerToString(i));
ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i], High[i], Time[i-2], Low[i-2]);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Magenta);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,5);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);}
if (ExtMapBuffer3[i]==EMPTY_VALUE) ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,15);
}
if (i>2 && iFractals(symbol,0,MODE_LOWER,i) && Low[i]==iLow(symbol,0,iLowest(symbol,0,MODE_LOW,200,i))
&& Low[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i)
){
if (High[i-1]-Low[i]>450*Point){
ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i], Low[i], Time[i-1], High[i-1]);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Magenta);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,5);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);}
if (High[i-2]>High[i-1] && High[i-2]-Low[i]>450*Point){
ObjectDelete("Pinner"+IntegerToString(i));
ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i], Low[i], Time[i-2], High[i-2]);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Magenta);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,5);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);}
if (High[i-3]>High[i-1] && High[i-3]-Low[i]>310*Point){
ObjectDelete("Pinner"+IntegerToString(i));
ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i], Low[i], Time[i-3], High[i-3]);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Magenta);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,5);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);}
if (ExtMapBuffer2[i]==EMPTY_VALUE) ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,15);
}
}
Usually, a disco track / EDM becomes popular. This time, they started listening to an Oasis parody.
The exit needs to meet 2 criteria: the move has to end in a capitulation that bounces back 100+ pips within 2 hours, and the momentum has to be gone = absence of a stochastic bar.
A couple of things I did not know the right answer to until today:
The flick flack around the BB is not a prerequisite; a rat poison sequence followed by a clutch is enough. However, I think you want to see the clutch pressed far enough from the consolidation weight i.e., past the “180 break” line. This means 96 pips.
As long as there is momentum still, further capituation moves can & will follow.
Now, let’s talk about the other catastrophic feature, the CAT HOT V. This is a fractal that is preceded by stochastic bar prints.
The take back of the high/low is a continuation entry, although when things aren’t hopping, price may need to return twice before the ball gets rolling again.
The V works wonders during a thrust/capitulation move.
///hot fractal on top (must overhedge for the break)
if (iFractals(symbol,0,MODE_UPPER,i) && ExtMapBuffer3[i]!=EMPTY_VALUE && ExtMapBuffer3[i+1]!=EMPTY_VALUE
//&& ExtMapBuffer3[i+2]!=EMPTY_VALUE
&& (Close[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i) || Close[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1))
) {
ObjectCreate("Daltoni"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+5], High[i]+20*Point);
ObjectSetText("Daltoni"+DoubleToStr(i), "CAT V BACK", 22, "Impact", DarkGreen);
}
Now, check out what happens when a capitulation is qualified & sticks.
Within 9 hours, a consolidation takes place, and the E-16 gets touched. Since during the parabolic move, full consolidation does not
There may or may not be an echo move triggered here. Obviously, the capitulation / catastrophic terminal isn’t gonna be reached, but the price could come within 10 pips of it.
After the E-16 affair and/or the lastful reach, I would say the next call point would exceed the 30BB on the opposite end by 10 pips.
I liked today’s price action as well as the new lessons I was taught.
Due to the increased volatility, I trade on a quarter lot basis and try not to hold more than 2 naked lots for a longer period.
I am constantly taking profits to boost the equity bottom line.
This is not the only way, but it is my way. I don’t aim for home runs.
Yesterday, I made $1214.58; today, I’m at $996.97, so that’s 2.2k I did not have on Friday. I had 70-80 closed-out trades per day. Started with full hedge, aiming to close with a full hedge. In terms of money, what I am doing can be done with an 8-9k account.
If you want to know, my biggest daily Forex gain was 27k, and the best month brought 87k.
So, the primary exit was about the pro volume candle’s high, and once this condition was met, the secondary exit at the 120-sample BB. Both highlighted with an orange marker.
Now, let’s figure out some filters for the parabolic move in real time.
One common denominator is that things can go awry beyond the 120-sample BB. The exit condition would be an FFF++ distance (end of the Pendulum) unless the price is already outside of it. The first example was something that went outside and never cared to consolidate, so I had to find usable conditions with an unknown playfield.
Let’s write an overhedger that would put you in a 20% extra directional holding even if you are asleep.
// Parabolic Overhedger by Macdulio
#include <stdlib.mqh>
extern double Equity = 400;
extern int magic_number = 98;
extern int magic_number2 = 99;
extern double Ratio = .6;
extern double overhedge = 120;
extern double MarginCallPercentage = 100;
extern double FSize=32;
#property copyright "by Macdulio in 2025"
#property link "https://forexfore.blog"
#property description "Parabolic Overhedger"
int profits;
double nakedshorts[];
double nakedlongs[];
double open_price;
double stop_loss_price;
double take_profit_price;
double open_price2;
double stop_loss_price2;
double take_profit_price2;
double OrderOpenPrice;
double OrderProfit;
string symbol = Symbol();
int init() {
return(0);
}
int deinit() {
return(0);
}
int start() {
int i, counter;
int counted_bars=IndicatorCounted();
int longcount, shortcount;
double nlongs;
double nshorts;
double longaveragebuffer;
double shortaveragebuffer;
int order_type;
profits = 0;
int hstTotal=OrdersHistoryTotal();
counter = 0;
// Print("Ratio = ", Ratio);
for(i=OrdersTotal()-1; i>=0 ; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
{
Print("Access to orders list failed with error (",GetLastError(),")");
break;
}
if (OrderType() == OP_BUY)
{
nlongs = nlongs+OrderLots();
longcount = longcount+1;
longaveragebuffer = longaveragebuffer+(OrderOpenPrice()*OrderLots());
}
if (OrderType() == OP_SELL )
{
nshorts = nshorts+OrderLots();
shortcount = shortcount+1;
shortaveragebuffer = shortaveragebuffer+(OrderOpenPrice()*OrderLots());
}
}
if (nlongs!=nshorts){
// Parabolic break up OverHedge for shorts
if (nlongs<nshorts && (High[3]>High[4] || High[4]>High[5])
&& Close[3]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,3)
&& High[1]-Low[1]<900*Point
&& (High[2]-Low[2]>400*Point || (Close[4]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,4) && Close[5]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,5)))
&& High[2]<High[3] && Close[2]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,2)
&& Close[1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,1) && High[1]==iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,4,1))
&& High[1]>iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_UPPER,1)
) {
RemoveStopsandTargets();
open_price2 = NormalizeDouble(Ask, Digits);
stop_loss_price2 = NormalizeDouble(0.00,Digits);
take_profit_price2 = NormalizeDouble(0,Digits);
for (i = OrdersTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS))
if (OrderMagicNumber() == magic_number2) {
order_type = OrderType();
if (order_type == ORDER_TYPE_BUY) {
if ((NormalizeDouble(OrderOpenPrice(), Digits) != open_price2) || (NormalizeDouble(OrderStopLoss(), Digits) != stop_loss_price2) || (NormalizeDouble(OrderTakeProfit(), Digits) != take_profit_price2)) {
if (!OrderModify(OrderTicket(), open_price2, stop_loss_price2, take_profit_price2, OrderExpiration()))
Print("Error: ", ErrorDescription(_LastError));
}
break;
}
else if (order_type == ORDER_TYPE_BUY)
break;
}
if (i < 0)
if (OrderSend(symbol, OP_BUY, NormalizeDouble((nshorts-nlongs)*overhedge/100,2), open_price2, 3, stop_loss_price2, take_profit_price2, magic_number2+" EQUITY HEDGER BUY 0/0", magic_number2) < 0)
Print("Error: ", ErrorDescription(_LastError));
}
else
for (i = OrdersTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS))
if (OrderMagicNumber() == magic_number2 )
if (OrderType() == ORDER_TYPE_BUY_STOP)
if (!OrderDelete(OrderTicket()))
Print("Error: ", ErrorDescription(_LastError));
// Parabolic break down OverHedge For Longs
if (nshorts<nlongs && (Low[3]<Low[4] || Low[4]<Low[5])
&& Close[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,3)
&& High[1]-Low[1]<900*Point
&& (High[3]-Low[3]>400*Point || (Close[4]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,4) && Close[5]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,5)))
&& Low[i]>Low[3] && Close[2]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,2)
&& Close[1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,1)+20*Point
&& Low[1]<=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,4,1))+20*Point
&& Low[1]<iBands(symbol,0,120,2,0,PRICE_MEDIAN,MODE_LOWER,1))
{
RemoveStopsandTargets();
open_price2 = NormalizeDouble(Bid, Digits);
stop_loss_price2 = NormalizeDouble(0,Digits);
take_profit_price2 = NormalizeDouble(0,Digits);
for (i = OrdersTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS))
if (OrderMagicNumber() == magic_number2) {
order_type = OrderType();
if (order_type == ORDER_TYPE_SELL) {
if ((NormalizeDouble(OrderOpenPrice(), Digits) != open_price2) || (NormalizeDouble(OrderStopLoss(), Digits) != stop_loss_price2) || (NormalizeDouble(OrderTakeProfit(), Digits) != take_profit_price2)) {
if (!OrderModify(OrderTicket(), open_price2, stop_loss_price2, take_profit_price2, OrderExpiration()))
Print("Error: ", ErrorDescription(_LastError));
}
break;
}
else if (order_type == ORDER_TYPE_SELL)
break;
}
if (i < 0)
if (OrderSend(symbol, OP_SELL, NormalizeDouble((nlongs-nshorts)*overhedge/100,2), open_price2, 3, stop_loss_price2, take_profit_price2, magic_number2+" EQUITY HEDGER SELL 0/0", magic_number2) < 0)
Print("Error: ", ErrorDescription(_LastError));
}
else
for (i = OrdersTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS))
if (OrderMagicNumber() == magic_number2)
if (OrderType() == ORDER_TYPE_SELL_STOP)
if (!OrderDelete(OrderTicket()))
Print("Error: ", ErrorDescription(_LastError));
return(0);
}
}
double RemoveStopsandTargets()
{
int i;
for (i = OrdersTotal() - 1; i >= 0; i--){
if( OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
if( OrderType()==OP_BUYSTOP && MathAbs(OrderOpenPrice()-Ask)<.003)
OrderDelete( OrderTicket() );
else if( OrderType()==OP_SELLSTOP && MathAbs(OrderOpenPrice()-Bid)<.003)
OrderDelete(OrderTicket());}
for (i = OrdersTotal() - 1; i >= 0; i--){
if( OrderSelect(i,SELECT_BY_POS)){
if (OrderType() == OP_SELL
//&& OrderMagicNumber()!=magic_number3
){
if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(0,4), NormalizeDouble(0,4), OrderExpiration()))
Print("Error: ", ErrorDescription(_LastError));
}
if (OrderType() == OP_BUY
//&& OrderMagicNumber()!=magic_number3
) {
if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(0,4), NormalizeDouble(0,4), OrderExpiration()))
Print("Error: ", ErrorDescription(_LastError));
}
}
}
return(0);
}
I am baffled by people who think they can trade everything. I am barely starting to develope some understanding for one single instrument’s behavior.
This front part is my first thoughts about the differences between the parabolic and anabolic markets, how to identify them, and what exits to look for.
The market type is determined by the initial speed burst (intake) and the presence or lack of a follow-up enthusiasm
The parabolic market is all about high volume dumps & double pumps Particularly interesting are the pro-candles outside the BB The primary exit is anywhere beyond a pro volume with a counter directional color The secondary exit is the 120BB This market is prone to cause capitulation(s)
The anabolic market is about divergences & taper A slow divergence to match and a quick taper for an extra 30 pips
You want to see the time gap between the switching off market speed prints, 10 hours at least between 25+ reads. An opening print is qualified with a 25+ read (15+ pips beyond the 30BB HL2).
This is a serious acceleration to the downside, which is at 51 already.
The Four Tops (Outside 3BBs Fractal) and the Loco In Acapulco (professionals dumping longs on that doji).
Now, watch my hand because I’m cheating. A capitulation comes with a major reversal, typically a 100-pip bounce. The driven thrusts can build on each other; see how the second one is outside the 30-BB from the get-go. I would target the lower BB with the shorts since the second thrust brought on a reversal.