First, about a market profile tool on TradingView that I find useful.

I cannot fully embrace the terminology of “in balance”, but that’s what I must go with. If you want to see a seldom-interrupted trending move, you want the price to get outside last week’s volume profile, back test it a couple of times, and keep going. The zoom is far superior here as well, so I would plot the horizontal levels.

Now, the weekend project.

The idea is to use the MFI(7) to adjust a trail stop 20 pips out.
The day/week ended with a long trail stop run.
#property copyright "MFI TRAIL by Macdulio, (c) 2025"
#property link "http://www.forexfore.blog"
#property description "MFI TRAIL by Macdulio"
#property strict
#property indicator_chart_window
//separate_window
#property indicator_minimum -50
#property indicator_maximum 50
#property indicator_buffers 2
extern int indicator_window = 1;
extern int lookback = 900;
extern double FSize=32;
double FMax = FSize*6/5;
string symbol = Symbol();
//---- buffers
double MFI[],TRAIL[],TRAIL2[],stoch60[], RSI2[];
int init()
{
SetIndexStyle(0,DRAW_LINE,4,3,clrTeal);
SetIndexBuffer(0,TRAIL);
SetIndexStyle(1,DRAW_LINE,4,3,clrDeepPink);
SetIndexBuffer(1,TRAIL2);
return(0);
}
int start()
{
ArrayResize(RSI2, Bars);
ArrayInitialize(RSI2, 0);
ArrayResize(MFI, Bars);
ArrayInitialize(MFI, EMPTY_VALUE);
ArrayResize(TRAIL, Bars);
ArrayInitialize(TRAIL, EMPTY_VALUE);
ArrayResize(TRAIL2, Bars);
ArrayInitialize(TRAIL2, EMPTY_VALUE);
ArrayResize(stoch60, Bars);
ArrayInitialize(stoch60, EMPTY_VALUE);
int i;
for(i=Bars-60; i>=0; i--){
RSI2[i]=iRSI(symbol,0,2,PRICE_MEDIAN,i);
MFI[i]=iMFI(symbol,0,7,i);
stoch60[i]=iStochastic(symbol,60,60,3,3,MODE_SMA,0,MODE_MAIN,i);
}
deletetxt1("Box");
deletetxt1("Frog");
for (i = lookback; i >=0; i--) {
TRAIL[i]=TRAIL[i+1];
TRAIL2[i]=TRAIL2[i+1];
if (i>0 && High[i]>iMA(symbol,0,12,0,MODE_EMA,PRICE_MEDIAN,i) && Low[i]<iMA(symbol,0,12,0,MODE_EMA,PRICE_MEDIAN,i) && MFI[i]>76 && MFI[i]>MFI[i+1] && MFI[i]>MFI[i-1] && MFI[i+2]<76)
{
ObjectCreate("Box"+IntegerToString(i), OBJ_RECTANGLE, 0, Time[i-1], High[i], Time[i+3], High[i]+200*Point);
ObjectSetInteger(0,"Box"+IntegerToString(i),OBJPROP_COLOR,clrRed);
ObjectSet("Box"+IntegerToString(i),OBJPROP_WIDTH,3);
TRAIL[i]=High[i]+200*Point;
}
if (i>0 && High[i]>iMA(symbol,0,4,0,MODE_EMA,PRICE_MEDIAN,i) && Low[i]<iMA(symbol,0,4,0,MODE_EMA,PRICE_MEDIAN,i) && MFI[i]<19 && MFI[i]<MFI[i+1] && MFI[i]<MFI[i-1] )
{
ObjectCreate("Box"+IntegerToString(i), OBJ_RECTANGLE, 0, Time[i-1], Low[i], Time[i+3], Low[i]-200*Point);
ObjectSetInteger(0,"Box"+IntegerToString(i),OBJPROP_COLOR,clrLimeGreen);
ObjectSet("Box"+IntegerToString(i),OBJPROP_WIDTH,3);
TRAIL2[i]=Low[i]-200*Point;
}
///14.5-pip push up
if ((Close[i+2]-Low[i+2])<140*Point && (Close[i+1]-Low[i+1])<140*Point && (Close[i]-Low[i])>145*Point
&& stoch60[i]>stoch60[i+1]
){
ObjectCreate("Frogon"+IntegerToString(i), OBJ_RECTANGLE, 0, Time[i+2], Low[i], Time[i+1], Close[i]);
if ((Close[i]-Low[i])<200*Point) ObjectSetInteger(0,"Frogon"+IntegerToString(i),OBJPROP_COLOR,clrLightGreen);
else ObjectSetInteger(0,"Frogon"+IntegerToString(i),OBJPROP_COLOR,clrChartreuse);
ObjectSet("Frogon"+IntegerToString(i),OBJPROP_BACK,0);
ObjectSet("Frogon"+IntegerToString(i),OBJPROP_WIDTH,13);
}
///14.5-pip push down
if ((High[i+1]-Close[i+1])<140*Point && (High[i]-Close[i])>145*Point ){
//&& stoch60[i]<stoch60[i+1]
ObjectCreate("Frogo"+IntegerToString(i), OBJ_RECTANGLE, 0, Time[i+2], High[i], Time[i+1], Close[i]);
if ((High[i]-Close[i])<200*Point) ObjectSetInteger(0,"Frogo"+IntegerToString(i),OBJPROP_COLOR,clrLightSalmon);
else ObjectSetInteger(0,"Frogo"+IntegerToString(i),OBJPROP_COLOR,clrTomato);
ObjectSet("Frogo"+IntegerToString(i),OBJPROP_BACK,0);
ObjectSet("Frogo"+IntegerToString(i),OBJPROP_WIDTH,13);
}
}
deletetxt1("KLOPF");
ObjectCreate("KLOPF5", OBJ_TEXT, 0, Time[0], TRAIL[0]+10*Point);
ObjectSetText("KLOPF5", " SHORT STOP LOSS", 11, "Arial Black", DimGray);
ObjectCreate("KLOPF6", OBJ_TEXT, 0, Time[0], TRAIL2[0]+10*Point);
ObjectSetText("KLOPF6", " LONG STOP LOSS", 11, "Arial Black", DimGray);
// WindowRedraw();
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);
} }
Probably went too far short term, with 4x 3-BB out prints and the Momentum dipping into the toxic area.


Let the MFI TRAIL print the new sell box first.
2 French, 2 Instrumental on this one, the rest is mostly Disco / Electronic (Alternative).
From here on, more spam.
Isn’t that the guy from Blood Sport? – I got the inside joke.