Author: *
0 Views
0 Downloads
0 Favorites
sEcrossL
//+------------------------------------------------------------------+
//|                                                     sEcrossL.mq4 |
//|                             http://www.mql4.com/ru/users/Integer |
//+------------------------------------------------------------------+
#property copyright "*"
#property link      "*"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {

   
   Comment("");

         while(!IsStopped()){
         
            if(ObjectFind("fa")!=0){
               ObjectCreate("fa",OBJ_FIBOARC,0,Time[0],Open[0],Time[30],Close[30]);
               ObjectSet("fa",OBJPROP_ELLIPSE,true);
               ObjectSet("fa",OBJPROP_SCALE,100);
            }
            
            if(ObjectFind("la")!=0){ 
               ObjectCreate("la",OBJ_TREND,0,Time[10],Open[10],Time[40],Close[40]);
            }
            

            datetime etm1=ObjectGet("fa",OBJPROP_TIME1);
            double ep1=ObjectGet("fa",OBJPROP_PRICE1);
            datetime etm2=ObjectGet("fa",OBJPROP_TIME2);
            double ep2=ObjectGet("fa",OBJPROP_PRICE2); 
            double a=Point*ObjectGet("fa",OBJPROP_SCALE); 
          
            int eb1;
               if(etm1>Time[0]){
                  eb1=(Time[0]-etm1)/(Period()*60);
               }
               else{
                  eb1=iBarShift(NULL,0,etm1,false);
               }
            int eb2;
               if(etm1>Time[0]){
                  eb2=(Time[0]-etm2)/(Period()*60);
               }
               else{
                  eb2=iBarShift(NULL,0,etm2,false);
               }
               
            int ecx=eb2;
            double ecy=ep2;    

            datetime ltm1=ObjectGet("la",OBJPROP_TIME1);
            double lp1=ObjectGet("la",OBJPROP_PRICE1);
            datetime ltm2=ObjectGet("la",OBJPROP_TIME2);
            double lp2=ObjectGet("la",OBJPROP_PRICE2); 
            
            int lb1;
               if(ltm1>Time[0]){
                  lb1=(Time[0]-ltm1)/(Period()*60);
               }
               else{
                  lb1=iBarShift(NULL,0,ltm1,false);
               }
            int lb2;
               if(ltm1>Time[0]){
                  lb2=(Time[0]-ltm2)/(Period()*60);
               }
               else{
                  lb2=iBarShift(NULL,0,ltm2,false);
               }

            double lcx=lb2;
            double lcy=lp2;
            double k=(lp1-lp2)/(lb1-lb2);
            
            double r100=MathSqrt(MathPow(MathAbs(eb1-ecx),2)+MathPow((ep1-ecy)/a,2));
            
            int lc=ObjectGet("fa",OBJPROP_FIBOLEVELS);
               
               for(int i=ObjectsTotal()-1;i>=0;i--){
                  if(StringFind(ObjectName(i),"cr",0)==0){
                     ObjectDelete(ObjectName(i));
                  }
               }

            int dn=0;               
               for(i=0;i<lc;i++){
                  double r=r100*ObjectGet("fa",OBJPROP_FIRSTLEVEL+i);
                  
                  double A=-a*a - k*k;
                  double B=2.0*ecx*a*a - lcy*k - k*lcy + k*k*lcx + k*ecy + k*lcx*k + ecy*k;
                  double C = r*r*a*a - ecx*ecx*a*a - lcy*lcy + lcy*k*lcx + lcy*ecy + k*lcx*lcy - k*lcx*k*lcx - k*lcx*ecy + ecy*lcy - ecy*k*lcx - ecy*ecy;
                  int Cnt;
                  double X1,X2;
                  QuadraticEquation(A,B,C,Cnt,X1,X2);
                     if(Cnt>0){
                        double Y1 = lcy + k*(X1-lcx);
                        fObjTrendLine("cr_"+dn,MyTime(X1),Y1,MyTime(X1),Y1,false,Blue,5); 
                        dn++;
                     }
                     if(Cnt>1){
                        double Y2 = lcy + k*(X2-lcx);  
                        fObjTrendLine("cr_"+dn,MyTime(X2),Y2,MyTime(X2),Y2,false,Blue,5); 
                        dn++;                   
                     }
                  
               }                  
   
   
            WindowRedraw();
            Sleep(10);
         }

   Comment("");
   ObjectsDeleteAll();
   WindowRedraw();
   
   return(0);
  }
//+------------------------------------------------------------------+

int MyTime(double aShift){
   int sh=MathRound(aShift);
      if(sh<0){
         return(Time[0]+Period()*60*MathAbs(sh));
      }
   return(Time[sh]);
}


void QuadraticEquation(double A,double B,double C,int & Cnt,double & X1,double & X2){
   double D=B*B-4.0*A*C;
      if(D==0){
         Cnt=1;
         X1=(-B)/(2.0*A);        
      }
      else if(D>0){
         Cnt=2;
         D=MathSqrt(D);
         X1=(-B+D)/(2.0*A);
         X2=(-B-D)/(2.0*A);
      }
      else{
         Cnt=0;
      }
}

void fObjTrendLine(
   string aObjectName,  // 1 èìÿ
   datetime aTime_1,    // 2 âðåìÿ 1
   double aPrice_1,     // 3 öåíà 1
   datetime aTime_2,    // 4 âðåìÿ 2
   double aPrice_2,     // 5 öåíà 2
   bool aRay=false,     // 6 ëó÷
   color aColor=Red,    // 7 öâåò
   int aWidth=1,        // 8 òîëùèíà
   int aWindowNumber=0, // 9 îêíî
   int aStyle=0,        // 10 0-STYLE_SOLID, 1-STYLE_DASH, 2-STYLE_DOT, 3-STYLE_DASHDOT, 4-STYLE_DASHDOTDOT
   bool aBack=false     // 11 ôîí
   ){
   
   // fTrendLine("",Time[100],Close[100],Time[1],Close[1]);
   // fTrendLine("",Time[100],Close[100],Time[1],Close[1],false,Red,1,0,STYLE_SOLID,false);
   
      if(ObjectFind(aObjectName)!=aWindowNumber){
         ObjectCreate(aObjectName,OBJ_TREND,aWindowNumber,aTime_1,aPrice_1,aTime_2,aPrice_2);
      }      
   ObjectSet(aObjectName,OBJPROP_TIME1,aTime_1);
   ObjectSet(aObjectName,OBJPROP_PRICE1,aPrice_1);   
   ObjectSet(aObjectName,OBJPROP_TIME2,aTime_2);       
   ObjectSet(aObjectName,OBJPROP_PRICE2,aPrice_2); 
   ObjectSet(aObjectName,OBJPROP_RAY,aRay);     
   ObjectSet(aObjectName,OBJPROP_COLOR,aColor);
   ObjectSet(aObjectName,OBJPROP_WIDTH,aWidth);
   ObjectSet(aObjectName,OBJPROP_BACK,aBack);
   ObjectSet(aObjectName,OBJPROP_STYLE,aStyle);                
}

Comments