//+------------------------------------------------------------------+ //| ElliotsTarget.mq4 | //| Copyright © 2011, Vladimir Hlystov | //| cmillion@narod.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2011, Vladimir Hlystov" #property link "http://cmillion.narod.ru" #property indicator_chart_window //+------------------------------------------------------------------+ extern int before = 7; //сколько свечей до фрактала extern int after = 2; //сколько свечей после фрактала double Buffer[]; datetime TimeOld,TimeOldВoлна2; //+------------------------------------------------------------------+ int init() { Comment("ElliotsTarget","\n","Copyright © 2011, Vladimir Hlystov","\n","http://cmillion.narod.ru", "\n","before",before, "\n","after",after); return(0); } //+------------------------------------------------------------------+ int deinit() { ObjectDelete("W1 "); ObjectDelete("W2 "); ObjectDelete("W3 "); ObjectDelete("W3 _"); return(0); } //+------------------------------------------------------------------+ int start() { double fr,PricednBar1,PriceupBar1,PriceВолна2; string Name; datetime TimednBar1,TimeupBar1,TimeВoлна2; int Bar0,j; for (int i=after; i<500; i++) { if (PricednBar1!=0 && PriceupBar1!=0) break; if (PricednBar1==0) { fr = Fractal(MODE_LOWER,i); if (fr!=0) { TimednBar1=Time[i];PricednBar1=fr; if (Bar0==0) { Bar0=i; for (j=0; jLow[j] || PriceВолна2==0) {PriceВолна2=Low[j];TimeВoлна2=Time[j];} //находим минимум } } } } } double Price0,Price1; datetime Time0,Time1; if (TimeupBar1>TimednBar1) { Time0 = TimeupBar1; Time1 = TimednBar1; Price0 = PriceupBar1; Price1 = PricednBar1; } else { Time0 = TimednBar1; Time1 = TimeupBar1; Price0 = PricednBar1; Price1 = PriceupBar1; } if ((Time0!=TimeOld)||(TimeВoлна2!=TimeOldВoлна2)) { TimeOld=Time0; TimeOldВoлна2 = TimeВoлна2; datetime TimeEnd1 = TimeВoлна2+MathAbs(TimeupBar1-TimednBar1)*0.38; datetime TimeEnd2 = TimeВoлна2+MathAbs(TimeupBar1-TimednBar1)*0.62; double Wawes1 = MathAbs(Price0-Price1); if (Wawes1*0.38MathAbs(PriceВолна2-Price0)) { double PriceEnd1,PriceEnd2; if (TimeupBar1>TimednBar1) { PriceEnd1 = PriceВолна2+Wawes1*1.00; PriceEnd2 = PriceВолна2+Wawes1*1.62; } else { PriceEnd1 = PriceВолна2-Wawes1*1.0; PriceEnd2 = PriceВолна2-Wawes1*1.62; } Name = "W1 "; ObjectDelete(Name); ObjectCreate(Name, OBJ_TREND, 0,Time1,Price1,Time0,Price0); ObjectSet (Name, OBJPROP_COLOR, Green); ObjectSet (Name, OBJPROP_STYLE, 0); ObjectSet (Name, OBJPROP_WIDTH, 2); ObjectSet (Name, OBJPROP_BACK, true); ObjectSet (Name, OBJPROP_RAY, false); Name = "W2 "; ObjectDelete(Name); ObjectCreate(Name, OBJ_TREND, 0,Time0,Price0,TimeВoлна2,PriceВолна2); ObjectSet (Name, OBJPROP_COLOR, Green); ObjectSet (Name, OBJPROP_STYLE, 0); ObjectSet (Name, OBJPROP_WIDTH, 0); ObjectSet (Name, OBJPROP_BACK, true); ObjectSet (Name, OBJPROP_RAY, false); Name = "W3 "; ObjectDelete(Name); ObjectCreate(Name, OBJ_TREND, 0,TimeВoлна2,PriceВолна2,TimeEnd1,PriceEnd1); ObjectSet (Name, OBJPROP_COLOR, Gray); ObjectSet (Name, OBJPROP_STYLE, STYLE_DASH); ObjectSet (Name, OBJPROP_WIDTH, 0); ObjectSet (Name, OBJPROP_BACK, true); ObjectSet (Name, OBJPROP_RAY, false); Name=StringConcatenate(Name,"_"); ObjectDelete(Name); ObjectCreate(Name, OBJ_RECTANGLE,0,0,0,0,0); ObjectSet (Name, OBJPROP_STYLE, STYLE_DASH); ObjectSet (Name, OBJPROP_COLOR, Gray); ObjectSet (Name, OBJPROP_BACK, false); ObjectSet (Name, OBJPROP_TIME1 ,TimeEnd1); ObjectSet (Name, OBJPROP_PRICE1,PriceEnd1); ObjectSet (Name, OBJPROP_TIME2 ,TimeEnd2); ObjectSet (Name, OBJPROP_PRICE2,PriceEnd2); } } return(0); } //+------------------------------------------------------------------+ double Fractal(int tip,int bar) { int i,n; double fr,fr1; if (tip==MODE_UPPER) { fr1 = iFractals(NULL,0,MODE_UPPER,bar); if (fr1==0) return(0); i=bar;n=0; while (true) { i++; if (i>Bars) return(0); fr = High[i]; if (fr==0) continue; else n++; if (n>=before) break; if (fr>fr1) return(0); } i=bar;n=0; while (true) { i--; if (i==0) return(0); fr = High[i]; if (fr==0) continue; else n++; if (n>=after) break; if (fr>fr1) return(0); } return(fr1); } if (tip==MODE_LOWER) { fr1 = iFractals(NULL,0,MODE_LOWER,bar); if (fr1==0) return(0); i=bar;n=0; while (true) { i++; if (i>Bars) return(0); fr = Low[i]; if (fr==0) continue; else n++; if (n>=before) break; if (fr=after) break; if (fr