Getting In The Groove

Getting in the groove – in my opinion – requires a lot.

You would need 2 brokers 2 hours of server time apart, to be able to have different grouping on 4h candles. A signal may show up with one broker, and not with the other.

You would need to start plotting the things that are most important, and these things can be found on the Daily, the 4H and the 30 minute charts.

Energy bands can certainly help you with gauging the possibilities.

4H/ 2H dojis’ fake outs can give you targets for example for retracements (see Cornsilk lines and the two boxes with the two fake-out numbers).

Stochastics with the right settings can help you find low risk new entries, i.e. sell the fresh 4h overbought in the daily embedded oversold (magenta stripes between the oscillator lines).

Monitoring for measuring legs and divergent legs provides you with an accurate picture of current reads. You should not be making any changes while a measuring leg is printing, exit & reverse upon a divergent leg, and only when the leg was printed entirely to prevent from false triggers.

Naming certain conditions such as I named some RSI2 sequences DDI and SD can help you remembering that a thrust is still due (with the only exception is upon having reached the end of the line – see the energy moat).

A sign of strength followed by a thrust is a peak, and you do not want to be buying until you saw 2 measuring legs printed in the opposite direction.

Invent a box with “bona fide reversal” label and put in 4h divergences with not both legs being in the overbought/oversold, and 4x 30-minute RSI2 divergences in it for starters.

Ring around the doji

//2H DOJI Lines by Macdulio
#property copyright "Copyright © 2019, Macdulio" 
#property link      "https://forexfore.blog" 
#property description "V1.0"
#property description "2H Doji Lines - "
#property description "plotting # maxlines (max 15) "
#property description "from the last 2-H dojis"
#property description "plus 2 boxes and two numbers"
#property description "around the very last two."
#include <stdlib.mqh>
#property indicator_chart_window
#property indicator_buffers 30
#property indicator_color1 Cornsilk
extern int maxlines = 8; 
extern int displaylength = 36;     
extern int       MinLengthOfUpTail=1; //candle with upper tail equal or more than this will show up
extern int       MinLengthOfLoTail=1; //candle with lower tail equal or more than this will show up
extern double    MaxLengthOfBody=30; //candle with body less or equal with this will show up
     
double pt=0.00001;
double lines[];
double mid[];

double line1[];
double line2[];
double line3[];
double line4[];
double line5[];
double line6[];
double line7[];
double line8[];
double line9[];
double line10[];
double line11[];
double line12[];
double line13[];
double line14[];
double line15[];

double vbru[];

string TimeFrame;
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,line1);
   SetIndexBuffer(1,line2);
   SetIndexBuffer(2,line3);
   SetIndexBuffer(3,line4);
   SetIndexBuffer(4,line5);  
   SetIndexBuffer(5,line6);
   SetIndexBuffer(6,line7);
   SetIndexBuffer(7,line8);
   SetIndexBuffer(8,line9);
   SetIndexBuffer(9,line10);
   SetIndexBuffer(10,line11);  
   SetIndexBuffer(11,line12);   
   SetIndexBuffer(12,line13);
   SetIndexBuffer(13,line14);
   SetIndexBuffer(14,line15);  
                
   SetIndexStyle(0,DRAW_LINE,EMPTY,5,indicator_color1);
   SetIndexStyle(1,DRAW_LINE,EMPTY,5,indicator_color1);
   SetIndexStyle(2,DRAW_LINE,EMPTY,5,indicator_color1);     
   SetIndexStyle(3,DRAW_LINE,EMPTY,5,indicator_color1);
   SetIndexStyle(4,DRAW_LINE,EMPTY,5,indicator_color1);
   SetIndexStyle(5,DRAW_LINE,EMPTY,5,indicator_color1);  
   SetIndexStyle(6,DRAW_LINE,EMPTY,5,indicator_color1);
   SetIndexStyle(7,DRAW_LINE,EMPTY,5,indicator_color1);
   SetIndexStyle(8,DRAW_LINE,EMPTY,5,indicator_color1);     
   SetIndexStyle(9,DRAW_LINE,EMPTY,5,indicator_color1);
   SetIndexStyle(10,DRAW_LINE,EMPTY,5,indicator_color1);
   SetIndexStyle(11,DRAW_LINE,EMPTY,5,indicator_color1);
   SetIndexStyle(12,DRAW_LINE,EMPTY,5,indicator_color1);     
   SetIndexStyle(13,DRAW_LINE,EMPTY,5,indicator_color1);
   SetIndexStyle(14,DRAW_LINE,EMPTY,5,indicator_color1);

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   string symbol = Symbol();
   int      i,pos,c_b=IndicatorCounted();;
  ArrayResize(lines, maxlines);
 
  ArrayInitialize(lines, 0);

  ArrayResize(line1, 100);
  ArrayInitialize(line1, 0);  
  ArrayResize(line2, 100);
  ArrayInitialize(line2, 0);  
  ArrayResize(line3, 100);
  ArrayInitialize(line3, 0);    
  ArrayResize(line4, 100);
  ArrayInitialize(line4, 0);  
  ArrayResize(line5, 100);
  ArrayInitialize(line5, 0);  
  ArrayResize(line6, 100);
  ArrayInitialize(line6, 0);  
  ArrayResize(line7, 100);
  ArrayInitialize(line7, 0);    
  ArrayResize(line8, 100);
  ArrayInitialize(line8, 0);    
  ArrayResize(line9, 100);
  ArrayInitialize(line9, 0);    
  ArrayResize(line10, 100);
  ArrayInitialize(line10, 0);  
  ArrayResize(line11, 100);
  ArrayInitialize(line11, 0);    
  ArrayResize(line12, 100);
  ArrayInitialize(line12, 0);    
  ArrayResize(line13, 100);
  ArrayInitialize(line13, 0);      
  ArrayResize(line14, 100);
  ArrayInitialize(line14, 0);  
  ArrayResize(line15, 100);
  ArrayInitialize(line15, 0);  

   
    ArrayResize(vbru, Bars);
   ArrayInitialize(vbru, 0); 
 
    ArrayResize(mid, Bars);
   ArrayInitialize(mid, 0);     
 


   pos=0;
  
 for (i=500; i>=0; i--) 
    {
    
    if (i>0 && i/2==MathRound(i/2)){
    
       if (iOpen(NULL,60,i)>iClose(NULL,60,i) &&  iHigh(NULL,60,i+1)-iClose(NULL,60,i+1)>=MinLengthOfUpTail*pt && iHigh(NULL,60,i)-iClose(NULL,60,i)>=MinLengthOfUpTail*pt && iClose(NULL,60,i+1)-iLow(NULL,60,i+1)>=MinLengthOfLoTail*pt && iClose(NULL,60,i)-iLow(NULL,60,i)>=MinLengthOfLoTail*pt && MathAbs(iOpen(NULL,60,iLowest(NULL,60,MODE_OPEN,2,i))-iClose(NULL,60,iHighest(NULL,60,MODE_CLOSE,2,i)))<=MaxLengthOfBody*pt  && vbru[i+1]==0) vbru[i]=MathAbs(iClose(NULL,60,i)+iOpen(NULL,60,i))/2;
       
        if (iOpen(NULL,60,i)<iClose(NULL,60,i) &&  iHigh(NULL,60,i+1)-iClose(NULL,60,i+1)>=MinLengthOfUpTail*pt && iHigh(NULL,60,i)-iClose(NULL,60,i)>=MinLengthOfUpTail*pt && iClose(NULL,60,i+1)-iLow(NULL,60,i+1)>=MinLengthOfLoTail*pt && iClose(NULL,60,i)-iLow(NULL,60,i)>=MinLengthOfLoTail*pt && MathAbs(iOpen(NULL,60,iLowest(NULL,60,MODE_CLOSE,2,i))-iClose(NULL,60,iHighest(NULL,60,MODE_OPEN,2,i)))<=MaxLengthOfBody*pt  && vbru[i+1]==0) vbru[i]=MathAbs(iClose(NULL,60,i)+iOpen(NULL,60,i))/2;
       
   }
     }
         


  for (i=1; i<=250; i++)
   {
        if (vbru[i]>0){  mid[pos]= vbru[i]; pos=pos+1;}
   }
    
 
deletetxt1("Happy");

i=0;
   while(i<maxlines && pos>0)        
            {
               if (i==pos) break;
               if (mid[i]!=EMPTY_VALUE) lines[i]=mid[i];
               i++;
            }

   for (i=0; i<=displaylength-1; i++) {
      if (lines[0]>0) line1[i]=lines[0];
      if (lines[1]>0) line2[i]=lines[1];
      if (lines[2]>0) line3[i]=lines[2];
      if (lines[3]>0) line4[i]=lines[3];
      if (lines[4]>0) line5[i]=lines[4];
      if (lines[5]>0) line6[i]=lines[5];
      if (lines[6]>0) line7[i]=lines[6];
      if (lines[7]>0) line8[i]=lines[7];                
      if (lines[8]>0) line9[i]=lines[8];
      if (lines[9]>0) line10[i]=lines[9]; 
      if (lines[10]>0) line11[i]=lines[10];
      if (lines[11]>0) line12[i]=lines[11];
      if (lines[12]>0) line13[i]=lines[12];
      if (lines[13]>0) line14[i]=lines[13];
      if (lines[14]>0) line15[i]=lines[14];
            
      
     if (i==6) {ObjectCreate("Happygail"+i, OBJ_RECTANGLE, 0,  Time[6], line1[i]+160*Point, Time[2], line1[i]-160*Point);
  ObjectSetInteger(0,"Happygail"+i,OBJPROP_COLOR,clrPurple);
  ObjectSet("Happygail"+i,OBJPROP_BACK,0);
  ObjectSet("Happygail"+i,OBJPROP_WIDTH,5);
  
  ObjectCreate("Happybail"+i, OBJ_RECTANGLE, 0,  Time[5], line2[i]+160*Point, Time[1], line2[i]-160*Point);
  ObjectSetInteger(0,"Happybail"+i,OBJPROP_COLOR,clrRed);
  ObjectSet("Happybail"+i,OBJPROP_BACK,0);
  ObjectSet("Happybail"+i,OBJPROP_WIDTH,5);
  
   
  if (line2[i]>line1[i]){ 
         ObjectCreate("Happydays"+iHigh(symbol,240,i), OBJ_TEXT, 0, Time[0], line2[i]+99*Point); 
         ObjectSetText("Happydays"+iHigh(symbol,240,i), DoubleToStr(NormalizeDouble(line2[i]+80*Point,4),4), 16, "Arial Black", Black);
         
         ObjectCreate("Happydays"+iLow(symbol,240,i), OBJ_TEXT, 0, Time[0], line1[i]-78*Point); 
         ObjectSetText("Happydays"+iLow(symbol,240,i), DoubleToStr(NormalizeDouble(line1[i]-80*Point,4),4), 16, "Arial Black", Black);
         }
  else { 
         ObjectCreate("Happydays"+iHigh(symbol,240,i), OBJ_TEXT, 0, Time[0], line1[i]+99*Point); 
         ObjectSetText("Happydays"+iHigh(symbol,240,i), DoubleToStr(NormalizeDouble(line1[i]+80*Point,4),4), 16, "Arial Black", Black);
         
         ObjectCreate("Happydays"+iLow(symbol,240,i), OBJ_TEXT, 0, Time[0], line2[i]-78*Point); 
         ObjectSetText("Happydays"+iLow(symbol,240,i), DoubleToStr(NormalizeDouble(line2[i]-80*Point,4),4), 16, "Arial Black", Black);
         }       
   
  }
   
}

  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);
}  }