Murrey_Math_MT4_Period_VG_v3





//+------------------------------------------------------------------+
//|                                           Murrey_Math_MT_VG.mq4  |
//|                       Copyright © 2004, Vladislav Goshkov (VG).  |
//|                                           4vg@mail.ru            |
//+------------------------------------------------------------------+
#property copyright "Vladislav Goshkov (VG)."
#property link      "4vg@mail.ru"

#property indicator_chart_window
// ===================================================================
// * Ëèíèè 8/8 è 0/8 (Îêîí÷àòåëüíîå ñîïðîòèâëåíèå).
// * Ýòè ëèíèè ñàìûå ñèëüíûå è îêàçûâàþò ñèëüíåéøèå ñîïðîòèâëåíèÿ è 
// * ïîääåðæêó.
// ===================================================================
//* Ëèíèÿ 7/8  (Ñëàáàÿ, ìåñòî äëÿ îñòàíîâêè è ðàçâîðîòà). Weak, Stall 
//* and Reverse
//* Ýòà ëèíèÿ ñëàáà. Åñëè öåíà çàøëà ñëèøêîì äàëåêî è ñëèøêîì áûñòðî 
//* è åñëè îíà îñòàíîâèëàñü îêîëî ýòîé ëèíèè, 
//* çíà÷èò îíà ðàçâåðíåòñÿ áûñòðî âíèç. Åñëè öåíà íå îñòàíîâèëàñü 
//* îêîëî ýòîé ëèíèè, îíà ïðîäîëæèò äâèæåíèå ââåðõ ê 8/8.
// ===================================================================
//* Ëèíèÿ 1/8  (Ñëàáàÿ, ìåñòî äëÿ îñòàíîâêè è ðàçâîðîòà). Weak, Stall
//* and Reverse
//* Ýòà ëèíèÿ ñëàáà. Åñëè öåíà çàøëà ñëèøêîì äàëåêî è ñëèøêîì áûñòðî 
//* è åñëè îíà îñòàíîâèëàñü îêîëî ýòîé ëèíèè, 
//* çíà÷èò îíà ðàçâåðíåòñÿ áûñòðî ââåðõ. Åñëè öåíà íå îñòàíîâèëàñü 
//* îêîëî ýòîé ëèíèè, îíà ïðîäîëæèò äâèæåíèå âíèç ê 0/8.
// ===================================================================
//* Ëèíèè 6/8 è 2/8 (Âðàùåíèå, ðàçâîðîò). Pivot, Reverse
//* Ýòè äâå ëèíèè óñòóïàþò â ñâîåé ñèëå òîëüêî 4/8 â ñâîåé 
//* ñïîñîáíîñòè ïîëíîñòüþ ðàçâåðíóòü öåíîâîå äâèæåíèå.
// ===================================================================
//* Ëèíèÿ 5/8 (Âåðõ òîðãîâîãî äèàïàçîíà). Top of Trading Range
//* Öåíû âñåõ ðûíêîâ òðàòÿò 40% âðåìåíè, íà äâèæåíèå ìåæäó 5/8 è 3/8
//* ëèíèÿìè. 
//* Åñëè öåíà äâèãàåòñÿ îêîëî ëèíèè 5/8 è îñòàåòñÿ îêîëî íåå â 
//* òå÷åíèè 10-12 äíåé, ðûíîê ñêàçàë ÷òî ñëåäóåò 
//* ïðîäàâàòü â ýòîé «ïðåìèàëüíîé çîíå», ÷òî è äåëàþò íåêîòîðûå ëþäè,
//* íî åñëè öåíà ñîõðàíÿåò òåíäåíöèþ îñòàâàòüñÿ 
//* âûøå 5/8, òî îíà è îñòàíåòñÿ âûøå íåå. Åñëè, îäíàêî, öåíà ïàäàåò
//* íèæå 5/8, òî îíà ñêîðåå âñåãî ïðîäîëæèò 
//* ïàäàòü äàëåå äî ñëåäóþùåãî óðîâíÿ ñîïðîòèâëåíèÿ.
// ===================================================================
//* Ëèíèÿ 3/8 (Äíî òîðãîâîãî äèàïàçîíà). Bottom of Trading Range
//* Åñëè öåíû íèæå ýòîé ëèíè è äâèãàþòñÿ ââåðõ, òî öåíå áóäåò ñëîæíî
//* ïðîáèòü ýòîò óðîâåíü. 
//* Åñëè ïðîáèâàþò ââåðõ ýòó ëèíèþ è îñòàþòñÿ âûøå íåå â òå÷åíèè 
//* 10-12 äíåé, çíà÷èò öåíû îñòàíóòñÿ âûøå ýòîé ëèíèè 
//* è ïîòðàòÿò 40% âðåìåíè äâèãàÿñü ìåæäó ýòîé ëèíèåé è 5/8 ëèíèåé.
// ===================================================================
//* Ëèíèÿ 4/8 (Ãëàâíàÿ ëèíèÿ ñîïðîòèâëåíèÿ/ïîääåðæêè). Major 
//* Support/Resistance
//* Ýòà ëèíèÿ îáåñïå÷èâàåò íàèáîëüøåå ñîïðîòèâëåíèå/ïîääåðæêó. Ýòîò 
//* óðîâåíü ÿâëÿåòñÿ ëó÷øèì äëÿ íîâîé ïîêóïêè èëè ïðîäàæè. 
//* Åñëè öåíà íàõîäèòñÿ âûøå 4/8, òî ýòî ñèëüíûé óðîâåíü ïîääåðæêè. 
//* Åñëè öåíà íàõîäèòñÿ íèæå 4/8, òî ýòî ïðåêðàñíûé óðîâåíü ñîïðîòèâëåíèÿ.
// ============================================================================================
extern int P = 64;
extern int MMPeriod = 1440;
extern int StepBack = 0;
//----
extern color  mml_clr_m_2_8 = Black;  // [-2]/8
extern color  mml_clr_m_1_8 = Black;  // [-1]/8
extern color  mml_clr_0_8   = Aqua;   //  [0]/8
extern color  mml_clr_1_8   = Yellow; //  [1]/8
extern color  mml_clr_2_8   = Red;    //  [2]/8
extern color  mml_clr_3_8   = Green;  //  [3]/8
extern color  mml_clr_4_8   = Blue;   //  [4]/8
extern color  mml_clr_5_8   = Green;  //  [5]/8
extern color  mml_clr_6_8   = Red;    //  [6]/8
extern color  mml_clr_7_8   = Yellow; //  [7]/8
extern color  mml_clr_8_8   = Aqua;   //  [8]/8
extern color  mml_clr_p_1_8 = Black;  // [+1]/8
extern color  mml_clr_p_2_8 = Black;  // [+2]/8
//----
extern int    mml_wdth_m_2_8 = 2;     // [-2]/8
extern int    mml_wdth_m_1_8 = 1;     // [-1]/8
extern int    mml_wdth_0_8   = 1;     //  [0]/8
extern int    mml_wdth_1_8   = 1;     //  [1]/8
extern int    mml_wdth_2_8   = 1;     //  [2]/8
extern int    mml_wdth_3_8   = 1;     //  [3]/8
extern int    mml_wdth_4_8   = 1;     //  [4]/8
extern int    mml_wdth_5_8   = 1;     //  [5]/8
extern int    mml_wdth_6_8   = 1;     //  [6]/8
extern int    mml_wdth_7_8   = 1;     //  [7]/8
extern int    mml_wdth_8_8   = 1;     //  [8]/8
extern int    mml_wdth_p_1_8 = 1;     // [+1]/8
extern int    mml_wdth_p_2_8 = 2;     // [+2]/8
//----
extern color  MarkColor   = Blue;
extern int    MarkNumber  = 217;
//----
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_wdth[13],
        mml_shft = 35,
        nTime = 0,
        CurPeriod = 0,
        nDigits = 0,
        i = 0;
int NewPeriod=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() 
  {
//---- indicators
   if(MMPeriod > 0)
       NewPeriod = P*MathCeil(MMPeriod / Period());
   else 
       NewPeriod = P;
//----   
   ln_txt[0]  = "[-2/8]P"; // "extremely overshoot [-2/8]";// [-2/8]
   ln_txt[1]  = "[-1/8]P"; // "overshoot [-1/8]";// [-1/8]
   ln_txt[2]  = "[0/8]P";  // "Ultimate Support - extremely oversold 
                           // [0/8]";// [0/8]
   ln_txt[3]  = "[1/8]P";  // "Weak, Stall and Reverse - [1/8]";// [1/8]
   ln_txt[4]  = "[2/8]P";  // "Pivot, Reverse - major [2/8]";// [2/8]
   ln_txt[5]  = "[3/8]P";  // "Bottom of Trading Range - [3/8], if 10-12 
                           // bars then 40% Time. BUY Premium Zone";//[3/8]
   ln_txt[6]  = "[4/8]P";  // "Major Support/Resistance Pivotal Point 
                           // [4/8]- Best New BUY or SELL level";// [4/8]
   ln_txt[7]  = "[5/8]P";  // "Top of Trading Range - [5/8], if 10-12 
                           // bars then 40% Time. SELL Premium Zone";//[5/8]
   ln_txt[8]  = "[6/8]P";  // "Pivot, Reverse - major [6/8]";// [6/8]
   ln_txt[9]  = "[7/8]P";  // "Weak, Stall and Reverse - [7/8]";// [7/8]
   ln_txt[10] = "[8/8]P";  // "Ultimate Resistance - extremely overbought 
                           // [8/8]";// [8/8]
   ln_txt[11] = "[+1/8]P"; // "overshoot [+1/8]";// [+1/8]
   ln_txt[12] = "[+2/8]P"; // "extremely overshoot [+2/8]";// [+2/8]
//----
   //mml_shft = 3;
   mml_thk  = 3;
   // Íà÷àëüíàÿ óñòàíîâêà öâåòîâ óðîâíåé îêòàâ è òîëùèíû ëèíèé
   mml_clr[0]  = mml_clr_m_2_8;   mml_wdth[0] = mml_wdth_m_2_8; // [-2]/8
   mml_clr[1]  = mml_clr_m_1_8;   mml_wdth[1] = mml_wdth_m_1_8; // [-1]/8
   mml_clr[2]  = mml_clr_0_8;     mml_wdth[2] = mml_wdth_0_8;   //  [0]/8
   mml_clr[3]  = mml_clr_1_8;     mml_wdth[3] = mml_wdth_1_8;   //  [1]/8
   mml_clr[4]  = mml_clr_2_8;     mml_wdth[4] = mml_wdth_2_8;   //  [2]/8
   mml_clr[5]  = mml_clr_3_8;     mml_wdth[5] = mml_wdth_3_8;   //  [3]/8
   mml_clr[6]  = mml_clr_4_8;     mml_wdth[6] = mml_wdth_4_8;   //  [4]/8
   mml_clr[7]  = mml_clr_5_8;     mml_wdth[7] = mml_wdth_5_8;   //  [5]/8
   mml_clr[8]  = mml_clr_6_8;     mml_wdth[8] = mml_wdth_6_8;   //  [6]/8
   mml_clr[9]  = mml_clr_7_8;     mml_wdth[9] = mml_wdth_7_8;   //  [7]/8
   mml_clr[10] = mml_clr_8_8;     mml_wdth[10]= mml_wdth_8_8;   //  [8]/8
   mml_clr[11] = mml_clr_p_1_8;   mml_wdth[11]= mml_wdth_p_1_8; // [+1]/8
   mml_clr[12] = mml_clr_p_2_8;   mml_wdth[12]= mml_wdth_p_2_8; // [+2]/8
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() 
  {
   Comment(" ");   
   for(i = 0; i < OctLinesCnt; i++) 
     {
       buff_str = "mml" + i;
       ObjectDelete(buff_str);
       buff_str = "mml_txt" + i;
       ObjectDelete(buff_str);
       buff_str = "MML_LatestCulcBar";
       ObjectDelete(buff_str);
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() 
  {
   if((nTime != Time[0]) || (CurPeriod != Period())) 
     {
       //price
       bn_v1 = Lowest(NULL, 0, MODE_LOW, NewPeriod + StepBack, StepBack);
       bn_v2 = Highest(NULL, 0, MODE_HIGH, NewPeriod + StepBack, StepBack);
       v1 = Low[bn_v1];
       v2 = High[bn_v2];
       //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_SOLID);
               ObjectSet(buff_str, OBJPROP_COLOR, mml_clr[i]);
               ObjectSet(buff_str, OBJPROP_WIDTH, mml_wdth[i]);
               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, "Arial", mml_clr[i]);
               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();
       string buff_str = "MML_LatestCulcBar";
       //----
       if(ObjectFind(buff_str) == -1) 
         {
           ObjectCreate(buff_str, OBJ_ARROW, 0, Time[StepBack], Low[StepBack] - 2*Point);
           ObjectSet(buff_str, OBJPROP_ARROWCODE, MarkNumber);
           ObjectSet(buff_str, OBJPROP_COLOR, MarkColor);
         }
       else 
         {
           ObjectMove(buff_str, 0, Time[StepBack], Low[StepBack]-2*Point );
         }

     }
//---- 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: