ObjectGetTimeByValue Triangle Bug ?

To add comments, please log in or register
Siti Latifah
19456
Siti Latifah  

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

Marco vd Heijden
Moderator
12478
Marco vd Heijden  

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; 
  } 
//+------------------------------------------------------------------+ 
Siti Latifah
19456
Siti Latifah  
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
Marco vd Heijden
Moderator
12478
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)
Siti Latifah
19456
Siti Latifah  
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.

Marco vd Heijden
Moderator
12478
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.

Siti Latifah
19456
Siti Latifah  
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

To add comments, please log in or register