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
Sergey Golubev, 2018.10.12 13:01
New good indicators was published on CodeBase -
----------------
Harmonic Pattern Finder V3 - indicator for MetaTrader 5
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); }
update:
drawing, deleting, getValueByShift and setStyle is now supported:
Thank you so much, zzuegg! Appriciate it! :-)

- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
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