# 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 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

``````//+------------------------------------------------------------------+
//|                                             Stochastic Combo.mq4 |
//+------------------------------------------------------------------+
#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);``````