Understanding Market Direction

The overall market direction gets decided by a wave 1 print that is visible on the 1H chart.

So, step 1 is to plot my Stochastic Combo indicator (will put it up from home) – now with even more plots – then listen and learn.

You would have to plot it as 3rd indicator below to see the additional plots, or change the window numbers in the source – sorry.

Figure #1

A wave 1 is a full throttle move, which means that both the red and the green stochastic lines make a bee line that connects the oversold with the overbought field. A wave ends in an even split – one line in the overbought, the other in the oversold. In this instance the F and the stripe both meant to draw attention for a fresh overbought sell signal.
The next fresh overbought was also a wave 2 of Wave 3 down , and the 3rd blue block happened in the early part of Wave 4.

A turn should start to happen on a lower time frame and start to propagate upwards, but if you saw a Wave 1 print, you must do all in your power to change / reverse your direction holding direction on the separation of Wave 2.

As an exercise, could you spot the primary Wave 1 and the “must reverse” stochastic set up of Wave 2?

A primary Wave 1 is a Market Maker approved reversal, a secondary Wave 1 does not come with the change the of Wave structure’s direction.

Figure #3 has a secondary Wave 1 on it

Figure #4: The primary Wave 1 down happened earlier, here
//+------------------------------------------------------------------+
//|                                             Stochastic Combo.mq4 |
//|                                         Copyright 2019, Macdulio |
//+------------------------------------------------------------------+
#property copyright   "2019, Macdulio"
#property link        "https://forexfore.blog"
#property description "Stochastic Combo"
#property strict

#property indicator_separate_window
#property indicator_minimum    0
#property indicator_maximum    100
#property indicator_buffers    2
#property indicator_color1     LightSeaGreen
#property indicator_color2     Red
#property indicator_level1     20.0
#property indicator_level2     80.0
#property indicator_level3     35.0
#property indicator_level4     65.0
#property indicator_levelcolor clrBlack
#property indicator_levelstyle STYLE_DASH

extern double FSize=32;
double FMax = FSize*6/5;

double stoch[], stoch30[], RSI2[];
//---------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   string short_name;
//--- 2 additional buffers are used for counting.
   IndicatorBuffers(2);
//--- indicator lines
   SetIndexStyle(0,DRAW_LINE,EMPTY,5,indicator_color1);
   SetIndexBuffer(0, stoch30);
   SetIndexStyle(1,DRAW_LINE,EMPTY,4,indicator_color2);
   SetIndexBuffer(1,stoch);

//---
    return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Stochastic oscillator                                            |
//+------------------------------------------------------------------+
int start()
  {
   int    i;
   string symbol = Symbol();
  ArrayResize(stoch, 600);   
 ArrayInitialize(stoch, EMPTY_VALUE); 
  ArrayResize(stoch30, 600);   
 ArrayInitialize(stoch30,  EMPTY_VALUE);  
 ArrayResize(RSI2, 600);   
 ArrayInitialize(RSI2, EMPTY_VALUE); 

 deletetxt1("Jeat");
  deletetxt1("Tit"); 
   for(i=300; i>=0; i--){
          stoch[i]=iStochastic(symbol,0,9,3,3,MODE_SMA,0,MODE_SIGNAL,i);
           stoch30[i]=iStochastic(symbol,0,30,3,3,MODE_SMA,0,MODE_SIGNAL,i);
           RSI2[i]= iRSI(symbol,0,2,PRICE_MEDIAN,i);
           
            if ( (stoch30[i]>stoch[i] && stoch30[i+1]<=stoch[i+1] && stoch[i]>70)  || (stoch[i]<80 && stoch[i+1]>80 && stoch30[i]>stoch[i])  || (stoch[i]>70 && stoch30[i]<35 ) )  { 
             ObjectCreate("Jeat"+DoubleToStr(i)+DoubleToStr(3), OBJ_ELLIPSE, 3, Time[i],  100, Time[i], 95);
         ObjectSetInteger(0,"Jeat"+DoubleToStr(i)+DoubleToStr(3),OBJPROP_COLOR,clrOrangeRed);
         ObjectSetDouble(0,"Jeat"+DoubleToStr(i)+DoubleToStr(3),OBJPROP_SCALE,.045);
        ObjectSet("Jeat"+DoubleToStr(i)+DoubleToStr(3),OBJPROP_BACK,0);
        ObjectSet("Jeat"+DoubleToStr(i)+DoubleToStr(3),OBJPROP_WIDTH,38);}
        
        
                  if ( (stoch30[i]<stoch[i] && stoch30[i+1]>=stoch[i+1] && stoch[i]<30)   ||  (stoch[i]>20 && stoch[i+1]<20 && stoch30[i]<stoch[i] && stoch30[i]<10) || (stoch[i]<30 && stoch30[i]>70 && stoch[i+1]<30 && stoch30[i+1]>70) )  { 
             ObjectCreate("Jeat"+DoubleToStr(i)+DoubleToStr(3), OBJ_ELLIPSE, 3, Time[i],  0, Time[i], 5);
         ObjectSetInteger(0,"Jeat"+DoubleToStr(i)+DoubleToStr(3),OBJPROP_COLOR,clrLimeGreen);
         ObjectSetDouble(0,"Jeat"+DoubleToStr(i)+DoubleToStr(3),OBJPROP_SCALE,.045);
        ObjectSet("Jeat"+DoubleToStr(i)+DoubleToStr(3),OBJPROP_BACK,0);
        ObjectSet("Jeat"+DoubleToStr(i)+DoubleToStr(3),OBJPROP_WIDTH,38);}
        
       if (Period()==60){ 
       
        if ((Close[i]>iMA(NULL,0,207,0,MODE_EMA, PRICE_LOW,i)+FMax*10*Point || stoch30[i+1]<30 ) && stoch[i+2]<65 && stoch[i]>65){ 
        ObjectCreate("Titx"+DoubleToStr(i), OBJ_TEXT, 3, Time[i], 89);   ObjectSetText("Titx"+DoubleToStr(i), "F", 32, "Arial Black", Navy);
           if (Close[i]<iMA(symbol,0,68,0,MODE_EMA,PRICE_LOW,i))    { ObjectCreate("Tity"+IntegerToString(i),OBJ_VLINE,3, Time[i], 0);
            ObjectSet("Tity"+IntegerToString(i),OBJPROP_COLOR,clrBlue );
            ObjectSet("Tity"+IntegerToString(i),OBJPROP_WIDTH,9);
            ObjectSet("Tity"+IntegerToString(i),OBJPROP_STYLE,STYLE_DOT);
            ObjectSet("Tity"+IntegerToString(i),OBJPROP_BACK,1);}
            
        }
       
        if ((Close[i]<iMA(NULL,0,207,0,MODE_EMA, PRICE_LOW,i)-FMax*10*Point || stoch30[i+1]>80 ) && stoch[i+2]>35 && stoch[i]<35){ 
        ObjectCreate("Titx"+DoubleToStr(i), OBJ_TEXT, 3, Time[i], 27);   ObjectSetText("Titx"+DoubleToStr(i), "F", 32, "Arial Black", Teal);
             if (Close[i]>iMA(symbol,0,68,0,MODE_EMA,PRICE_HIGH,i)) {ObjectCreate("Tity"+IntegerToString(i),OBJ_VLINE,3, Time[i], 0);
            ObjectSet("Tity"+IntegerToString(i),OBJPROP_COLOR,clrGreen );
            ObjectSet("Tity"+IntegerToString(i),OBJPROP_WIDTH,9);
            ObjectSet("Tity"+IntegerToString(i),OBJPROP_STYLE,STYLE_DOT);
            ObjectSet("Tity"+IntegerToString(i),OBJPROP_BACK,1);}
        }
       
       
           
         if (RSI2[i]<=RSI2[i+1] && RSI2[i+3]<RSI2[i+1] && RSI2[i+1]>81 && stoch[i+1]>68 && stoch30[i+1]>60){
                  
                  
          if (Close[i]>iMA(NULL,0,828,0,MODE_EMA, PRICE_HIGH,i)+FMax*10*Point){ ObjectCreate("Tit"+DoubleToStr(i), OBJ_TEXT, 3, Time[i+1], 55);   ObjectSetText("Tit"+DoubleToStr(i), "S/C", 22, "Arial Black", Gray);}
          else {ObjectCreate("Tit"+DoubleToStr(i), OBJ_TEXT, 3, Time[i+1], 85);  ObjectSetText("Tit"+DoubleToStr(i), "S", 32, "Arial Black", Maroon);}}
         
         if (RSI2[i]>RSI2[i+1] && RSI2[i+2]>RSI2[i+1]  && stoch[i]<30 && ((stoch30[i+1]<40 && RSI2[i+1]<9) ||  (Close[i+1]>iMA(NULL,0,30,0,MODE_SMA, PRICE_CLOSE,i+1)) && RSI2[i+1]<15 && (stoch30[i+1]<50 || stoch30[i+1]>60)  )){
                 
      if (Close[i]<iMA(NULL,0,828,0,MODE_EMA, PRICE_LOW,i)-FMax*10*Point ) { ObjectCreate("Tit"+DoubleToStr(i), OBJ_TEXT, 3, Time[i+1], 55);  ObjectSetText("Tit"+DoubleToStr(i), "B/C", 32, "Arial Black", Gray);}               
                  else if (stoch[i]<35 && stoch[i+1]>stoch30[i+1]+12) { ObjectCreate("Tit"+DoubleToStr(i), OBJ_TEXT, 3, Time[i+1], 45); ObjectSetText("Tit"+DoubleToStr(i), "B", 32, "Arial Black", Maroon);}
                  else if (stoch[i+1]<stoch30[i+1]) { ObjectCreate("Tit"+DoubleToStr(i), OBJ_TEXT, 3, Time[i+1], 45); ObjectSetText("Tit"+DoubleToStr(i), "B", 32, "Arial Black", Maroon);}
                  
                  
                if (RSI2[i]>RSI2[i+1] && RSI2[i+2]>RSI2[i+1]  && stoch[i]<30 && 
                stoch30[i]>70 && stoch30[i+1]>70 &&  stoch30[i+2]>70 &&  stoch30[i+3]>70 && stoch30[i+4]>70 && stoch30[i+5]>70 && stoch30[i+6]>70 &&  stoch30[i+7]>70 &&  stoch30[i+8]>70 
                && RSI2[i+1]<15 ){
                  ObjectCreate("Tite"+DoubleToStr(i), OBJ_TEXT, 3, Time[i+3], 45); 
                  ObjectSetText("Tite"+DoubleToStr(i), "EB", 32, "Arial Black", Blue);        
                  
                  }
                  }
         
           
           }}
   

  return(0);
}
//+------------------------------------------------------------------+

void deletetxt1(string what){
   for(int iObj=ObjectsTotal()-1; iObj >= 0; iObj--){
      string   on = ObjectName(iObj);
      if(StringFind(on, what) == 0)  ObjectDelete(on);