//+------------------------------------------------------------------+ //| Automatic_analysis_lines_scr.mq4 | //| Roll | //| | //+------------------------------------------------------------------+ #property copyright "Roll" #property link "" #property show_inputs extern int Quant_Bars=65;//колич баров в истории extern bool Del_Objects=false;//удаление объектов false/true //--------------------------------------+ int deinit() {if(Del_Objects)del_ob();return(0);} //+-------script program start function--+ int start() {int H_0,H_0_1,H_1,L_0,L_0_1,L_1,Quant_Bars1,Quant_Bars2; string name,name2,name3,name5,name6; datetime time_H_0,time_H_0_1,time_H_1; datetime time_L_0,time_L_0_1,time_L_1; double Maximum,MaximumH_0,MaximumH_0_1,MaximumH_1; double Minimum,MinimumL_0,MinimumL_0_1,MinimumL_1; name="MyTrend"; name2="MyTrend_1"; name3="MyTrend_2"; name5="Fibo_1"; name6="Fibo_2"; del_ob(); //---------------------экстремумы----------- H_0=ArrayMaximum(High,Quant_Bars);//номер бара с максимумом L_0=ArrayMinimum(Low,Quant_Bars);//номер бара с минимумом Maximum=High[H_0];Minimum=Low[L_0]; // ===============наклон экстремальной прямой вверх========= //--------------------- главный тренд--------------------- if(H_0=0;i--) //2-я коррекция минимума {if(Low[i]=0;k--) {if(High[k]>ObjectGetValueByShift(name3,k)) {time_H_0_1=iTime(0,0,k); MaximumH_0_1=High[k]; ObjectMove(name3,1,time_H_0_1,MaximumH_0_1);//новая максимальная цена,2коорд continue;}} ObjectCreate(name5,OBJ_FIBO,0,time_L_0,MinimumL_0,time_H_0,MaximumH_0); ObjectCreate(name6,OBJ_FIBO,0,time_H_0,MaximumH_0,time_L_1,MinimumL_1); ObjectSet(name6,OBJPROP_LEVELCOLOR,Magenta); ObjectSet(name6,OBJPROP_LEVELWIDTH,2); datetime left_rect1=time_H_0; datetime right_rect1=iTime(0,0,H_0-5); double price1_rect1=MinimumL_0+(MaximumH_0-MinimumL_0)*0.618 ; double price2_rect1=MinimumL_0+(MaximumH_0-MinimumL_0)*0.382; ObjectCreate("rect1",OBJ_RECTANGLE,0,left_rect1,price1_rect1,right_rect1,price2_rect1); ObjectSet("rect1",OBJPROP_COLOR,MediumBlue); datetime left_rect2=iTime(0,0,L_1+5); datetime right_rect2=time_L_1; double price1_rect2=MinimumL_1+(MaximumH_0-MinimumL_1)*0.618; double price2_rect2=MinimumL_1+(MaximumH_0-MinimumL_1)*0.382; ObjectCreate("rect2",OBJ_RECTANGLE,0,left_rect2,price1_rect2,right_rect2,price2_rect2); ObjectSet("rect2",OBJPROP_COLOR,Crimson);} // ===============наклон экстремальной прямой вниз========= //--------------------- главный тренд--------------------- else if(H_0>L_0) {H_0=MAX(Quant_Bars); //коррекция на флэте time_H_0=iTime(0,0,H_0); MaximumH_0=High[H_0]; //новая максимальная цена,1коорд H_0_1=H_0-2; time_H_0_1=iTime(0,0,H_0_1); MaximumH_0_1=High[H_0_1]; j=H_0_1; ObjectCreate(name2,OBJ_TREND,0,time_H_0,MaximumH_0,time_H_0_1,MaximumH_0_1);//образование трендпрямой(1-я коррекция минимума) ObjectSet(name2,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(name2,OBJPROP_COLOR,Violet); ObjectSet(name2,OBJPROP_WIDTH,2); ObjectSet(name2,OBJPROP_TIMEFRAMES,0); for(i=j;i>=0;i--) //2-я коррекция минимума {if(High[i]>ObjectGetValueByShift(name2,i)) {H_0_1=i;time_H_0_1=iTime(0,0,i); MaximumH_0_1=High[H_0_1]; ObjectMove(name2,1,time_H_0_1,MaximumH_0_1);//Скользящий минимум continue ;}} //конец 2-й коррекции минимума //---------------текущий тренд-(малый)------------------ Quant_Bars1=L_0+1; //новое значение колич баров в истории, начиная с максимума L_0=MIN(Quant_Bars1); //коррекция на флэте time_L_0=iTime(0,0,L_0); MinimumL_0=Low[L_0]; //новая максимальная цена,1коорд L_0_1=L_0-2; //коррекция на флэте time_L_0_1=iTime(0,0,L_0_1); MinimumL_0_1=Low[L_0_1]; H_1=ArrayMaximum(Low,Quant_Bars1); H_1=MAX(Quant_Bars1); //коррекция на флэте time_H_1=iTime(0,0,H_1); MaximumH_1=High[H_1]; g=L_0_1; ObjectCreate(name3,OBJ_TREND,0,time_L_0,MinimumL_0,time_L_0_1,MinimumL_0_1);//образование тренд прямой ObjectSet(name3,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(name3,OBJPROP_COLOR,DeepSkyBlue); ObjectSet(name3,OBJPROP_WIDTH,2); ObjectSet(name3,OBJPROP_TIMEFRAMES,0); for(k=g;k>=0;k--) {if(Low[k]=0;z--) {if(MathAbs(Maxi-High[z])<=2*Point&& z>=4)//коррекция максимума {BarMaxi=z;continue;}}return(BarMaxi);} int MIN(int QBarsm) //функция для коррекции минимума прямой при флэте {int y;int BarMini=ArrayMinimum(Low,QBarsm); double Mini=Low[BarMini]; for(y=BarMini;y>=0;y--) {if(MathAbs(Mini-Low[y])<=2*Point&&y>=4) {BarMini=y;continue;}}return(BarMini);} void del_ob() {ObjectDelete("MyTrend"); ObjectDelete("MyTrend_1"); ObjectDelete("MyTrend_2"); ObjectDelete("Fibo_1"); ObjectDelete("Fibo_2"); ObjectDelete("rect1"); ObjectDelete("rect2"); ObjectDelete("Channel");}