Pitchfork and ObjectGetValueByShift

 

Hi fellows,

any way to get the values from the pitchfork or do i have to calculate the fork myself?

Using normal ObjectGetValueByShift() returns 0, getLastError says 4205, but the fork is drawn correctly, so i assume coordinates are ok.

I also made sure that only values after the beginning of the fork are tested..


//z

 

if anybody has the same issue and uses the search *laugh* this small, pretty ugly and very slow code works:

supports drawing a pitchfork and a ObjectGetValuesByShift replacement:

#define MODE_FORK_MAIN 1
#define MODE_FORK_P2 2
#define MODE_FORK_P3 3

void DrawFork(string name,datetime t1, double p1, datetime t2,double p2, datetime t3,double p3){
     ObjectDelete(name);
     ObjectCreate(name,OBJ_TREND,0,t1,p1,Time[(iBarShift(Symbol(),Period(),t2,false)+iBarShift(Symbol(),Period(),t3,false))/2],(p2+p3)/2);//,swings.value[0]);
     ObjectDelete(name+"P2");
     ObjectCreate(name+"P2",OBJ_TREND,0,t2,p2,Time[iBarShift(Symbol(),Period(),t2,false)-1],p2+(ObjectGetValueByShift(name,iBarShift(Symbol(),Period(),t2,false)-1)-ObjectGetValueByShift(name,iBarShift(Symbol(),Period(),t2,false))));    
     ObjectDelete(name+"P3");
     ObjectCreate(name+"P3",OBJ_TREND,0,t3,p3,Time[iBarShift(Symbol(),Period(),t3,false)-1],p3+(ObjectGetValueByShift(name,iBarShift(Symbol(),Period(),t3,false)-1)-ObjectGetValueByShift(name,iBarShift(Symbol(),Period(),t3,false))));    
}
double getForkValueByShift(string name,int mode,int pos){
   switch(mode){
      case MODE_FORK_MAIN: return(ObjectGetValueByShift(name,pos));
      case MODE_FORK_P2  : return(ObjectGetValueByShift(name+"P2",pos));
      case MODE_FORK_P3  : return(ObjectGetValueByShift(name+"P3",pos));
   }
}
 

update:

drawing, deleting, getValueByShift and setStyle is now supported:

#define MODE_FORK_MAIN 1
#define MODE_FORK_P2 2
#define MODE_FORK_P3 3

void Fork.draw(string name,datetime t1, double p1, datetime t2,double p2, datetime t3,double p3){
     ObjectDelete(name);
     ObjectCreate(name,OBJ_TREND,0,t1,p1,Time[(iBarShift(Symbol(),Period(),t2,false)+iBarShift(Symbol(),Period(),t3,false))/2],(p2+p3)/2);//,swings.value[0]);
     ObjectDelete(name+"P2");
     ObjectCreate(name+"P2",OBJ_TREND,0,t2,p2,Time[iBarShift(Symbol(),Period(),t2,false)-1],p2+(ObjectGetValueByShift(name,iBarShift(Symbol(),Period(),t2,false)-1)-ObjectGetValueByShift(name,iBarShift(Symbol(),Period(),t2,false))));    
     ObjectDelete(name+"P3");
     ObjectCreate(name+"P3",OBJ_TREND,0,t3,p3,Time[iBarShift(Symbol(),Period(),t3,false)-1],p3+(ObjectGetValueByShift(name,iBarShift(Symbol(),Period(),t3,false)-1)-ObjectGetValueByShift(name,iBarShift(Symbol(),Period(),t3,false))));    
}
double Fork.getValueByShift(string name,int mode,int pos){
   switch(mode){
      case MODE_FORK_MAIN: return(ObjectGetValueByShift(name,pos));
      case MODE_FORK_P2  : return(ObjectGetValueByShift(name+"P2",pos));
      case MODE_FORK_P3  : return(ObjectGetValueByShift(name+"P3",pos));
   }
}
void Fork.delete(string name){
     ObjectDelete(name);
     ObjectDelete(name+"P2");     
     ObjectDelete(name+"P3");
}
void Fork.setStyle(string name, int width, int style, color c){
   ObjectSet(name,OBJPROP_WIDTH,width);
   ObjectSet(name,OBJPROP_STYLE,style);
   ObjectSet(name,OBJPROP_COLOR,c);
   ObjectSet(name+"P2",OBJPROP_WIDTH,width);
   ObjectSet(name+"P2",OBJPROP_STYLE,style);
   ObjectSet(name+"P2",OBJPROP_COLOR,c);
   ObjectSet(name+"P3",OBJPROP_WIDTH,width);
   ObjectSet(name+"P3",OBJPROP_STYLE,style);
   ObjectSet(name+"P3",OBJPROP_COLOR,c);   
}
 

I needed a similar thing myself, so I decided to bite the bullet and try and build a solid function that will calculate the price at any point and any deviation to the median without the need to draw the forks/trend lines if I didn't need to (ie for use in an EA).

I just posted the function here https://www.mql5.com/en/forum/140383

 

Forum on trading, automated trading systems and testing trading strategies

Harmonic Trading

Sergey Golubev, 2018.10.12 13:01

New good indicators was published on CodeBase - 

----------------

Harmonic Pattern Finder V3 - indicator for MetaTrader 5 

Harmonic Pattern Finder V3 - indicator for MetaTrader 5


 
zzuegg:

update:

drawing, deleting, getValueByShift and setStyle is now supported:

This is excellent! Thanks to the author!

#define MODE_FORK_MAIN 1
#define MODE_FORK_P2 2
#define MODE_FORK_P3 3

void Forkdraw(string name,datetime t1, double p1, datetime t2,double p2, datetime t3,double p3){
     ObjectDelete(name);
     ObjectCreate(name,OBJ_TREND,0,t1,p1,Time[(iBarShift(Symbol(),Period(),t2,false)+iBarShift(Symbol(),Period(),t3,false))/2],(p2+p3)/2);//,swings.value[0]);
     ObjectDelete(name+"P2");
     ObjectCreate(name+"P2",OBJ_TREND,0,t2,p2,Time[iBarShift(Symbol(),Period(),t2,false)-1],p2+(ObjectGetValueByShift(name,iBarShift(Symbol(),Period(),t2,false)-1)-ObjectGetValueByShift(name,iBarShift(Symbol(),Period(),t2,false))));    
     ObjectDelete(name+"P3");
     ObjectCreate(name+"P3",OBJ_TREND,0,t3,p3,Time[iBarShift(Symbol(),Period(),t3,false)-1],p3+(ObjectGetValueByShift(name,iBarShift(Symbol(),Period(),t3,false)-1)-ObjectGetValueByShift(name,iBarShift(Symbol(),Period(),t3,false))));
     
    
}
double ForkgetValueByShift(string name,int mode,int pos){
   switch(mode){
      case MODE_FORK_MAIN: return(ObjectGetValueByShift(name,pos));
      case MODE_FORK_P2  : return(ObjectGetValueByShift(name+"P2",pos));
      case MODE_FORK_P3  : return(ObjectGetValueByShift(name+"P3",pos));
   }
   return(0);
}
void Forkdelete(string name){
     ObjectDelete(name);
     ObjectDelete(name+"P2");     
     ObjectDelete(name+"P3");
}
void ForksetStyle(string name, int width=1, int style=1, color c=clrNONE){
   ObjectSet(name,OBJPROP_WIDTH,width);
   ObjectSet(name,OBJPROP_STYLE,style);
   ObjectSet(name,OBJPROP_COLOR,c);
   ObjectSet(name+"P2",OBJPROP_WIDTH,width);
   ObjectSet(name+"P2",OBJPROP_STYLE,style);
   ObjectSet(name+"P2",OBJPROP_COLOR,c);
   ObjectSet(name+"P3",OBJPROP_WIDTH,width);
   ObjectSet(name+"P3",OBJPROP_STYLE,style);
   ObjectSet(name+"P3",OBJPROP_COLOR,c);   
}
 
zzuegg:

update:

drawing, deleting, getValueByShift and setStyle is now supported:

Thank you so much, zzuegg! Appriciate it! :-)

Reason: