help to trace the projection of angle arms

Back to topics list To post a new topic, please log in or register
avatar
17
jeef_1985 2016.05.13 13:47
 

     

I try to draw the projection of angle arms  but I block

this is what I did to trace the angle based on the ZigZag

first two functions for the top and buttom like this 

 

 double GetTops(int shift, int &top  ){
      int found = 0 ,
      i = 0 ;
      double hi = 0 ;
        
    for(i = 0 ; i < Bars ; i++){
        
           hi = iCustom(NULL,0,"ZigZag",0,i);
           if(hi !=0 && hi == High[i])
            found++ ; 
           if(found == shift )
          {
           top = i ;         
           return(hi) ;  
           }
            
             }
       return(hi) ;                
     }


  double GetButtoms(int shift , int &buttom){
      int found = 0 ,
      i = 0 ;
      double lo = 0 ;
        
    for(i = 0 ; i < Bars ; i++){
        
           lo = iCustom(NULL,0,"ZigZag",0,i);
           if(lo !=0 && lo == Low[i]) found++ ;     
           if(found == shift ) 
              {
           buttom = i ;         
           return(lo) ;  
           }
             }
       return(lo) ;                
     }

 

    the parameters calling by reference  for returning values bars indices

     second  function ObjectCreate  to draw trend line 

   

 void SetArms(string name,datetime t1, double pr1,datetime t2, double pr2)
    {
     if(ObjectFind(name) != 0)
        {
         ObjectCreate(name, OBJ_TREND, 0, t1,pr1,t2,pr2);
         ObjectSet(name, OBJPROP_COLOR, AreaColor);
         ObjectSet(name, OBJPROP_RAY, 0);
       } 
       else
        {
         if(ObjectGet(name,OBJPROP_TIME1)!=t1 || ObjectGet(name,OBJPROP_PRICE1)!=pr1 || ObjectGet(name,OBJPROP_TIME2)!=t2 || ObjectGet(name,OBJPROP_PRICE2)!=pr2)
         {ObjectDelete(name);}
        } 
   } 

 

     and some code in the start function like this it same working at the moment

 

 

for(int i = 4 ; i > 0 ;i-=2){  
         
         int  a,b,c,d ;
         double A, B , C , D  ;
         
          A = GetTops(i,ShiftTopA) ;
               a = ShiftTopA ;
          B = GetButtoms(i,ShiftButtomB) ;
               b = ShiftButtomB ; 
          C = GetTops(i-1,ShiftTopC) ;    
               c = ShiftTopC ;
          D = GetButtoms(i-1,ShiftButtomD) ;
               d = ShiftButtomD ;

               if(A > C  ){
              
        SetArms("High_High"+IntegerToString(i),Time[a],A,Time[c],C) ;
        SetArms("High_Low"+IntegerToString(i),Time[c],C,Time[b],B) ;
        }  
               if(A < C  ){
               
        SetArms("Low_Low"+IntegerToString(i),Time[b],B,Time[d],D) ;
        SetArms("High_Low_"+IntegerToString(i),Time[c],C,Time[b],B) ;  
           }          
      }   

 

    this is what I have at the moment and what I want on the image below Last

    if someone can help me

 

     

 

   

avatar
17
jeef_1985 2016.05.14 13:23 #
 
up ....
avatar
1200
FMIC 2016.05.14 13:50 #
 

The most probable reason why nobody has posted yet, is maybe because we don't understand your request and logic (well, at least I don't - maybe someone else does).

In your graph, your point "D" is in the future, yet your code calculates all points A to D from a history in the past, and in so doing draw your lines in the past and not in the future as you have referenced.

Also, why delete a Chart Object only to recreate it again? Just move it instead with "ObjectMove()". I am referring the the following line of code:

if(ObjectGet(name,OBJPROP_TIME1)!=t1 || ObjectGet(name,OBJPROP_PRICE1)!=pr1 || ObjectGet(name,OBJPROP_TIME2)!=t2 || ObjectGet(name,OBJPROP_PRICE2)!=pr2)
         {ObjectDelete(name);}
avatar
69
Tecuciztecatl 2016.05.14 19:57 #
 

 coordinates of the points calculation (this is example, code can be optimized)

int         i;
double      APointPrice,BPointPrice,CPointPrice,DPointPrice,breaking;
datetime    APointTime,BPointTime,CPointTime,DPointTime;

// start from zero bar
i=0;

// skip the first point
breaking=0;
   while (breaking==0)
      {
      breaking=iCustom(NULL,0,"ZigZag",12,5,3,0,i);
      i++;
      }

// point C
breaking=0; 
   while (breaking==0)
      {
      breaking=iCustom(NULL,0,"ZigZag",12,5,3,0,i);
      i++;
      }
   CPointTime=Time[i-1];
   CPointPrice=breaking;
   Print("TimeC=",TimeToStr(CPointTime),"   priceC=",CPointPrice);

// point B
breaking=0; 
   while (breaking==0)
      {
      breaking=iCustom(NULL,0,"ZigZag",12,5,3,0,i);
      i++;
      }
   BPointTime=Time[i-1];
   BPointPrice=breaking;
   Print("TimeB=",TimeToStr(BPointTime),"   priceB=",BPointPrice);

// point A
breaking=0;
   while (breaking==0)
      {
      breaking=iCustom(NULL,0,"ZigZag",12,5,3,0,i);
      i++;
      }
   APointTime=Time[i-1];
   APointPrice=breaking;
   Print("TimeA=",TimeToStr(APointTime),"   priceA=",APointPrice);

// point D
DPointTime=(CPointTime-APointTime)+CPointTime;

// Here you need to add the desired formula to calculate the projection
if (APointPrice>CPointPrice) DPointPrice=CPointPrice-(APointPrice-CPointPrice);
else DPointPrice=CPointPrice+(CPointPrice-APointPrice);
   Print("TimeD=",TimeToStr(DPointTime),"   priceD=",DPointPrice);

 

avatar
17
jeef_1985 2016.05.16 00:21 #
 
thank you I'll test the code ...
Back to topics list  

To add comments, please log in or register