//+------------------------------------------------------------------+ //| Канал по фракталам.mq4 | //| TO | //| | //+------------------------------------------------------------------+ #property copyright "TO" #property link "http://forex-tradexperts-to.narod.ru" extern double Min_Height = 2; extern double Max_Height = 12000; extern int Min_Lenght = 1; extern int Max_Lenght = 3000; extern int Min_Ext_Width = 2; extern int Max_Ext_Width = 1500; extern double MaxRez = 300; extern bool Rez_Tail=true; extern int Tail = 10; extern int magic=123; extern string ЛИНИЯ="Настройки линий"; extern color цвет_канала_вверх=LimeGreen; extern color цвет_канала_вниз=Tomato; extern int толщина=1; extern string ТЕКСТ="Настройки текста"; extern color цвет=White; extern int размер=14; #property indicator_chart_window int init() { return(0); } int deinit() { int i; for(i=ObjectsTotal()-1;i>=0;i--) { if(StringFind(ObjectName(i),DoubleToStr(magic,0)+"_")>=0)ObjectDelete(ObjectName(i)); } return(0); } int start() { int i; int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0)counted_bars--; for(i=Bars-counted_bars-1000;i>=0;i--) { FindNewFractal(i); } return(0); } bool isNewBar() { static datetime BarTime; bool res=false; if (BarTime!=Time[0]) { BarTime=Time[0]; res=true; } return(res); } double MAX_1=0,MAX_2=0,MAX_3=0,MAX_4=0; double MIN_1=0,MIN_2=0,MIN_3=0,MIN_4=0; double FindNewFractal(int k) { double max_1=0,max_2=0,max_3=0,max_4=0,min_1=0,min_2=0,min_3=0,min_4=0; double shirina,angle; double perem; string name,text; datetime temp_s2; int i,s1,s2,s3,s4; for (s1=k+3; s1<10000; s1++) { max_1=iFractals(NULL,0, MODE_UPPER, s1); min_1=iFractals(NULL,0, MODE_LOWER, s1); if(max_1!=0) { for (s2=s1+1; s2<10000; s2++) { min_2=iFractals(NULL,0, MODE_LOWER, s2); if(min_2!=0 && (s2-s1)>Min_Ext_Width && (s2-s1)=Min_Height && MathAbs(max_1-min_2)/Point<=Max_Height) { for (s3=s2+1; s3<10000; s3++) { max_3=iFractals(NULL,0, MODE_UPPER, s3); if(max_3!=0 && (s3-s1)>Min_Lenght && (s3-s1)Min_Ext_Width && (s3-s2)Min_Lenght && (s4-s2)Min_Ext_Width && (s4-s3)=Min_Height && MathAbs(max_3-min_4)/Point<=Max_Height) { if(max_1>max_3 && max_1>min_2) { name=DoubleToStr(magic,0)+"_"+(Time[s4])+(Time[s3])+(Time[s2]); if(ObjectFind(name)==0)ObjectDelete(name); if(ObjectFind(name+"_")==0)ObjectDelete(name+"_"); ObjectCreate(name,OBJ_CHANNEL,0,Time[s4],min_4,Time[s2],min_2,Time[s3],max_3); shirina=MathAbs(max_3-ObjectGetValueByShift(name,s3)); if((ObjectGetValueByShift(name,s1)+shirina)>(max_1-MaxRez*Point) && (ObjectGetValueByShift(name,s1)+shirina)<(max_1+MaxRez*Point)) { ObjectSet(name,OBJPROP_PRICE1,min_2);ObjectSet(name,OBJPROP_TIME1,Time[s2]);ObjectSet(name,OBJPROP_PRICE2,min_4);ObjectSet(name,OBJPROP_TIME2,Time[s4]);perem=ObjectGetValueByShift(name,s4+Tail); ObjectSet(name,OBJPROP_PRICE2,min_2);ObjectSet(name,OBJPROP_TIME2,Time[s2]);ObjectSet(name,OBJPROP_PRICE1,min_4);ObjectSet(name,OBJPROP_TIME1,Time[s4]);ObjectSet(name,OBJPROP_COLOR,цвет_канала_вверх); ObjectSet(name,OBJPROP_WIDTH,толщина);ObjectSet(name,OBJPROP_PRICE1,perem);ObjectSet(name,OBJPROP_TIME1,Time[s4+Tail]);ObjectSet(name,OBJPROP_PRICE3,perem+shirina);ObjectSet(name,OBJPROP_TIME3,Time[s4+Tail]); if((s2-Tail)<0)temp_s2=Time[0]+MathAbs(s2-Tail)*Period()*60; if((s2-Tail)>=0)temp_s2=Time[s2-Tail]; perem=ObjectGetValueByShift(name,s2-Tail); ObjectSet(name,OBJPROP_PRICE2,perem); ObjectSet(name,OBJPROP_TIME2,temp_s2); ObjectSet(name,OBJPROP_RAY,false); ObjectCreate(name+"_",OBJ_TEXT,0,Time[s3],max_3+iATR(Symbol(),Period(),100,1)); text="ширина "+DoubleToStr(shirina/Point,0); ObjectSetText(name+"_",text,размер,"Times New Roman",цвет); if(Rez_Tail)for(i=s4+Tail;i>=s2-Tail;i--) { if(i<0)i=0; if((ObjectGetValueByShift(name,i)+shirina)<(High[i]-MaxRez*Point) || ObjectGetValueByShift(name,i)>(Low[i]+MaxRez*Point)) { if(ObjectFind(name)==0)ObjectDelete(name); if(ObjectFind(name+"_")==0)ObjectDelete(name+"_"); } } } else {ObjectDelete(name);ObjectDelete(name+"_");} } if(max_1min_2) { name=DoubleToStr(magic,0)+"_"+(Time[s4])+(Time[s3])+(Time[s2]); if(ObjectFind(name)==0)ObjectDelete(name); if(ObjectFind(name+"_")==0)ObjectDelete(name+"_"); ObjectCreate(name,OBJ_CHANNEL,0,Time[s4],min_4,Time[s2],min_2,Time[s3],max_3); shirina=MathAbs(max_3-ObjectGetValueByShift(name,s3)); if((ObjectGetValueByShift(name,s1)+shirina)>(max_1-MaxRez*Point) && (ObjectGetValueByShift(name,s1)+shirina)<(max_1+MaxRez*Point)) { ObjectSet(name,OBJPROP_PRICE1,min_2);ObjectSet(name,OBJPROP_TIME1,Time[s2]);ObjectSet(name,OBJPROP_PRICE2,min_4);ObjectSet(name,OBJPROP_TIME2,Time[s4]);perem=ObjectGetValueByShift(name,s4+Tail); ObjectSet(name,OBJPROP_PRICE2,min_2);ObjectSet(name,OBJPROP_TIME2,Time[s2]);ObjectSet(name,OBJPROP_PRICE1,min_4);ObjectSet(name,OBJPROP_TIME1,Time[s4]);ObjectSet(name,OBJPROP_COLOR,цвет_канала_вниз); ObjectSet(name,OBJPROP_WIDTH,толщина);ObjectSet(name,OBJPROP_PRICE1,perem);ObjectSet(name,OBJPROP_TIME1,Time[s4+Tail]);ObjectSet(name,OBJPROP_PRICE3,perem+shirina);ObjectSet(name,OBJPROP_TIME3,Time[s4+Tail]); if((s2-Tail)<0)temp_s2=Time[0]+MathAbs(s2-Tail)*Period()*60; if((s2-Tail)>=0)temp_s2=Time[s2-Tail]; perem=ObjectGetValueByShift(name,s2-Tail); ObjectSet(name,OBJPROP_PRICE2,perem); ObjectSet(name,OBJPROP_TIME2,temp_s2); ObjectSet(name,OBJPROP_RAY,false); ObjectCreate(name+"_",OBJ_TEXT,0,Time[s3],max_3+iATR(Symbol(),Period(),100,1)); text="ширина "+DoubleToStr(shirina/Point,0); ObjectSetText(name+"_",text,размер,"Times New Roman",цвет); if(Rez_Tail)for(i=s4+Tail;i>=s2-Tail;i--) { if(i<0)i=0; if((ObjectGetValueByShift(name,i)+shirina)<(High[i]-MaxRez*Point) || ObjectGetValueByShift(name,i)>(Low[i]+MaxRez*Point)) { if(ObjectFind(name)==0)ObjectDelete(name); if(ObjectFind(name+"_")==0)ObjectDelete(name+"_"); } } } else {ObjectDelete(name);ObjectDelete(name+"_");} } return(0); } else if(min_4!=0)if((s4-s3)>=Max_Ext_Width || (s4-s2)>=Max_Lenght || MathAbs(max_3-min_4)/Point>Max_Height)break; } } else if(max_3!=0)if((s3-s1)>=Max_Lenght || (s3-s2)>=Max_Ext_Width)break; } } else if(min_2!=0)if((s2-s1)>=Max_Ext_Width || MathAbs(max_1-min_2)/Point>Max_Height)break; } } } return(0); }