# Drawing a triangle (OBJ_TRIANGLE) based on X;Y pixel coordinates

To add comments, please log in or register
33

Hi,

I'm desperately trying to draw a triangle based on x;y coordinates, not on price/time values.

The goal is to create the triangle on the indicator's window, not on the chart window.

I tried the bmp lib on codebase, but the refresh rate is too slow to be usable.

Thanks a lot!

1208

Try this code

```//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool Triangle(string obj_name,int x0,int y0,int x1,int y1,int x2,int y2,color c)
{
uint   data[];
string rcname="::"+obj_name;
int    t,w,h;
//--- sort by Y
if(y0>y1) { t=y1; y1=y0; y0=t; t=x1; x1=x0; x0=t; }
if(y0>y2) { t=y0; y0=y2; y2=t; t=x0; x0=x2; x2=t; }
if(y1>y2) { t=y1; y1=y2; y2=t; t=x1; x1=x2; x2=t; }
//--- min/max by X
int minx=MathMin(x0,MathMin(x1,x2));
int maxx=MathMax(x0,MathMax(x1,x2));
//--- invisible
if(y2<0 || maxx<0)
{
if(ArrayResize(data,1)<0) return(false);
data[0]=0;
w      =1;
h      =1;
}
else
{
w=maxx+1;
h=y2+1;
//---
if(ArrayResize(data,w*h)<0) return(false);
ArrayInitialize(data,0);
//---
double k1,k2;
//---
if((t=y0-y1)!=0) k1=(x0-x1)/(double)t;
if((t=y0-y2)!=0) k2=(x0-x2)/(double)t;
double xd1=x0;
double xd2=x0;
//---
for(int i=y0,xx1,xx2;i<=y2;i++)
{
if(i==y1)
{
if((t=y1-y2)!=0) k1=(x1-x2)/(double)t;
xd1=x1;
}
//---
xx1=(int)xd1; xd1+=k1;
xx2=(int)xd2; xd2+=k2;
//---
if(i<0) continue;
//---
if(xx1>xx2) { t=xx1; xx1=xx2; xx2=t; }
//---
if(xx2<0 || xx1>=w) continue;
//---
if(xx1<0)  xx1=0;
if(xx2>=w) xx2=w-1;
for(int j=xx1;j<=xx2;j++)
data[i*w+j]=0xFF000000|((c&0xFF)<<16)|(c&0xFF00)|((c>>16)&0xFF);
}
}
//---
if(!ResourceCreate(rcname,data,w,h,0,0,0,COLOR_FORMAT_ARGB_RAW)) return(false);
ObjectSetString(0,obj_name,OBJPROP_BMPFILE,rcname);
return(true);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
{
ObjectCreate(0,"tri",OBJ_BITMAP_LABEL,0,0,0);
ObjectSetInteger(0,"tri",OBJPROP_XDISTANCE,100);
ObjectSetInteger(0,"tri",OBJPROP_YDISTANCE,100);
ObjectSetInteger(0,"tri",OBJPROP_SELECTABLE,1);
ObjectSetInteger(0,"tri",OBJPROP_SELECTED,1);
//---
while(!IsStopped())
{
Triangle("tri",rand()%100,rand()%100,rand()%200,rand()%200,rand()%200,rand()%200,clrRed);
ChartRedraw();
Sleep(100);
}
//---
ObjectDelete(0,"tri");
}```
33

mql5:

Try this code

Awesome! Thanks!
23

Hello,

this code is very helpfull. What's about objects placed on price/time basement.

I try to code a zigzag with a cumulate volume for each swing. But all my volumes are placed in the upper left corner of the current xy-coordinates.

Do you have any ideas, to change the xy-base to price/time to place my text object over the specified bars.

https://www.mql5.com/en/forum/6388#comment_170999

Greetings

Mike

1208

You should use OBJ_TEXT
2271

Put all Object function inside the while loop, so the triangle will be created again when (accidentally) deleted.

Admin
11993

2271

Whoa !!! Thank you very much - I'm so exited here :D. My apology I just read your post and I didn't check that function. I update to 655 and read Service Desk and I thought those function are for next build above 655. So I see there's no documentation yet, but thats OK :D

[Edit : Oops, Click here ChartTimePriceToXY  and ChartXYToTimePrice .]

This is good, now we know exactly where - at least for example - mouse's cursor location in bar time and price coordinate, so we don't click pixels anymore.

Excellently awesome !!!. Thank you very much !!!

Admin
11993

onewithzachy:

Whoa !!! Thank you very much - I'm so exited here :D. My apology I just read your post and I didn't check that function. I update to 655 and read Service Desk and I thought those function are for next build above 655. So I see there's no documentation yet, but thats OK :D

Documentation is always available online and you can download it manually - https://www.mql5.com/en/docs/chart_operations

Documentation on MQL5: Chart Operations
• www.mql5.com
Chart Operations - Documentation on MQL5
2271

Rosh:

Documentation is always available online and you can download it manually - https://www.mql5.com/en/docs/chart_operations

Sorry, I did look for them online before replying, but I'm too exited I didn't see they're already there, and my help files does not get updated automatically like before.
To add comments, please log in or register