A current version of the Stochastic Bars Hybrid.

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.
//+------------------------------------------------------------------+
//+ Stochastic Bars Hybrid Current 04/2025 +
//+------------------------------------------------------------------+
#property copyright "Macdulio"
#property link "https://forexfore.blog/"
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_maximum 1
#property indicator_minimum 0
extern int indicator_window = 1;
extern bool plot_r1_s1 = true;
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double RSI2[];
//double ma[];
//
//
//
//
//
extern int K_Period = 25;
extern int K_Period2 = 60;
extern int K_Period3 = 100;
extern int D_Period = 3;
extern int Slowing = 3;
extern int TopBorder=90;
extern int BotBorder=10;
extern int BotBorder2=5;
extern int BotBorder3=3;
extern string TypeMA = "SMA=0, EMA=1, SMMA=2, LWMA=3";
extern int MAType = 0;
//extern int MAShift = 0;
extern string TypePrice = "0 - Low/High, 1 - Close/Close";
extern int PriceType = 0;
double ExtMapBuffer[];
//
//
//
//
//
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool starterup[], starterdn[];
int init()
{
IndicatorBuffers(4);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexBuffer(2,ExtMapBuffer3);
// SetIndexBuffer(3,ma);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexStyle(2,DRAW_HISTOGRAM);
return(0);
}
int start()
{
double weight;
int counted_bars=IndicatorCounted();
int limit,i,i2,j,j2;
string symbol = Symbol();
ArrayResize(RSI2, Bars);
ArrayInitialize(RSI2, 0);
ArrayResize(starterup, Bars);
ArrayInitialize(starterup, false);
ArrayResize(starterdn, Bars);
ArrayInitialize(starterdn, false);
ArrayResize(ExtMapBuffer, Bars);
ArrayInitialize(ExtMapBuffer, 0);
double ATRA = 0;
for (i=1; i<=3; i++){
ATRA = ATRA+iATR(NULL,1440,14,i);}
i=0;
while (i<200){
if (ChoppinessIndex(12*4,i)>53 && ChoppinessIndex(12*4,i+1)<53) break;
i++;
}
if (i<200) weight=(iHigh(symbol,15,i)+iLow(symbol,15,i))/2;
deletetxt1("First");
deletetxt1("Winner");
deletetxt1("Dinner");
deletetxt1("Pinner");
deletetxt1("Bacadi");
deletetxt1("Dalton");
for(i = 220; i >= 0; i--){
RSI2[i]=iRSI(symbol,0,2,PRICE_MEDIAN,i);
}
if(counted_bars < 0) return(-1);
if(counted_bars>0) counted_bars--;
limit = Bars-counted_bars;
// for(i = limit; i >= 0; i--) ma[i]=iMA(NULL,0,MAPeriod,MAShift,MAType,PriceType,i);
for(i = limit; i >= 0; i--)
{
double St=iStochastic(NULL,0,K_Period,D_Period,Slowing,MAType,PriceType,MODE_MAIN,i);
double St2=iStochastic(NULL,0,K_Period2,D_Period,Slowing,MAType,PriceType,MODE_MAIN,i);
double St3=iStochastic(NULL,0,K_Period3,D_Period,Slowing,MAType,PriceType,MODE_MAIN,i);
ExtMapBuffer1[i] = EMPTY_VALUE;
ExtMapBuffer2[i] = EMPTY_VALUE;
ExtMapBuffer3[i] = EMPTY_VALUE;
// if (St>BotBorder && St<TopBorder) ExtMapBuffer1[i] = 1;
if (St2<BotBorder2 && (St<BotBorder || St3<BotBorder3)) ExtMapBuffer2[i] = 1;
if (St>TopBorder) ExtMapBuffer3[i] = 1;
}
for(i = 1920; i >= 0; i--){
///starter candle up
if (High[i+1]-Open[i+1]>40*Point && High[i+1]-Close[i+1]>40*Point && High[i+2]<High[i+1] && High[i]<High[i+1] &&
High[i+1]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+1)
&& iHigh(symbol,0,i+1)>iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,7,i+2))
&& Close[i]<Close[i+1]
){
ObjectCreate("Dalton"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+1], High[i+1]+20*Point);
ObjectSetText("Dalton"+DoubleToStr(i), "ST", 22, "Impact", DimGray);
starterup[i+1]=true;
}
///runner down
if (starterup[i+2]
&& iLow(symbol,0,i)<iLow(symbol,0,iLowest(symbol,0,MODE_LOW,7,i+1))-20*Point
){
// ObjectCreate("Dalton"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+2], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,14,i+1))+50*Point);
// ObjectSetText("Dalton"+DoubleToStr(i), "RUNNER", 22, "Impact", Crimson );
}
///eraser down
// if (starterup[i+2]
// && iLow(symbol,0,i)>=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,7,i+1))-20*Point
// ){
// ObjectCreate("Dalton"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+2], iLow(symbol,0,iLowest(symbol,0,MODE_LOW,14,i+1))+50*Point);
// ObjectSetText("Dalton"+DoubleToStr(i), "ERASER", 22, "Impact", Green);
// }
///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);
}
///hot fractal on bottom (must overhedge for the break)
if (iFractals(symbol,0,MODE_LOWER,i) && ExtMapBuffer2[i]!=EMPTY_VALUE && ExtMapBuffer2[i+1]!=EMPTY_VALUE
//&& ExtMapBuffer2[i+2]!=EMPTY_VALUE
&& (Close[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i) || Close[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+1))
) {
ObjectCreate("Daltoni"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+5], Low[i]-20*Point);
ObjectSetText("Daltoni"+DoubleToStr(i), "CAT V BACK", 22, "Impact", Crimson);
}
///starter candle dn
if (Open[i+1]-Low[i+1]>50*Point && Close[i+1]-Low[i+1]>50*Point && Low[i+2]>Low[i+1] && Low[i]>Low[i+1] &&
Low[i+1]<iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+1)
&& iLow(symbol,0,i+1)<iLow(symbol,0,iLowest(symbol,0,MODE_LOW,7,i+2))
&& Close[i]>Close[i+1]
){
ObjectCreate("Dalton"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+1], Low[i+1]-30*Point);
ObjectSetText("Dalton"+DoubleToStr(i), "ST", 22, "Impact", DimGray);
starterdn[i+1]=true;
}
///rat poison going up
if (Close[i]>Open[i] && Close[i+1]>Open[i+1]
&& (Close[i+2]>Open[i+2] || Close[i+2]>Low[i+2]+120*Point)
&& High[i]-Low[i]<360*Point
&& High[i+2]-Low[i+2]<340*Point
&& High[i]>High[i+1]
&& High[i+1]>High[i+2]
&& Low[i+1]>Low[i+2]
&& Low[i+3]>Low[i+2]
&& (Low[i+9]>iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i+9) || High[i+9]<iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i+9))
&& ((Open[i+2]-Low[i+2]>50*Point && Close[i+2]-Low[i+2]>50*Point && Low[i+2]<iMA(symbol,0,16,0,MODE_EMA,PRICE_OPEN,i+2) && iMA(symbol,0,16,0,MODE_EMA,PRICE_OPEN,i)<iMA(symbol,0,8,0,MODE_EMA,PRICE_MEDIAN,i) && High[i+2]-Low[i+2]<400*Point)
|| (Open[i+3]-Low[i+3]>50*Point && Close[i+3]-Low[i+3]>50*Point && Low[i+3]<iMA(symbol,0,16,0,MODE_EMA,PRICE_OPEN,i+3) && iMA(symbol,0,16,0,MODE_EMA,PRICE_OPEN,i)<iMA(symbol,0,8,0,MODE_EMA,PRICE_MEDIAN,i) && High[i+3]-Low[i+3]<400*Point) )
){
ObjectCreate("Firstrat"+IntegerToString(i), OBJ_TREND, 0, Time[i+3], Open[i]-40*Point, Time[i], Open[i]-40*Point);
ObjectSetInteger(0,"Firstrat"+IntegerToString(i),OBJPROP_COLOR,clrYellow);
ObjectSet("Firstrat"+IntegerToString(i),OBJPROP_BACK,0);
ObjectSet("Firstrat"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("Firstrat"+IntegerToString(i),OBJPROP_WIDTH,3);
ObjectCreate("Firstrats"+IntegerToString(i), OBJ_TREND, 0, Time[i+3], Close[i]-20*Point, Time[i], Close[i]-20*Point);
ObjectSetInteger(0,"Firstrats"+IntegerToString(i),OBJPROP_COLOR,clrGreen);
ObjectSet("Firstrats"+IntegerToString(i),OBJPROP_BACK,0);
ObjectSet("Firstrats"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("Firstrats"+IntegerToString(i),OBJPROP_WIDTH,6);
ObjectCreate("Bacadiy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+6], Close[i]+20*Point);
ObjectSetText("Bacadiy"+DoubleToStr(i), "RPBUY @"+DoubleToStr(NormalizeDouble(Close[i]-20*Point,4),4), 17, "Impact", MediumOrchid);
if (High[i]-Low[i]<140*Point && High[i+1]-Low[i+1]<140*Point && High[i+2]-Low[i+2]<140*Point) ObjectSetText("Bacadiy"+DoubleToStr(i), "NOT ENOUGH VOLATILIY", 17, "Impact", Gray);
if (High[i]-iLow(symbol,0,iLowest(symbol,0,MODE_LOW,200,i))<800*Point) ObjectSetText("Bacadiy"+DoubleToStr(i), "NO RAT, NOT OUTSIDE...", 17, "Impact", DimGray);
}
/// clutch on the upside
if (Open[i]<Close[i] && High[i]>High[i+1] && Open[i+1]>Close[i+1] && Open[i+2]<Close[i+2] && Open[i+3]<Close[i+3] && Open[i+4]<Close[i+4]
&& High[i+2]>High[i+3] && High[i+3]>High[i+4] && Low[i+2]>Low[i+3] && Low[i+3]>Low[i+4]
// && High[i+2]-Low[i+2]<240*Point
&& (Close[i]>Open[i+1] || Close[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1))
&& High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)
//&& Close[i]>High[i]-(High[i]-Low[i])/5
// && High[i+1]>weight+960*Point
){
ObjectCreate("Bacadiy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+6], Close[i]+20*Point);
ObjectSetText("Bacadiy"+DoubleToStr(i), "CLUTCH!!!", 47, "Impact", MediumSeaGreen);
ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i+4], Low[i+4], Time[i], Close[i]);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Khaki);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,15);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
}
/// clutch on the downide
if (Open[i]>Close[i] && Low[i]<Low[i+1] && Open[i+1]<Close[i+1] && Open[i+2]>Close[i+2] && Open[i+3]>Close[i+3] && Open[i+4]>Close[i+4]
&& Low[i+2]<Low[i+3] && Low[i+3]<Low[i+4] && Low[i+4]<Low[i+5] && High[i+2]<High[i+3] && High[i+3]<High[i+4] && High[i+4]<High[i+5]
&& Low[i]<Low[i+2]
&& High[i+4]-Low[i+4]<250*Point
//&& Low[i+1]<weight-960*Point
){
ObjectCreate("Bacadiy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+6], Close[i]+20*Point);
ObjectSetText("Bacadiy"+DoubleToStr(i), "CLUTCH!!!", 47, "Impact", Crimson);
ObjectCreate("Pinner"+IntegerToString(i),OBJ_TREND,0, Time[i+4], High[i+4], Time[i], Close[i]);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_COLOR,Khaki);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_WIDTH,15);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
}
///rat poison going down
if (Close[i]<Open[i] && Close[i+1]<Open[i+1]
&& (Close[i+2]<Open[i+2] || Close[i+2]<High[i+2]-120*Point)
&& High[i]-Low[i]<360*Point
&& High[i]<High[i+1]
&& High[i+1]<High[i+2]
&& Low[i+1]<Low[i+2]
//&& Low[i+3]<Low[i+2]
&& ((High[i+2]-Open[i+2]>50*Point && High[i+2]-Close[i+2]>50*Point && High[i+2]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+2) && iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i)>iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i) && High[i+2]-Low[i+2]<400*Point)
|| (High[i+3]-Open[i+3]>50*Point && High[i+3]-Close[i+3]>50*Point && Low[i+3]>iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i+3) && iMA(symbol,0,16,0,MODE_EMA,PRICE_MEDIAN,i)>iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i) && High[i+3]-Low[i+3]<400*Point)
)){
ObjectCreate("Firstrat"+IntegerToString(i), OBJ_TREND, 0, Time[i+3], Open[i]+40*Point, Time[i], Open[i]+40*Point);
ObjectSetInteger(0,"Firstrat"+IntegerToString(i),OBJPROP_COLOR,clrYellow);
ObjectSet("Firstrat"+IntegerToString(i),OBJPROP_BACK,0);
ObjectSet("Firstrat"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("Firstrat"+IntegerToString(i),OBJPROP_WIDTH,3);
ObjectCreate("Firstrats"+IntegerToString(i), OBJ_TREND, 0, Time[i+3], Close[i]+20*Point, Time[i], Close[i]+20*Point);
ObjectSetInteger(0,"Firstrats"+IntegerToString(i),OBJPROP_COLOR,clrRed);
ObjectSet("Firstrats"+IntegerToString(i),OBJPROP_BACK,0);
ObjectSet("Firstrats"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
ObjectSet("Firstrats"+IntegerToString(i),OBJPROP_WIDTH,6);
ObjectCreate("Bacadiy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+6], Close[i]-20*Point);
ObjectSetText("Bacadiy"+DoubleToStr(i), "RPSELL @"+DoubleToStr(NormalizeDouble(Close[i]+20*Point,4),4), 17, "Impact", MediumOrchid);
if (High[i]-Low[i]<140*Point && High[i+1]-Low[i+1]<140*Point && High[i+2]-Low[i+2]<140*Point) ObjectSetText("Bacadiy"+DoubleToStr(i), "NOT ENOUGH VOLATILIY", 17, "Impact", Gray);
if (iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,200,i))-Low[i]<800*Point) ObjectSetText("Bacadiy"+DoubleToStr(i), "NO RAT, NOT OUTSIDE...", 17, "Impact", DimGray);
if (High[i+1]-Low[i+1]>200*Point && Low[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+1))
ObjectSetText("Bacadiy"+DoubleToStr(i), "RPSELL INTO BB30 ONLY from "+DoubleToStr(NormalizeDouble(Close[i]+20*Point,4),4), 17, "Impact", MediumOrchid);
}
///cat exit on top
if (High[i]>=iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,20,i+1))-40*Point &&
(Low[i]<iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i)+40*Point
|| Low[i+1]<iMA(symbol,0,8,0,MODE_EMA,PRICE_OPEN,i+1)+40*Point)
&&
i>0 && iFractals(symbol,0,MODE_UPPER,i) && ExtMapBuffer3[i]==EMPTY_VALUE && ExtMapBuffer3[i-1]==EMPTY_VALUE){
j=i+2;
while (j<i+30){
if (iFractals(symbol,0,MODE_UPPER,j) && (ExtMapBuffer3[j]!=EMPTY_VALUE || ExtMapBuffer3[j-1]!=EMPTY_VALUE)) break;
j++;
}
if (iFractals(symbol,0,MODE_UPPER,j) && j<i+30){
ObjectCreate("Bacadiy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+3], High[i]+20*Point);
ObjectSetText("Bacadiy"+DoubleToStr(i), "CAT EXIT @"+DoubleToStr(NormalizeDouble(High[i],4),4), 27, "Impact", Magenta);
if (i>1 && Low[i-2]<Low[i-1]){
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 (High[i]-Close[i]>500*Point && High[i]-Open[i]>500*Point) ObjectSetText("Bacadiy"+DoubleToStr(i), "Runway Candle @"+DoubleToStr(NormalizeDouble(High[i],4),4), 17, "Impact", Green);
if (High[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i) && High[i]>iHigh(symbol,0,iHighest(symbol,0,MODE_HIGH,20,i+1))) ObjectSetText("Bacadiy"+DoubleToStr(i), "TEMP CAT EXIT @"+DoubleToStr(NormalizeDouble(High[i],4),4)+" Back In at 3/4 BB", 17, "Impact", Orange);
ObjectCreate("Bacadiyy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+3], iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i)-80*Point);
ObjectSetText("Bacadiyy"+DoubleToStr(i), "-> BB30L-10 RES, (BB30L+10 means break)", 17, "Impact", Crimson);
if (High[i]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i)) ObjectSetText("Bacadiyy"+DoubleToStr(i), "-> doji queue, resumption", 17, "Impact", OrangeRed);
}
}
///cat exit on bottom
if (Low[i]<=iLow(symbol,0,iLowest(symbol,0,MODE_LOW,20,i)) &&
i>0 && iFractals(symbol,0,MODE_LOWER,i) && ExtMapBuffer2[i]==EMPTY_VALUE && ExtMapBuffer2[i-1]==EMPTY_VALUE){
j=i+2;
while (j<i+30){
if (iFractals(symbol,0,MODE_LOWER,j) && (ExtMapBuffer2[j]!=EMPTY_VALUE || ExtMapBuffer2[j-1]!=EMPTY_VALUE)) break;
j++;
}
if (iFractals(symbol,0,MODE_LOWER,j) && j<i+30){
ObjectCreate("Bacadiy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+3], Low[i]+20*Point);
ObjectSetText("Bacadiy"+DoubleToStr(i), "CAT EXIT @"+DoubleToStr(NormalizeDouble(Low[i],4),4), 27, "Impact",Magenta);
ObjectCreate("Bacadiyy"+DoubleToStr(i), OBJ_TEXT, 0, Time[i+3], iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_MAIN,i)+80*Point);
ObjectSetText("Bacadiyy"+DoubleToStr(i), "-> BB30L+10 SUP, (BB30L-10 means break)", 17, "Impact", Green);
if (i>2){
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,15);
ObjectSet("Pinner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
}
}
}
///support made
if (High[i+1]-Low[i+1]>140*Point && Close[i+1]<Open[i+1]
&& Low[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+1)
&& Close[i]>Open[i] && Close[i]-Open[i]>(Open[i+1]-Close[i+1])*.51)
{
if (Open[i+1]-Close[i+1]<50*Point) ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Low[i+1]+20*Point, Time[i+1], Low[i+1]);
else ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Close[i+1]+20*Point, Time[i+1], Close[i+1]);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrBlue);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
}
///support with doji made
if (High[i+2]-Low[i+2]>140*Point && Close[i+2]<Open[i+2]
&& Low[i+2]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+2)
&& (Close[i+1]-Open[i+1]<20*Point && Open[i+1]-Close[i+1]<20*Point)
&& Close[i]>Open[i] && Close[i]-Open[i]>(Open[i+2]-Close[i+2])*.51)
{
if (Open[i+1]-Close[i+1]<50*Point) ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Low[i+1]+20*Point, Time[i+1], Low[i+1]);
else ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Close[i+2]+20*Point, Time[i+1], Close[i+2]);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrBlue);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
}
///s0 made
if (Low[i+1]<Low[i+2] && High[i+1]-Low[i+1]>140*Point && Close[i+1]<Open[i+1] && Low[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_LOWER,i+1) && Close[i]>Open[i] && Close[i]-Open[i]>(Open[i+1]-Close[i+1])*.55)
{
ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Close[i+1]+20*Point, Time[i+1], Close[i+1]);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrGray);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
}
///resistance made
if (High[i+1]-Low[i+1]>120*Point && Close[i+1]>Open[i+1]
&& High[i+1]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1) && Close[i]<Open[i] && Open[i]-Close[i]>(Close[i+1]-Open[i+1])*.55)
{
if (Close[i+1]-Open[i+1]<50*Point) ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], High[i+1]-20*Point, Time[i+1], High[i+1]);
else
ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Close[i+1]-20*Point, Time[i+1], Close[i+1]);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrRed);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
}
///resistance made (dark cloud)
if (i>0 && High[i]-Low[i]>210*Point && Close[i+1]>Open[i+1] && High[i]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i) && Close[i]<Open[i] && Open[i]-Close[i]>(Close[i+1]-Open[i+1])*.25 && Close[i-1]<Low[i+1])
{
ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Close[i+1]-20*Point, Time[i+1], Close[i+1]);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrRed);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
}
///resistance with doji made
if (High[i+2]-Low[i+2]>140*Point && Close[i+2]>Open[i+2] && High[i+2]>iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+2)
&& (Close[i+1]-Open[i+1]<20*Point && Open[i+1]-Close[i+1]<20*Point)
&& Close[i]<Open[i] && Open[i]-Close[i]>(Close[i+1]-Open[i+1])*.55)
{
ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+8], Close[i+2]-20*Point, Time[i+2], Close[i+2]);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrRed);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
}
///r0 made
if (High[i+1]>High[i+2] && High[i+1]-Low[i+1]>140*Point && Close[i+1]>Open[i+1] && High[i+1]<iBands(symbol,0,30,2,0,PRICE_MEDIAN,MODE_UPPER,i+1) && Close[i]<Open[i] && Open[i]-Close[i]>(Close[i+1]-Open[i+1])*.55)
{
ObjectCreate("Winner"+IntegerToString(i),OBJ_TREND,0, Time[i+7], Close[i+1]-20*Point, Time[i+1], Close[i+1]);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_COLOR,clrGray);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_WIDTH,8);
ObjectSet("Winner"+IntegerToString(i),OBJPROP_RAY_RIGHT,false);
}
///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);
}
}
deletetxt1("Eclipse");
j2=1;
while (j2<500 ){
j=j2+3;
if (iFractals(Symbol(),0,MODE_LOWER,j2))
while (j<j2+16){
if (RSI2[j2]<RSI2[j] && iFractals(Symbol(),0,MODE_LOWER,j) ) break;
j++;}
if (iFractals(Symbol(),0,MODE_LOWER,j) && iFractals(Symbol(),0,MODE_LOWER,j2) && RSI2[j2]<RSI2[j] && Low[j2]>=Low[j]-10*Point ) break;
j2++;}
///first lower continuation divergence
if (Period()==60 && plot_r1_s1){
if (j2>2) {
ObjectCreate("Eclipset"+DoubleToStr(j), OBJ_TRIANGLE, 0, Time[j2-3], Low[j2]+90*Point, Time[j2-3], Low[j2]-420*Point, Time[j2], Low[j2]);
ObjectSet("Eclipset"+DoubleToStr(j),OBJPROP_COLOR,clrNavy);
ObjectSet("Eclipset"+DoubleToStr(j),OBJPROP_BACK,0);
ObjectSet("Eclipset"+DoubleToStr(j),OBJPROP_WIDTH,1);
ObjectSet("Eclipset"+DoubleToStr(j),OBJPROP_STYLE,1);
ObjectCreate("Eclipse3_3ffx",OBJ_TEXT, 0, Time[j2-3], Low[j2]-400*Point);
ObjectSetText("Eclipse3_3ffx", " S1:"+DoubleToStr(NormalizeDouble(Low[j2]-410*Point,4),4), 17, "Impact", clrWhite);
ObjectCreate("Eclipse3_3ffy",OBJ_TEXT, 0, Time[j2-3], Low[j2]-400*Point);
ObjectSetText("Eclipse3_3ffy", "S1:"+DoubleToStr(NormalizeDouble(Low[j2]-410*Point,4),4), 17, "Impact", clrBlue);
ObjectCreate("Eclipse33_3ffx",OBJ_TEXT, 0, Time[j2-3], Low[j2]-ATRA*0.43);
ObjectSetText("Eclipse33_3ffx", " S2:"+DoubleToStr(NormalizeDouble(Low[j2]-ATRA*0.43,4),4), 17, "Impact", clrWhite);
ObjectCreate("Eclipse33_3ffy",OBJ_TEXT, 0, Time[j2-3], Low[j2]-ATRA*0.43);
ObjectSetText("Eclipse33_3ffy", "S2:"+DoubleToStr(NormalizeDouble(Low[j2]-ATRA*0.43,4),4), 17, "Impact", clrBlue);
}
}
i2=1;
while (i2<500){
i=i2+3;
if (iFractals(Symbol(),0,MODE_UPPER,i2))
while (i<i2+16 ){
if ( RSI2[i2]>RSI2[i] && iFractals(Symbol(),0,MODE_UPPER,i) && High[i2]<=High[i]-10*Point ) break;
i++;}
if (iFractals(Symbol(),0,MODE_UPPER,i) && iFractals(Symbol(),0,MODE_UPPER,i2) && RSI2[i2]>RSI2[i] && High[i2]<=High[i]-10*Point) break;
i2++;}
///first upper continuation divergence
if (Period()==60 && plot_r1_s1){
if (i2>2) {
ObjectCreate("Eclipset"+DoubleToStr(i), OBJ_TRIANGLE, 0, Time[i2-3], High[i2]-90*Point, Time[i2-3], High[i2]+420*Point, Time[i2], High[i2]);
ObjectSet("Eclipset"+DoubleToStr(i),OBJPROP_COLOR,clrNavy);
ObjectSet("Eclipset"+DoubleToStr(i),OBJPROP_BACK,0);
ObjectSet("Eclipset"+DoubleToStr(i),OBJPROP_WIDTH,1);
ObjectSet("Eclipset"+DoubleToStr(i),OBJPROP_STYLE,1);
ObjectCreate("Eclipse3_1ffx",OBJ_TEXT, 0, Time[i2-3], High[i2]+450*Point);
ObjectSetText("Eclipse3_1ffx", " R1:"+DoubleToStr(NormalizeDouble(High[i2]+410*Point,4),4), 17, "Impact", clrWhite);
ObjectCreate("Eclipse3_1ffy",OBJ_TEXT, 0, Time[i2-3], High[i2]+450*Point);
ObjectSetText("Eclipse3_1ffy", "R1:"+DoubleToStr(NormalizeDouble(High[i2]+410*Point,4),4), 17, "Impact", clrBlue);
ObjectCreate("Eclipse33_1ffx",OBJ_TEXT, 0, Time[i2-3], High[i2]+ATRA*0.43+40*Point);
ObjectSetText("Eclipse33_1ffx", " R2:"+DoubleToStr(NormalizeDouble(High[i2]+ATRA*0.43,4),4), 17, "Impact", clrWhite);
ObjectCreate("Eclipse33_1ffy",OBJ_TEXT, 0, Time[i2-3], High[i2]+ATRA*0.43+40*Point);
ObjectSetText("Eclipse33_1ffy", "R2:"+DoubleToStr(NormalizeDouble(High[i2]+ATRA*0.43,4),4), 17, "Impact", clrBlue);
}
}
deletetxt1("BverD");
if (Close[0]>weight+960*Point || Close[0]<weight-960*Point)
ObjectCreate("BverD",OBJ_LABEL,indicator_window, 0,0);
ObjectSet("BverD",OBJPROP_CORNER,2);
ObjectSet("BverD",OBJPROP_XDISTANCE,20);
ObjectSet("BverD",OBJPROP_YDISTANCE,27);
ObjectSetText("BverD","Parabolic Market?",40,"Impact",DeepPink);
///parabolic rectangles
ObjectCreate("Dinner", OBJ_RECTANGLE, 0, Time[1], weight+960*Point, Time[5], weight+4960*Point);
ObjectSetInteger(0,"Dinner",OBJPROP_COLOR,clrChartreuse);
ObjectSet("Dinner",OBJPROP_BACK,1);
ObjectSet("Dinner",OBJPROP_WIDTH,5);
ObjectCreate("Dinner_25", OBJ_TEXT, 0, Time[0], weight+960*Point+80*Point);
ObjectSetText("Dinner_25", " BRK: "+DoubleToStr(NormalizeDouble(weight+960*Point,4),4), 14, "Arial Black", Green);
ObjectCreate("Dinners", OBJ_RECTANGLE, 0, Time[1], weight-960*Point, Time[5], weight-4960*Point);
ObjectSetInteger(0,"Dinners",OBJPROP_COLOR,clrRed);
ObjectSet("Dinners",OBJPROP_BACK,1);
ObjectSet("Dinners",OBJPROP_WIDTH,5);
ObjectCreate("Dinner_26", OBJ_TEXT, 0, Time[0], weight-960*Point+30*Point);
ObjectSetText("Dinner_26", " BRK: "+DoubleToStr(NormalizeDouble(weight-960*Point,4),4), 14, "Arial Black", Red);
return(0);
}
double ChoppinessIndex(int period, int bar)
{
double Low0 = 0, High0 = 0, Close1 = 0;
double TrueRangeLow = 0, TrueRangeHigh = 0, TrueRangeSum = 0, Input = 0;
double PeriodTrueRangeLow = 999999999, PeriodTrueRangeHigh = 0, PeriodTrueRange = 0;
for(int k=bar; k<bar+period; k++)
{
Low0 = iLow(NULL,15,k);
High0 = iHigh(NULL,15,k);
Close1 = iClose(NULL,15,k+1);
if (Low0<Close1) TrueRangeLow = Low0; else TrueRangeLow = Close1;
if (High0>Close1) TrueRangeHigh = High0; else TrueRangeHigh = Close1;
if (TrueRangeLow <PeriodTrueRangeLow) PeriodTrueRangeLow = TrueRangeLow; // find true low of period
if (TrueRangeHigh>PeriodTrueRangeHigh) PeriodTrueRangeHigh = TrueRangeHigh; // find true high of period
TrueRangeSum += TrueRangeHigh;
TrueRangeSum -= TrueRangeLow;
}
PeriodTrueRange = PeriodTrueRangeHigh - PeriodTrueRangeLow;
if (PeriodTrueRange==0) PeriodTrueRange = MathPow(10, -12); // avoid possibility of division by zero
Input = TrueRangeSum / PeriodTrueRange;
return ((logN(Input, 10, MathPow(10, -12)) / logN(period, 10, MathPow(10, -12))) * 100);
}
double logN(double x, double base, double epsilon)
{
double integer = 0.0;
if ((x < 1) || (base < 1)) return(0);
while (x < 1)
{
integer -= 1;
x *= base;
}
while (x >= base)
{
integer += 1;
x /= base;
}
double partial = 0.5;
x *= x;
double decimal = 0.0;
while (partial > epsilon)
{
if (x >= base)
{
decimal += partial;
x = x / base;
}
partial *= 0.5;
x *= x;
}
return (integer + decimal);
}
double StdDev(int shift, int samples)
{
double x0=0, x1=0, x2=0;
for (int m=0; m<samples; m++)
{
x0 = ExtMapBuffer[m+shift];
x1 += x0;
x2 += MathPow(x0,2);
}
return(MathSqrt((x2-(x1*x1/samples))/(samples-1))); // minimum samples is 2, enforced in the init section
}
void deletetxt1(string text){
for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--){
string on = ObjectName(iObj);
if(StringFind(on, text) == 0) ObjectDelete(on);
} }