Murrey_Math_MT4_Period_VG_v3

Author: Vladislav Goshkov (VG).
Murrey_Math_MT4_Period_VG_v3
0 Views
0 Downloads
0 Favorites
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);
  }
//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---