# Pixel X Y of High at BeginValue(BarIndex())

Hello,

I need to calculate distance between High at BeginValue(BarIndex()) and Low at EndValue(BarIndex()).
While I was trying to figure out how to approach this objective - I thought of finding pixel distance between the two points.

However, I could not figure out how to find “Pixel X Y of High at BeginValue(BarIndex())” or “Pixel X Y of Low at EndValue(BarIndex())”.

Regards

Sanjiv Bansal

As I experiment further on the topic, I tried Example 4 at" https://www.amibroker.com/guide/h_lowlevelgfx.html " as a starting point to understand the things.

However, I am getting Warning 505. Divison by zero in the following line of the example code:

``````y = 5 + ( C[ i + fvb ] - Miny ) * ( pxheight - 10 )/ ( Maxy - Miny );
``````

Environment: Amibroker 6.21 Pro 32Bit (Win 10 Pro 64Bit)

Regards

Sanjiv Bansal

PS: I could not edit my original post, hence had to send this update as a reply to by own post. (Will learn more about the Forum now.)

Hello,

I seem to have got lucky - while reading the help file for STATUS function, readymade samples for conversion to PixelX and PixelY were found. The following solved what I was looking for:

``````Up_Dn  = iif( EndValue( C ) > BeginValue( C ), 1, -1 );
HL_Beg = BeginValue( IIf( Up_Dn == 1, L, H ) );
HL_End = EndValue( IIf( Up_Dn == 1, H, L ) );

_SECTION_BEGIN("GfxOverlaySampleNew");

function GfxConvertBarToPixelX( bar )
{
lvb = Status("lastvisiblebar");
fvb = Status("firstvisiblebar");
pxchartleft = Status("pxchartleft");
pxchartwidth = Status("pxchartwidth");

return pxchartleft + (bar  * pxchartwidth / ( Lvb - fvb + 1 ));
}

function GfxConvertValueToPixelY( Value )
{
local Miny, Maxy, pxchartbottom, pxchartheight;

Miny = Status("axisminy");
Maxy = Status("axismaxy");

pxchartbottom = Status("pxchartbottom");
pxchartheight = Status("pxchartheight");

return pxchartbottom - floor( 0.5 + ( Value - Miny ) * pxchartheight/ ( Maxy - Miny ) );
}

Plot( C, "Close", colorLime, styleBar, Null, Null, 0, 2, 1 );

bi = BarIndex();
EndVal_BI = endValue( bi ) - FirstVisibleValue(bi);
BegVal_BI = beginValue( bi ) - FirstVisibleValue(bi);

X_Length =  abs(GfxConvertBarToPixelX(EndVal_BI) - GfxConvertBarToPixelX(BegVal_BI)) ;
Y_Length =  abs(GfxConvertValueToPixelY(HL_Beg) - GfxConvertValueToPixelY(HL_End)) ;

mThirdSide = sqrt( (X_Length^2)+(Y_Length^2));

Title = "ThirdSide: "+ NumToStr( mThirdSide , 5.2, False );
``````

Thank you very much for the nice software.

Regards

Sanjiv Bansal

1 Like