//+------------------------------------------------------------------+ //| Automatic_analysis_lines.mq4 | //| Roll | //+------------------------------------------------------------------+ #property copyright "Roll" #property link "" #property indicator_chart_window extern int Quant_Bars=55;//колич баров для расчета extern bool show_canal=false;//показать канал //+------------------------------------------------------------------+ int init(){return(0);} int deinit(){del_ob();return(0);} //+------------------------------------------------------------------+ int start() { int H_0,H_0_1,H_1; int L_0,L_0_1,L_1; int Quant_Bars1,Quant_Bars2; string name,name2,name3,name5,name6,name7; 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"; color Channel_Color=LightGreen; bool Channel_as_Ray=true; int Line_Width=2; del_ob(); //-----------главные экстремумы----------- H_0=ArrayMaximum(High,Quant_Bars);//номер бара с максимумом L_0=ArrayMinimum(Low,Quant_Bars);//номер бара с минимумом // ===============наклон экстремальной прямой вверх========= //--------------------- главный тренд--------------------- 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); if(show_canal) {if(ObjectFind("Channel")!=0) {ObjectCreate("Channel",OBJ_CHANNEL,0,time_L_0,MinimumL_0,time_L_0_1,MinimumL_0_1,time_H_0,MaximumH_0); ObjectSet("Channel",OBJPROP_COLOR,Channel_Color); ObjectSet("Channel",OBJPROP_WIDTH,Line_Width); ObjectSet("Channel",OBJPROP_RAY,Channel_as_Ray); ObjectSet("Channel",OBJPROP_STYLE,STYLE_SOLID);} else {ObjectMove("Channel",0,time_L_0,MinimumL_0); ObjectMove("Channel",1,time_L_0_1,MinimumL_0_1); ObjectMove("Channel",2,time_H_0,MaximumH_0);}}} // ===============наклон экстремальной прямой вниз========= //--------------------- главный тренд--------------------- 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=H_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");}