"

Elliott Waves Indicator [ ru ]

by Dr.Hamdi Boukamcha
Name:
Elliott Waves Indicator [ ru ]
Author: cmillion (2009.12.04 17:56)
Downloaded: 28929
Download:
Elliott Waves Indicator [ ru ]   Elliott_Waves.mq4 (26.6 Kb) View
Elliott Waves Indicator [ ru ]   Fractals.mq4 (12.3 Kb) View

Author:

Vladimir Hlystov

Description:

The indicator doesn’t draw the Elliott waves, but it helps you to define them.

Lets consider how does it works:

1. The WAVE. The first, you should draw any trend line using Fractals and define its name it in the following form : “1<space>*****”, for exampe: “1 wave“. After the first tick, or if you don’t want to wait for it, update it using the right mouse button you will get the picture like this:

Elliott Waves Indicator [ ru ]

The dotted line with rectange shows the estimated price movement, and if the wave has been defined correctly, the price will came into the estimated rectange. V is the average volume in the 1st wave.

After that, we are waiting for the lower fractal and rename the dotted line to “2 wave” (note that the number and space after it are important). Now moving the end of that line on the next formed fractal (lower) and we will get the estimated price movement in the 3rd wave:

(if you have moved the line to the bar without fractal, the indicator will inform you about it and will try to move the line by its own vision. If the line hasn’t been moved by the indicator, you should move it on the fractal manually)

Elliott Waves Indicator [ ru ]

After the price will reach rectangle (in our case we have the movement, the price moved upper than the estimated target), you should rename the dotted line to “3 wave” and remove it to the upper fractal. The result you will see looks as follows:

Elliott Waves Indicator [ ru ]

The indicator informs us, that the average volume in the 3rd wave is always larger, than in the 1st wave. So it’s possible that our wave definition was wrong.

But anyway, we have reached the target estimated and we can continue.

After the price will reach the estimated target and after the next fractal formation we rename the dotted line to “4 wave” and remove its end on the fractal:

Elliott Waves Indicator [ ru ]

Further, we should wait for the upper fractal in the target estimated and draw the “a b c” retracement. Read the book “Trade Chaos” by Bill Williams for the details.

Recommendations:

The indicator “Fractals.mq4” (it also attached here) helps to draw of the first line. Don’t place orders right after the fractal, its better to wait for the price movement in the directon estimated. Of course in such case the profit will be less, but the risk will be the same. I recommend to place Stop Loss as adviced by Bill Williams.

Editor’s remark:

Note that it’s a mirror translation of the original Russian version.

If you have any questions to the author, suggestions or comments, it’s better to post them there.

If you have found this code useful for trading or educational purposes, don’t forget to thank author.

11 comments: 1 2   To post a new comment, please log in or register

I downloaded Elliot Waves.mq4—but shows nothing on chart.
06.01.2013 20:27 ashumitra

multiterminal:
we have created elliott indicator too. Elliott Wave Application is calculating about two thousand possible waves (patterns) and wave combinations, taking into account every old and modern Elliott Wave rule, every Fibonacci ratio and the fractal nature of the chart

Branch for discussion and suggestions

25.09.2012 11:19 cmillion

we have created elliott indicator too. Elliott Wave Application is calculating about two thousand possible waves (patterns) and wave combinations, taking into account every old and modern Elliott Wave rule, every Fibonacci ratio and the fractal nature of the chart. www.elliottindicator.com

31.05.2012 20:31 multiterminal

Dear Vladimir,

I sent you a screen shot of what I see with the fractals. I do not see any squares indicating next Elliott wave, I only see 5 coloured dots, and some numbers.

Could you pls. explain what do they mean and how I calculate future moves?

thanks

Gabriella

26.03.2012 18:28 Gaby13

not sure if this was sent, here it is again Elliott Waves Indicator [ ru ]
26.03.2012 13:52 Gaby13

Hello,

I downloaded the fractals, and Elliott, but first I got it all gibberish, then Elliott does not show.

Pls. check attached pic.

Thank you very much

GabriellaElliott Waves Indicator [ ru ]

26.03.2012 13:51 Gaby13

You also can find Elliott Indicator for metatrader 4 platform here: elliottindicator.com

Elliott Wave Indicator is calculating about two thousand possible waves (patterns) and wave combinations, taking into account every old and modern Elliott Wave rule, every Fibonacci ratio and the fractal nature of the chart.

25.04.2011 22:28 ElliottMT4

Hi cmillion and others,

many thanks for your indicator – looks really great!

But my metatrader/metaeditor not supporting azbuka – when in text azbuka, editor show just”??????????????”.

I try modification you indicator for my usage (your code from http://codebase.mql4.com/source/19928), but gain is with many errors (attached) – I’m absolutly secular.

Can anybody help me with this PLEAS??

Thanks a lot.

Best regards,

Lubos

PS: excuse my bad English pleas. (I’m from Czech)

//+------------------------------------------------------------------+
//|                                                Elliott_Waves.mq4 |
//|                                Copyright © 2009, ??????? ??????? |
//|                                                [email protected] |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, ??????? ???????"
#property link      "[email protected]"

#property indicator_chart_window

   datetime X1,X2;
   double   Y1,Y2,LINE[11][6];
   int STYLE,T_LINIE,WAVE,COLOR;
   double High_Win,Low_Win,shift_X,shift_Y;
   string Name[11]={ "-",
                     "1 WAVE ","2 WAVE ","3 WAVE ","4 WAVE ","5 WAVE ",
                     "a WAVE ","b WAVE ","c WAVE ","d WAVE ","e WAVE "};
   string text,Obj_Name,INFO;
   int per;
   extern bool  show_all_periods = true;
   extern color C1=White;
   extern color C2=DeepSkyBlue;
   extern color C3=Yellow;
   extern color C4=Turquoise;
   extern color C5=Magenta;
   extern color C6=Yellow;
   extern color C7=MediumSpringGreen;
   extern color C8=Violet;
   extern color C9=DarkOrchid;

//???????????????????????????????????????????????????????????????????
//////////////////////////////////////////////////////////////////////

int init()
{
   ObjectCreate ("bar", OBJ_LABEL, 0, 0, 0);// ???????? ???.
   ObjectSet    ("bar", OBJPROP_XDISTANCE, 500);      
   ObjectSet    ("bar", OBJPROP_YDISTANCE, 0);
   ObjectSet    ("bar", OBJPROP_CORNER, 1); //angel_of_trade_execute
   per =Period();
   Obj_Name = string_per(per);
   for(int k=0; k<=10; k++) Name[k] = Name[k]+Obj_Name;
   Comment("Elliott waves "+Obj_Name+" "+time(CurTime()));
   return(0);
}
//???????????????????????????????????????????????????????????????????
//*////////////////////////////////////////////////////////////////*//
int deinit()
  {
      ObjectDelete("bar");
      remove_objects("C");
      remove_objects("Name");
      remove_objects("Info");
   return(0);
  }
//*////////////////////////////////////////////////////////////////*//

//////////////////////////////////////////////////////////////////////
int start()
{
   High_Win = WindowPriceMax();
   Low_Win  = WindowPriceMin();
   shift_X = WindowBarsPerChart();
   ObjectSetText("bar","bar na obrazovce "+DoubleToStr(shift_X,0),8,"Arial",White);   
   shift_X = shift_X/80*per;
   shift_Y = (High_Win-Low_Win) / 50;
   for(int k=0; k<=ObjectsTotal(); k++) 
   {
      Obj_Name = ObjectName(k);                           // dotaz na nazev objektu
      if (Obj_Name=="") continue;
      WAVE = N_Wave(Obj_Name);
      if (WAVE>0&&WAVE<11)
      {
         if (Obj_Name != Name[WAVE]) redraw_LINE(Obj_Name,Name[WAVE]);
         X1 =    ObjectGet(Name[WAVE], OBJPROP_TIME1); 
         Y1 =    ObjectGet(Name[WAVE], OBJPROP_PRICE1);
         X2 =    ObjectGet(Name[WAVE], OBJPROP_TIME2); 
         Y2 =    ObjectGet(Name[WAVE], OBJPROP_PRICE2);
         COLOR  = ObjectGet(Name[WAVE], OBJPROP_COLOR);
         STYLE = ObjectGet(Name[WAVE], OBJPROP_STYLE);
         T_LINIE=ObjectGet(Name[WAVE], OBJPROP_WIDTH);
         if (X1 > X2) redraw_LINE(Name[],Name[WAVE]+" r ");
         if (Y1 < Y2) LINE[WAVE][0]=1; else LINE[WAVE][0]=-1;//směr vlny
         ObjectDelete("C "+Name[WAVE]);
         ObjectDelete("Cil "+Name[WAVE]);
         LINE[WAVE][1]=X1;//ZACATEK VLNY
         LINE[WAVE][2]=Y1;
         LINE[WAVE][3]=X2;//KONEC VLNY
         LINE[WAVE][4]=Y2;
         LINE[WAVE][5]=WAVE_VOLUME(Name[WAVE]);
         if ((MathAbs(LINE[WAVE][3]-LINE[WAVE+1][1])<per*120) || (MathAbs(LINE[WAVE][4]-LINE[WAVE+1][2])/Point<=MarketInfo(Symbol(),MODE_STOPLEVEL)))
         {
            ObjectSet   (Name[WAVE+1], OBJPROP_COLOR,  COLOR); //???????? - ????????? ?????
            ObjectSet   (Name[WAVE+1], OBJPROP_STYLE, STYLE);// ?????   
            ObjectSet   (Name[WAVE+1], OBJPROP_WIDTH, T_LINIE);
            ObjectSet   (Name[WAVE+1], OBJPROP_PRICE1 ,LINE[WAVE][4]);//???????? ????????? ????? ? ??????? PRICE1
            ObjectSet   (Name[WAVE+1], OBJPROP_TIME1  ,LINE[WAVE][3]);//???????? ????????? ????? ? ??????? TIME1
         }
         INFO = "Info "+Name[WAVE]+" paka "+DoubleToStr(MathAbs(LINE[WAVE][2]-LINE[WAVE][4])/Point,0);
         if (WAVE==3&&(LINE[3][5]<LINE[2][5]||LINE[3][5]<LINE[1][5]||LINE[3][5]<LINE[4][5]||LINE[3][5]<LINE[5][5])) text = "Objem nemuze byt mensi ve 3 vlnach "+DoubleToStr(LINE[WAVE][5],0);
         else text = "V = "+DoubleToStr(LINE[WAVE][5],0);
         remove_objects("Info");
         ObjectCreate (INFO, OBJ_TEXT  ,0,LINE[WAVE][3], LINE[WAVE][4]+shift_Y*T_LINIE*3*LINE[WAVE][0],0,0,0,0);
         ObjectSetText(INFO,text ,8,"Arial");
         ObjectSet    (INFO, OBJPROP_COLOR, COLOR);

         ObjectDelete ("Name "+Name[WAVE]);
         ObjectCreate ("Name "+Name[WAVE], OBJ_TEXT  ,0,LINE[WAVE][3], LINE[WAVE][4]+shift_Y*T_LINIE*2*LINE[WAVE][0]+0.7*shift_Y,0,0,0,0);
         if (FRACTAL(LINE[WAVE][3],Name[WAVE])==true)
         {
            ObjectSetText("Name "+Name[WAVE], StringSubstr(Name[WAVE],0,1),10*T_LINIE,"Arial");
            ObjectSet    ("Name "+Name[WAVE], OBJPROP_COLOR, COLOR);
         }
         else
         {
            ObjectSetText("Name "+Name[WAVE], "neni fractal" ,10,"Arial");
            ObjectSet    ("Name "+Name[WAVE], OBJPROP_COLOR, Red);
         }
         if (LINE[WAVE][3]!=LINE[WAVE+1][1]) // ???? ??? ????????? ?????
         {
               if (LINE[WAVE][1]!=LINE[WAVE-1][3]) // ???? ??? ?????????? ?????
               {
                  X1=LINE[WAVE][3]+(LINE[WAVE][3]-LINE[WAVE][1])*0.38;
                  X2=LINE[WAVE][3]+(LINE[WAVE][3]-LINE[WAVE][1])*0.62;
                  Y1=LINE[WAVE][4]+(LINE[WAVE][2]-LINE[WAVE][4])*0.38; 
                  Y2=LINE[WAVE][4]+(LINE[WAVE][2]-LINE[WAVE][4])*0.62;

                  if (WAVE==6) //??????? ????? a
                        Y1=LINE[6][4]+(LINE[6][2]-LINE[6][4])*0.50; 

               }
               else//???? ???? ?????
               {
                  switch(WAVE)
                  {
                     case 2 ://??????? ????? 2
                        X2=LINE[2][3]+(LINE[2][3]-LINE[1][1])/0.38;
                        X1=LINE[2][3]+(LINE[2][3]-LINE[1][1])/0.62;
                        Y1=LINE[1][4]-MathAbs(LINE[1][2]-LINE[1][4])*LINE[2][0]*1.00; 
                        Y2=LINE[1][4]-MathAbs(LINE[1][2]-LINE[1][4])*LINE[2][0]*1.62;
                        break;
                     case 3 ://??????? ????? 3
                        X1=LINE[2][1]+(LINE[3][3]-LINE[1][3])*1.38;
                        X2=LINE[3][1]+(LINE[3][3]-LINE[1][3])*1.62;
                        Y1=LINE[3][4]-MathAbs(LINE[3][2]-LINE[3][4])*LINE[3][0]*0.38; 
                        Y2=LINE[3][4]-MathAbs(LINE[3][2]-LINE[3][4])*LINE[3][0]*0.50;
                        if ((Y2<LINE[1][4] && LINE[3][0]==1)||(Y2>LINE[1][4] && LINE[3][0]==-1))
                        {
                           ObjectSetText("Name "+Name[WAVE],"4 WAVE nemuze lezet nize nez 1 WAVE",8,"Arial");
                           ObjectSet    ("Name "+Name[WAVE], OBJPROP_COLOR, Red);
                        }
                        if (LINE[1][3]!=LINE[2][1])
                        {
                           ObjectSet(Name[WAVE], OBJPROP_COLOR, Red); 
                           ObjectSetText("Name "+Name[WAVE],"neni WAVE 1",8,"Arial");
                           ObjectSet    ("Name "+Name[WAVE], OBJPROP_COLOR, Red);
                        }
                        break;
                     case 4 ://??????? ????? 4
                        X1=LINE[4][3]+(LINE[3][3]-LINE[3][1])*0.38;
                        X2=LINE[4][3]+(LINE[3][3]-LINE[3][1])*0.62;
                        Y1=LINE[4][2]-MathAbs(LINE[1][2]-LINE[3][4])*LINE[4][0]*0.62; 
                        Y2=LINE[4][2]-MathAbs(LINE[1][2]-LINE[3][4])*LINE[4][0]*1.00;
                        text="--4 WAVE <> 1 WAVE--";
                        ObjectDelete(text);
                        if ((LINE[4][4]<LINE[1][4] && LINE[4][0]==-1)||(LINE[4][4]>LINE[1][4] && LINE[4][0]==1))
                        {
                           ObjectSet(Name[WAVE], OBJPROP_COLOR, Red);
                           ObjectSetText("Name "+Name[WAVE],"4 WAVE nemuze lezet nize nez 1 WAVE",8,"Arial");
                           ObjectSet    ("Name "+Name[WAVE], OBJPROP_COLOR, Red);
                           ObjectCreate(text, OBJ_TREND, 0,LINE[1][3],LINE[1][4],LINE[4][3],LINE[1][4]);
                           ObjectSet   (text, OBJPROP_COLOR, Red);    // ????   
                           ObjectSet   (text, OBJPROP_STYLE, STYLE_DASH);// ?????   
                           ObjectSet   (text, OBJPROP_WIDTH, 0);
                           ObjectSet   (text, OBJPROP_BACK,  true);
                           ObjectSet   (text, OBJPROP_RAY,   false);     // ???   
                        }
                        if (LINE[1][3]!=LINE[2][1] || LINE[2][3]!=LINE[3][1])
                        {
                           ObjectSet(Name[WAVE], OBJPROP_COLOR, Red);
                           ObjectSetText("Name "+Name[WAVE],"neni WAVE 1 nebo 2",8,"Arial");
                           ObjectSet    ("Name "+Name[WAVE], OBJPROP_COLOR, Red);
                        }
                        break;
                     case 5 ://??????? ????? 5
                        X1=LINE[5][3]+(LINE[5][3]-LINE[5][1])*0.38;
                        X2=LINE[5][3]+(LINE[5][3]-LINE[5][1])*0.62;
                        Y1=LINE[5][4]-MathAbs(LINE[5][2]-LINE[5][4])*LINE[5][0]*0.38; 
                        Y2=LINE[5][4]-MathAbs(LINE[5][2]-LINE[5][4])*LINE[5][0]*0.62;
                        double MFI_3=iMACD(NULL,0,5,34,5,PRICE_CLOSE,MODE_MAIN  ,iBarShift(NULL,0,LINE[3][3],FALSE));
                        double MFI_5=iMACD(NULL,0,5,34,5,PRICE_CLOSE,MODE_MAIN  ,iBarShift(NULL,0,LINE[5][3],FALSE));
                        if (LINE[1][3]!=LINE[2][1] || LINE[2][3]!=LINE[3][1] || LINE[3][3]!=LINE[4][1])
                        {
                           ObjectSet(Name[WAVE], OBJPROP_COLOR, Red);
                           ObjectSetText("Name "+Name[WAVE],"neni WAVE 1,2 nebo 3",8,"Arial");
                           ObjectSet    ("Name "+Name[WAVE], OBJPROP_COLOR, Red);
                        }
                        if ((MFI_3 < MFI_5 && LINE[5][0]==1)||(MFI_3 > MFI_5 && LINE[5][0]==-1))
                        {
                           ObjectDelete ("MFI "+time(LINE[3][3]));
                           ObjectCreate ("MFI "+time(LINE[3][3]),OBJ_TEXT,0,LINE[3][3],LINE[5][4]+shift_Y*LINE[5][0],0,0,0,0);
                           ObjectSetText("MFI "+time(LINE[3][3]),DoubleToStr(MFI_3,0),8,"Arial");
                           ObjectSet    ("MFI "+time(LINE[3][3]),OBJPROP_COLOR, COLOR);
                           ObjectDelete ("MFI "+time(LINE[5][3]));
                           ObjectCreate ("MFI "+time(LINE[5][3]),OBJ_TEXT,0,LINE[5][3],LINE[5][4]+shift_Y*LINE[5][0],0,0,0,0);
                           ObjectSetText("MFI "+time(LINE[5][3]),DoubleToStr(MFI_5,0),8,"Arial");
                           ObjectSet    ("MFI "+time(LINE[5][3]),OBJPROP_COLOR, COLOR);
                           ObjectSetText("Name "+Name[WAVE],"Neni divergence MFI 3 ? 5 WAVE",8,"Arial");
                           ObjectSet    ("Name "+Name[WAVE], OBJPROP_COLOR, Red);
                        }
                        break;
                     case 6 ://??????? ????? a
                        X1=LINE[6][3]+(LINE[6][3]-LINE[6][1])*0.38;
                        X2=LINE[6][3]+(LINE[6][3]-LINE[6][1])*0.62;
                        Y1=LINE[6][4]+(LINE[6][2]-LINE[6][4])*0.50; 
                        Y2=LINE[6][4]+(LINE[6][2]-LINE[6][4])*0.62;
                        break;
                     case 7 ://??????? ????? b
                        X2=LINE[7][3]+(LINE[7][3]-LINE[6][1])/0.38;
                        X1=LINE[7][3]+(LINE[7][3]-LINE[6][1])/0.62;
                        Y1=LINE[6][4]-MathAbs(LINE[6][2]-LINE[6][4])*LINE[7][0]*1.00; 
                        Y2=LINE[6][4]-MathAbs(LINE[6][2]-LINE[6][4])*LINE[7][0]*1.62;
                        break;
                     case 8 ://??????? ????? c
                        X1=LINE[7][1]+(LINE[8][3]-LINE[6][3])*1.38;
                        X2=LINE[7][1]+(LINE[8][3]-LINE[6][3])*1.62;
                        Y1=LINE[8][4]-MathAbs(LINE[8][2]-LINE[8][4])*LINE[8][0]*0.38; 
                        Y2=LINE[8][4]-MathAbs(LINE[8][2]-LINE[8][4])*LINE[8][0]*0.50;
                        if (LINE[6][3]!=LINE[7][1])
                        {
                           ObjectSet(Name[WAVE], OBJPROP_COLOR, Red);
                           ObjectSetText("Name "+Name[WAVE],"neni WAVE a",8,"Arial");
                           ObjectSet    ("Name "+Name[WAVE], OBJPROP_COLOR, Red);
                        }
                        break;
                     case 9 ://??????? ????? d
                        X1=LINE[9][3]+(LINE[8][3]-LINE[8][1])*0.38;
                        X2=LINE[9][3]+(LINE[8][3]-LINE[8][1])*0.62;
                        Y1=LINE[9][2]-MathAbs(LINE[6][2]-LINE[8][4])*LINE[9][0]*0.62; 
                        Y2=LINE[9][2]-MathAbs(LINE[6][2]-LINE[8][4])*LINE[9][0]*1.00;
                         if (LINE[6][3]!=LINE[7][1] || LINE[7][3]!=LINE[8][1])
                        {
                           ObjectSet(Name[WAVE], OBJPROP_COLOR, Red);
                           ObjectSetText("Name "+Name[WAVE],"neni WAVE a nebo b ",8,"Arial");
                           ObjectSet    ("Name "+Name[WAVE], OBJPROP_COLOR, Red);
                        }
                        break;
                     case 10 ://??????? ????? e
                        X1=LINE[10][3]+(LINE[10][3]-LINE[10][1])*0.38;
                        X2=LINE[10][3]+(LINE[10][3]-LINE[10][1])*0.62;
                        Y1=LINE[10][4]-MathAbs(LINE[10][2]-LINE[10][4])*LINE[10][0]*0.38; 
                        Y2=LINE[10][4]-MathAbs(LINE[10][2]-LINE[10][4])*LINE[10][0]*0.62;
                        if (LINE[6][3]!=LINE[7][1] || LINE[7][3]!=LINE[8][1] || LINE[8][3]!=LINE[9][1])
                        {
                           ObjectSet(Name[WAVE], OBJPROP_COLOR, Red);
                           ObjectSetText("Name "+Name[WAVE],"neni WAVE a,b nebo c",8,"Arial");
                           ObjectSet    ("Name "+Name[WAVE], OBJPROP_COLOR, Red);
                        }
                        break;
                  }//switch
            }
            ObjectCreate("C "+Name[WAVE], OBJ_TREND, 0,LINE[WAVE][3],LINE[WAVE][4],X1,Y1);
            ObjectSet   ("C "+Name[WAVE], OBJPROP_COLOR, COLOR);    // ????   
            ObjectSet   ("C "+Name[WAVE], OBJPROP_STYLE, STYLE_DASH);// ?????   
            ObjectSet   ("C "+Name[WAVE], OBJPROP_WIDTH, 0);
            ObjectSet   ("C "+Name[WAVE], OBJPROP_BACK,  true);
            ObjectSet   ("C "+Name[WAVE], OBJPROP_RAY,   false);     // ???   

            ObjectCreate("Cil "+Name[WAVE], OBJ_RECTANGLE,0,0,0,0,0);
            ObjectSet   ("Cil "+Name[WAVE], OBJPROP_STYLE, STYLE_DASH);
            ObjectSet   ("Cil "+Name[WAVE], OBJPROP_COLOR, COLOR);
            ObjectSet   ("Cil "+Name[WAVE], OBJPROP_BACK,  false);
            ObjectSet   ("Cil "+Name[WAVE], OBJPROP_TIME1 ,X1);
            ObjectSet   ("Cil "+Name[WAVE], OBJPROP_PRICE1,Y1);
            ObjectSet   ("Cil "+Name[WAVE], OBJPROP_TIME2 ,X2);
            ObjectSet   ("Cil "+Name[WAVE], OBJPROP_PRICE2,Y2);
         }
      }//-????? 1 - ? --------------------------------------------------------------------------------------------------------+
   }//for

   COLOR = color_per(per);
   for(k=1; k<=10; k++) 
   {
      ObjectDelete ("Name "+k);
      if (ObjectFind(Name[k])==0)
      {
         ObjectCreate ("Name "+k, OBJ_LABEL, 0, 0, 0);// ???????? ???.
         ObjectSetText("Name "+k, Name[k]+time(LINE[k][1])+" "+DoubleToStr(LINE[k][2],Digits)+" "+?????(LINE[k][3])+" "+DoubleToStr(LINE[k][4],Digits)     ,8,"Arial");
         ObjectSet
11.02.2011 16:52 lbs

Awesome job mate! Going to try to incorporate this with a few systems I am working on, thanks!

Share this article

Leave a comment