ObjectGetTimeByValue Triangle Bug ?

 

Hello,

I try to get Time for Object Triangle, but it seem2 any bug.

I use ObjectGetTimeByValue to get time value.

It works for Rectangle and Trend Line, but NOR for Triangle.

Any something wrong ?

Or any another way to get the time of the Triangle ?

Regads


below my code.

      string objname4="TRIANGLE";
      double v4 = ObjectGetDouble(0,objname4,OBJPROP_PRICE1,0);
      datetime T4 = ObjectGetTimeByValue(0,objname4,v4,0);
      
      string objname5="TRENDLINE";
      double v5 = ObjectGetDouble(0,objname5,OBJPROP_PRICE1,0);
      datetime T5 = ObjectGetTimeByValue(0,objname5,v5,0);
      
      string objname6="RECTANGLE";
      double v6 = ObjectGetDouble(0,objname6,OBJPROP_PRICE1,0);
      datetime T6 = ObjectGetTimeByValue(0,objname6,v6,0);


but the result like image below

ss

 

Triangle has 3 points.

//+------------------------------------------------------------------+ 
//| Create triangle by the given coordinates                         | 
//+------------------------------------------------------------------+ 
bool TriangleCreate(const long            chart_ID=0,        // chart's ID 
                    const string          name="Triangle",   // triangle name 
                    const int             sub_window=0,      // subwindow index  
                    datetime              time1=0,           // first point time 
                    double                price1=0,          // first point price 
                    datetime              time2=0,           // second point time 
                    double                price2=0,          // second point price 
                    datetime              time3=0,           // third point time 
                    double                price3=0,          // third point price 
                    const color           clr=clrRed,        // triangle color 
                    const ENUM_LINE_STYLE style=STYLE_SOLID, // style of triangle lines 
                    const int             width=1,           // width of triangle lines 
                    const bool            fill=false,        // filling triangle with color 
                    const bool            back=false,        // in the background 
                    const bool            selection=true,    // highlight to move 
                    const bool            hidden=true,       // hidden in the object list 
                    const long            z_order=0)         // priority for mouse click 
  { 
//--- set anchor points' coordinates if they are not set 
   ChangeTriangleEmptyPoints(time1,price1,time2,price2,time3,price3); 
//--- reset the error value 
   ResetLastError(); 
//--- create triangle by the given coordinates 
   if(!ObjectCreate(chart_ID,name,OBJ_TRIANGLE,sub_window,time1,price1,time2,price2,time3,price3)) 
     { 
      Print(__FUNCTION__, 
            ": failed to create a triangle! Error code = ",GetLastError()); 
      return(false); 
     } 
//--- set triangle color 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
//--- set style of triangle lines 
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
//--- set width of triangle lines 
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 
//--- enable (true) or disable (false) the mode of filling the triangle 
   ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill); 
//--- display in the foreground (false) or background (true) 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
//--- enable (true) or disable (false) the mode of highlighting the triangle for moving 
//--- when creating a graphical object using ObjectCreate function, the object cannot be 
//--- highlighted and moved by default. Inside this method, selection parameter 
//--- is true by default making it possible to highlight and move the object 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
//--- hide (true) or display (false) graphical object name in the object list 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
//--- set the priority for receiving the event of a mouse click in the chart 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
//--- successful execution 
   return(true); 
  } 
//+------------------------------------------------------------------+ 
//| Move the triangle anchor point                                   | 
//+------------------------------------------------------------------+ 
bool TrianglePointChange(const long   chart_ID=0,      // chart's ID 
                         const string name="Triangle", // triangle name 
                         const int    point_index=0,   // anchor point index 
                         datetime     time=0,          // anchor point time coordinate 
                         double       price=0)         // anchor point price coordinate 
  { 
//--- if point position is not set, move it to the current bar having Bid price 
   if(!time) 
      time=TimeCurrent(); 
   if(!price) 
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID); 
//--- reset the error value 
   ResetLastError(); 
//--- move the anchor point 
   if(!ObjectMove(chart_ID,name,point_index,time,price)) 
     { 
      Print(__FUNCTION__, 
            ": failed to move the anchor point! Error code = ",GetLastError()); 
      return(false); 
     } 
//--- successful execution 
   return(true); 
  } 
//+------------------------------------------------------------------+ 
//| Delete the triangle                                              | 
//+------------------------------------------------------------------+ 
bool TriangleDelete(const long   chart_ID=0,      // chart's ID 
                    const string name="Triangle") // triangle name 
  { 
//--- reset the error value 
   ResetLastError(); 
//--- delete the triangle 
   if(!ObjectDelete(chart_ID,name)) 
     { 
      Print(__FUNCTION__, 
            ": failed to delete the ellipse! Error code = ",GetLastError()); 
      return(false); 
     } 
//--- successful execution 
   return(true); 
  } 
//+------------------------------------------------------------------+ 
//| Check the values of triangle's anchor points and set default     | 
//| values for empty ones                                            | 
//+------------------------------------------------------------------+ 
void ChangeTriangleEmptyPoints(datetime &time1,double &price1, 
                               datetime &time2,double &price2, 
                               datetime &time3,double &price3) 
  { 
//--- if the first point's time is not set, it will be on the current bar 
   if(!time1) 
      time1=TimeCurrent(); 
//--- if the first point's price is not set, it will have Bid value 
   if(!price1) 
      price1=SymbolInfoDouble(Symbol(),SYMBOL_BID); 
//--- if the second point's time is not set, it is located 9 bars left from the second one 
   if(!time2) 
     { 
      //--- array for receiving the open time of the last 10 bars 
      datetime temp[10]; 
      CopyTime(Symbol(),Period(),time1,10,temp); 
      //--- set the second point 9 bars left from the first one 
      time2=temp[0]; 
     } 
//--- if the second point's price is not set, move it 300 points lower than the first one 
   if(!price2) 
      price2=price1-300*SymbolInfoDouble(Symbol(),SYMBOL_POINT); 
//--- if the third point's time is not set, it coincides with the second point's date 
   if(!time3) 
      time3=time2; 
//--- if the third point's price is not set, it is equal to the first point's one 
   if(!price3) 
      price3=price1; 
  } 
//+------------------------------------------------------------------+ 
 
Marco vd Heijden:

Triangle has 3 points.

hello..,

This is not about create Triangle .

but, how to get TIME value of Triangle on chart use ObjectGetTimeByValue

ObjectGetTimeByValue
 

Oh i'm sorry my bad i wasn't paying attention.

An object can have several values in one price coordinate, therefore it is necessary to specify the line number.

This function applies only to the following objects:

  • Trendline (OBJ_TREND)
  • Trendline by angle (OBJ_TRENDBYANGLE)
  • Gann line (OBJ_GANNLINE)
  • Equidistant channel (OBJ_CHANNEL) - 2 lines
  • Linear regression channel (OBJ_REGRESSION) - 3 lines
  • Standard deviation channel (OBJ_STDDEVCHANNEL) - 3 lines
  • Arrowed line (OBJ_ARROWED_LINE)
 
Marco vd Heijden:

Oh i'm sorry my bad i wasn't paying attention.

An object can have several values in one price coordinate, therefore it is necessary to specify the line number.

This function applies only to the following objects:

  • Trendline (OBJ_TREND)
  • Trendline by angle (OBJ_TRENDBYANGLE)
  • Gann line (OBJ_GANNLINE)
  • Equidistant channel (OBJ_CHANNEL) - 2 lines
  • Linear regression channel (OBJ_REGRESSION) - 3 lines
  • Standard deviation channel (OBJ_STDDEVCHANNEL) - 3 lines
  • Arrowed line (OBJ_ARROWED_LINE)

thanks,

I had tried and same result.

in the Points above, there is no "Rectangle"

But I use the function to get TIME Value of Rectangle and correct result.

pls see my screenshot above.

 

It means you can not use that function on a rectangle.

But i think you can roll your own by using trendlines and that should work.

 
Marco vd Heijden:

It means you can not use that function on a rectangle.

But i think you can roll your own by using trendlines and that should work.

I use the function for Rectangle, and got correct value

see my image at the beginning post

Reason: