//+------------------------------------------------------------------+ //| TD_Points&Lines_mgtd1.mq4 | //| Vladislav Goshkov (VG) | //| 4vg@mail.ru | //+------------------------------------------------------------------+ #property copyright "Vladislav Goshkov (VG)" #property link "4vg@mail.ru" //---- #property indicator_chart_window //---- extern int StepBack=0; extern bool Qw1=True; extern bool Qw2=True; extern bool Qw3=True; extern color UpLineColor=Blue; extern int UpLnWidth=1; extern color DnLineColor=Red; extern int DnLnWidth=1; extern color MarkColor =Blue; extern int MarkNumber =217; //---- int i=1,NP=0,D=0, iB_Up=0,iB_Dn=0, S1=0, S2=0, UpLev=0, DownLev=0, iP_Up=0, iP_Dn=0, value=0, CurPeriod=0, shift=0; //---- datetime nTime=0; //---- double UpV=0, DownV=0, iP=0, target=0, UpP[2]={0,0}, DownP[2]={0,0}, PP1=0,PP2=0,PP3=0; int DownBT[2]={0,0}, // Bar Time UpBT[2]={0,0}, UpB[2]={0,0}, // Bar Num DownB[2]={0,0}; string buff_str=""; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- TODO: add your code here Comment(" "); ObjectsDeleteAll(); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int Target_Style[4]={STYLE_DASH,STYLE_DASH,STYLE_DASH,STYLE_SOLID}, Target_Color[4]={DimGray,MediumSpringGreen,SeaGreen,Blue}, Target_LW[4] ={ 1, 1, 1, 2 }; double target[4]; //---- TODO: add your code here if((nTime!=Time[0]) || (CurPeriod!=Period())) { UpP[0]=0; UpP[1]=0; //================================================= //******** Поиск опорных точек предложения ******** //================================================= for(i=2+StepBack,D=2,NP=0; (NPHigh[i+1] && High[i]>High[i-1] && High[i]>Close[i+2]) && High[i]> UpP[0]) { UpB[NP] =i; UpBT[NP]=Time[i]; UpP[NP] =High[i]; NP++; } } if (High[i]== High[i+1]) { if((High[i]>High[i+2] && High[i]>High[i-1] && High[i]>Close[i+3])&& High[i]> UpP[0]) { UpB[NP] =i; UpBT[NP]=Time[i]; UpP[NP] =High[i]; NP++; } } if(i==(Bars-2)) { UpB[NP] =i; UpBT[NP]=Time[i]; UpP[NP] =High[i]; break; } }//for(i=2+StepBack,D=2,NP=0; NP Time[0]) { //---- for(i=0;i<4;i++) target[i]=0; for( i=UpB[0]; i>=StepBack; i--) { if((Close[i]>UpP[0]+UpV*(UpB[0]-i)) && (Close[i+1]<=UpP[0]+UpV*(UpB[0]-(i+1)))) { iB_Up=i; iP=UpP[0]+UpV*(UpB[0]-i); iP_Up=iP; S1=Lowest(NULL,0,MODE_LOW,UpB[1]-i,i); S2=Lowest(NULL,0,MODE_CLOSE,UpB[1]-i,i); //---- PP1=iP+((UpP[1]+UpV*(UpB[1]-S1))-Low[S1]); PP2=iP+((UpP[1]+UpV*(UpB[1]-S2))-Low[S2]); PP3=iP+((UpP[1]+UpV*(UpB[1]-S1))-Close[S1]); if((Qw1 && Close[i+2]>Close[i+1]) || (Qw2 && Open[i]> iP) || (Qw3 && (Close[i+1]+(Close[i+1]-MathMin(Low[i+1],Close[i+2])))=StepBack;i--) { if((Close[i]=DownP[0]+DownV*(DownB[0]-(i+1)))) { iB_Dn=i; iP=DownP[0]+DownV*(DownB[0]-i); iP_Dn=iP; S1=Highest(NULL,0,MODE_HIGH,DownB[1]-i,i); S2=Highest(NULL,0,MODE_CLOSE,DownB[1]-i,i); //---- PP1=iP-(High[S1]-(DownP[1]+DownV*(DownB[1]-S1))); PP2=iP-(High[S2]-(DownP[1]+DownV*(DownB[1]-S2))); PP3=iP-(Close[S1]-(DownP[1]+DownV*(DownB[1]-S1))); if((Qw1 && Close[i+2]iP)) { target[0]=PP1; target[1]=PP2; target[2]=PP3; target[3]=(PP1+PP2+PP3)/3; buff_str="Break_Sig_Dn"; if(ObjectFind(buff_str)==-1) { ObjectCreate(buff_str, OBJ_ARROW,0, Time[iB_Dn], iP+2*Point ); ObjectSet(buff_str, OBJPROP_ARROWCODE, 164); ObjectSet(buff_str, OBJPROP_COLOR, Blue); } else { ObjectMove(buff_str, 0, Time[iB_Dn], iP+2*Point ); } } } }//for( i=DownB[1]; i>=StepBack;i--) { for(i=3;i>=0;i--) { buff_str="Target"+i; if(ObjectFind(buff_str)==-1) { ObjectCreate(buff_str, OBJ_HLINE,0, Time[0], target[i] ); ObjectSet(buff_str, OBJPROP_STYLE, Target_Style[i]); ObjectSet(buff_str, OBJPROP_COLOR, Target_Color[i]); ObjectSet(buff_str, OBJPROP_WIDTH, Target_LW[i]); } else { ObjectMove(buff_str, 0, Time[0], target[i] ); } } //---- string buff_str="TD_LatestCulcBar"; if(ObjectFind(buff_str)==-1) { ObjectCreate(buff_str, OBJ_ARROW,0, Time[StepBack], Low[StepBack]-2*Point ); ObjectSet(buff_str, OBJPROP_ARROWCODE, MarkNumber); ObjectSet(buff_str, OBJPROP_COLOR, MarkColor); } else { ObjectMove(buff_str, 0, Time[StepBack], Low[StepBack]-2*Point ); } return(0); } //+------------------------------------------------------------------+