# Murrey Math Black





//+------------------------------------------------------------------+
//|                                              MM# LabelLevels.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      " Modified by cja " 
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//|                                            Murrey_Math_MT_VG.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Vladislav Goshkov (VG)."
#property link      "4vg@mail.ru"

#property indicator_chart_window

// ============================================================================================
// 8/8 c 0/8 
// ============================================================================================
// 7/8    Weak, Stall and Reverse

// ============================================================================================
// 1/8  Weak, Stall and Reverse

// ============================================================================================
// 6/8 c 2/8  Pivot, Reverse

// ============================================================================================
// 5/8  Top of Trading Range 40% of trading range between 5/8 & 3/8 
                                
// ============================================================================================
// 3/8  Bottom of Trading Range

// ============================================================================================
// 4/8  Major Support/Resistance

// ============================================================================================


#define MMTop "MMTop"
#define MMBot "MMBot"
#define MMperiod "MMperiod"



extern int P = 64;
extern int StepBack = 0;
extern bool Comments=true;

double  dmml = 0,
        dvtl = 0,
        sum  = 0,
        v1 = 0,
        v2 = 0,
        mn = 0,
        mx = 0,
        x1 = 0,
        x2 = 0,
        x3 = 0,
        x4 = 0,
        x5 = 0,
        x6 = 0,
        y1 = 0,
        y2 = 0,
        y3 = 0,
        y4 = 0,
        y5 = 0,
        y6 = 0,
        octave = 0,
        fractal = 0,
        range   = 0,
        finalH  = 0,
        finalL  = 0,
        mml[13];

string  ln_txt[13],        
        buff_str = "";
        
int     
        bn_v1   = 0,
        bn_v2   = 0,
        OctLinesCnt = 13,
        mml_thk = 8,
        mml_clr[13],
        mml_shft = 3,
        nTime = 0,
        CurPeriod = 0,
        nDigits = 0,
        i = 0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
//---- indicators
   ln_txt[0]  = "                          [-2/8]Extreme Overshoot";// "extremely overshoot [-2/8]";// [-2/8]
   ln_txt[1]  = "             [-1/8]Overshoot";// "overshoot [-1/8]";// [-1/8]
   ln_txt[2]  = "                     [0/8]Ultimate Support";// "Ultimate Support - extremely oversold [0/8]";// [0/8]
   ln_txt[3]  = "                           [1/8]Weak Stall & Reverse";// "Weak, Stall and Reverse - [1/8]";// [1/8]
   ln_txt[4]  = "                    [2/8]Reversal - Major";// "Pivot, Reverse - major [2/8]";// [2/8]
   ln_txt[5]  = "                               [3/8]Bottom - Trading Range";// "Bottom of Trading Range - [3/8], if 10-12 bars then 40% Time. BUY Premium Zone";//[3/8]
   ln_txt[6]  = "                                  [4/8]Major Support/Resistance";// "Major Support/Resistance Pivotal Point [4/8]- Best New BUY or SELL level";// [4/8]
   ln_txt[7]  = "                       [5/8]Top Trading Range";// "Top of Trading Range - [5/8], if 10-12 bars then 40% Time. SELL Premium Zone";//[5/8]
   ln_txt[8]  = "                 [6/8]Reversal Major";// "Pivot, Reverse - major [6/8]";// [6/8]
   ln_txt[9]  = "                           [7/8]Weak Stall & Reverse";// "Weak, Stall and Reverse - [7/8]";// [7/8]
   ln_txt[10] = "                         [8/8]Ulitimate Resistance";// "Ultimate Resistance - extremely overbought [8/8]";// [8/8]
   ln_txt[11] = "             [+1/8]Overshoot";// "overshoot [+1/8]";// [+1/8]
   ln_txt[12] = "                          [+2/8]Extreme Overshoot";// "extremely overshoot [+2/8]";// [+2/8]

   mml_shft = 0;//original was 3
   mml_thk  = 3;

   // Ír÷rëüír? ónnríîâer öâlnîâ ódîâílé îenrâ 
   mml_clr[0]  = C'90,90,90';//SteelBlue;    // [-2]/8
   mml_clr[1]  = C'90,90,90';//DarkViolet;  // [-1]/8
   mml_clr[2]  = Maroon;//Aqua;        //  [0]/8
   mml_clr[3]  = C'90,90,90';//Gold;      //  [1]/8
   mml_clr[4]  = C'90,90,90';//Red;         //  [2]/8
   mml_clr[5]  = Maroon;//Green;   //  [3]/8
   mml_clr[6]  = Black;//Blue;        //  [4]/8
   mml_clr[7]  = Maroon;//Green;   //  [5]/8
   mml_clr[8]  = C'90,90,90';//Red;         //  [6]/8
   mml_clr[9]  = C'90,90,90';//Gold;      //  [7]/8
   mml_clr[10] = Maroon;//Aqua;        //  [8]/8
   mml_clr[11] = C'90,90,90';//DarkViolet;  // [+1]/8
   mml_clr[12] = C'90,90,90';//SteelBlue;    // [+2]/8
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
//---- TODO: add your code here
Comment(" ");   
for(i=0;i<OctLinesCnt;i++) {
    buff_str = "mml"+i;
    ObjectDelete(buff_str);
    buff_str = "mml_txt"+i;
    ObjectDelete(buff_str);
    }
   //ObjectDelete(MMTop);
   //ObjectDelete(MMBot);
   //ObjectDelete(MMperiod);   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {

//---- TODO: add your code here

if( (nTime != Time[0]) || (CurPeriod != Period()) ) {
   
  //price
   bn_v1 = Lowest(NULL,0,MODE_LOW,P+StepBack,0);
   bn_v2 = Highest(NULL,0,MODE_HIGH,P+StepBack,0); // changes when price exceeds hi/low

   v1 = Low[bn_v1];
   v2 = High[bn_v2];
   
   //Comment("\n","MURREYMATH ","\n","HighClose = ",v2,"\n","LowClose = ",v1,"\n");
   //Comment("HighClose ",v2,"\n","LowClose ",v1,"\n");

//Comment("Copyright © http://young.net.pl/forex");
   
   //v1=(Close[Lowest(NULL,0,MODE_CLOSE,P+StepBack,0)]);
   //v2=(Close[Highest(NULL,0,MODE_CLOSE,P+StepBack,0)]);// Possibly a better hi/low code than above code changes on CLOSE
                                                         // Still does not update 
                         
//determine fractal.....
   if( v2<=250000 && v2>25000 )
   fractal=100000;
   else
     if( v2<=25000 && v2>2500 )
     fractal=10000;
     else
       if( v2<=2500 && v2>250 )
       fractal=1000;
       else
         if( v2<=250 && v2>25 )
         fractal=100;
         else
           if( v2<=25 && v2>12.5 )
           fractal=12.5;
           else
             if( v2<=12.5 && v2>6.25)
             fractal=12.5;
             else
               if( v2<=6.25 && v2>3.125 )
               fractal=6.25;
               else
                 if( v2<=3.125 && v2>1.5625 )
                 fractal=3.125;
                 else
                   if( v2<=1.5625 && v2>0.390625 )
                   fractal=1.5625;
                   else
                     if( v2<=0.390625 && v2>0)
                     fractal=0.1953125;
      
   range=(v2-v1);
   sum=MathFloor(MathLog(fractal/range)/MathLog(2));
   octave=fractal*(MathPow(0.5,sum));
   mn=MathFloor(v1/octave)*octave;
   if( (mn+octave)>v2 )
   mx=mn+octave; 
   else
     mx=mn+(2*octave);


// calculating xx
//x2
    if( (v1>=(3*(mx-mn)/16+mn)) && (v2<=(9*(mx-mn)/16+mn)) )
    x2=mn+(mx-mn)/2; 
    else x2=0;
//x1
    if( (v1>=(mn-(mx-mn)/8))&& (v2<=(5*(mx-mn)/8+mn)) && (x2==0) )
    x1=mn+(mx-mn)/2; 
    else x1=0;

//x4
    if( (v1>=(mn+7*(mx-mn)/16))&& (v2<=(13*(mx-mn)/16+mn)) )
    x4=mn+3*(mx-mn)/4; 
    else x4=0;

//x5
    if( (v1>=(mn+3*(mx-mn)/8))&& (v2<=(9*(mx-mn)/8+mn))&& (x4==0) )
    x5=mx; 
    else  x5=0;

//x3
    if( (v1>=(mn+(mx-mn)/8))&& (v2<=(7*(mx-mn)/8+mn))&& (x1==0) && (x2==0) && (x4==0) && (x5==0) )
    x3=mn+3*(mx-mn)/4; 
    else x3=0;

//x6
    if( (x1+x2+x3+x4+x5) ==0 )
    x6=mx; 
    else x6=0;

     finalH = x1+x2+x3+x4+x5+x6;
// calculating yy
//y1
    if( x1>0 )
    y1=mn; 
    else y1=0;

//y2
    if( x2>0 )
    y2=mn+(mx-mn)/4; 
    else y2=0;

//y3
    if( x3>0 )
    y3=mn+(mx-mn)/4; 
    else y3=0;

//y4
    if( x4>0 )
    y4=mn+(mx-mn)/2; 
    else y4=0;

//y5
    if( x5>0 )
    y5=mn+(mx-mn)/2; 
    else y5=0;

//y6
    if( (finalH>0) && ((y1+y2+y3+y4+y5)==0) )
    y6=mn; 
    else y6=0;

    finalL = y1+y2+y3+y4+y5+y6;

    for( i=0; i<OctLinesCnt; i++) {
         mml[i] = 0;
         }
         
   dmml = (finalH-finalL)/8;

   mml[0] =(finalL-dmml*2); //-2/8
   for( i=1; i<OctLinesCnt; i++) {
        mml[i] = mml[i-1] + dmml;
        }
   for( i=0; i<OctLinesCnt; i++ ){
        buff_str = "mml"+i;
        if(ObjectFind(buff_str) == -1) {
           ObjectCreate(buff_str, OBJ_HLINE, 0, Time[0], mml[i]);
           ObjectSet(buff_str, OBJPROP_STYLE, STYLE_DOT);
           ObjectSet(buff_str, OBJPROP_COLOR, mml_clr[i]);
           ObjectSet(buff_str, OBJPROP_BACK, 1);
           ObjectMove(buff_str, 0, Time[0],  mml[i]);
           }
        else {
           ObjectMove(buff_str, 0, Time[0],  mml[i]);
           }
             
        buff_str = "mml_txt"+i;
        if(ObjectFind(buff_str) == -1) {
           ObjectCreate(buff_str, OBJ_TEXT, 0, Time[mml_shft], mml_shft);
           ObjectSetText(buff_str, ln_txt[i], 8, "Tahoma", mml_clr[i]);
           ObjectSet(buff_str, OBJPROP_BACK, 1);
           ObjectMove(buff_str, 0, Time[mml_shft],  mml[i]);
           }
        else {
           ObjectMove(buff_str, 0, Time[mml_shft],  mml[i]);
           }
        } // for( i=1; i<=OctLinesCnt; i++ ){

   nTime    = Time[0];
   CurPeriod= Period();

           //ObjectDelete(MMBot);
           //ObjectCreate(MMBot, OBJ_RECTANGLE, 0, Time[0], mml[0], Time[P], mml[2]);
           //ObjectSet(MMBot, OBJPROP_COLOR, C'33,33,33');
           
           //ObjectDelete(MMTop);
           //ObjectCreate(MMTop, OBJ_RECTANGLE, 0, Time[0], mml[10], Time[P], mml[12]);
           //ObjectSet(MMTop, OBJPROP_COLOR, C'33,33,33');

           //ObjectDelete(MMperiod);
           //ObjectCreate(MMperiod, OBJ_RECTANGLE, 0, Time[P], mml[0], Time[2*P], mml[12]);
           //ObjectSet(MMperiod, OBJPROP_COLOR, C'33,33,33');
   }
 
//---- End Of Program
  return(0);
  }
//+------------------------------------------------------------------+





Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains the lowest prices of each bar
Series array that contains the highest prices of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: