Author: Vladislav Goshkov (VG).
MMLevls_VG
0 Views
0 Downloads
0 Favorites
MMLevls_VG
//+------------------------------------------------------------------+
//|                                                   MMLevls_VG.mq4 |
//|                       Copyright © 2006, Vladislav Goshkov (VG).  |
//|                                           4vg@mail.ru            |
//|                                       Many thanks to Tim Kruzel  |
//+------------------------------------------------------------------+
#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=90;
extern int MMPeriod=1440;
extern int StepBack=0;
//----
extern color  mml_clr_m_2_8=White;       // [-2]/8
extern color  mml_clr_m_1_8=White;       // [-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=White;       // [+1]/8
extern color  mml_clr_p_2_8=White;       // [+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  =2;        //  [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  =2;        //  [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  =2;        //  [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() 
  {
//---- 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);
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
  int start() 
  {
//---- TODO: add your code here
     if((nTime!=Time[0]) || (CurPeriod!=Period())){
      //price
      Print("MMLevls : NewPeriod = ",NewPeriod);
      bn_v1=Lowest(NULL,0,MODE_LOW,NewPeriod,StepBack);
      bn_v2=Highest(NULL,0,MODE_HIGH,NewPeriod,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;
      Print("MMLevls : NewPeriod = ",NewPeriod," dmml = ",dmml," finalL = ",finalL);
      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="LR_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 ---