- June 26, 2013
- Posted by: Forex Wiki Team
- Category: FX Ind
Name: |
|
||
Author: | cmillion (2009.12.04 17:56) | ||
Downloaded: | 28929 | ||
Download: |
|
||
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: 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) 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: 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: 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. |
|||
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 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
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 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! |