Indicators: Elliott Waves Indicator

 

Elliott Waves Indicator:

The indicator helps to use the Elliott waves, as described in the book "Trade Chaos" by Bill Williams.

Author: Vladimir Khlystov

Elliott Waves Indicator
Elliott Waves Indicator
  • www.mql5.com
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*****", for exampe: "1 wave". After the first tick, or if you don't want to wait for it, update it using the right...
 

What do the different colored dots on Fractals mean? How do you use them?

Thanks for your feedback.

Regards

Jeet

 
jeet1970:

What do the different colored dots on Fractals mean? How do you use them?


3 colour rhombuses on Fractals- mark colour of the candle MFI Williams

Green Fading False Cowerring


Use automatic translation of the russian page, there there is answers many questions:

http://translate.google.com/translate?hl=en&sl=ru&tl=en&u=http%3A%2F%2Fcodebase.mql4.com%2Fru%2F_my%2F6268%2Fpage3   

My work: http://translate.google.com/translate?hl=en&sl=ru&tl=en&u=http%3A%2F%2Fcmillion.narod.ru%2Frobot.html

 

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

 

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, ??????? ??????? |
//|                                                cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, ??????? ???????"
#property link      "cmillion@narod.ru"
 
#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  
 

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.

 

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

Gabriella

 
not sure if this was sent, here it is again
 

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

 

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

 
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