Axhwan
While MetaStock doesn’t really lend itself to plotting Volume by Price indicators on the left side of a chart, it can be done on the right side with reasonable results. I have (but don’t use) 10 or more variations of Volume by Price. Here’s another link, this one to an illustration from the August 2008 issue of the MetaStock Tips & Tools newsletter.
www.metastocktips.co.nz/volume_by_price.png.
It demonstrates the MetaStock formula below which plots a 10-bar histogram rather than the 25-bar one shown at trader.online.pl. Copies of my article can be obtained by writing to rlarsen@quik.co.nz. A small fee applies to MSTT back issues but this formula is free.
Roy
{Volume by Price - 10}
{Roy Larsen, 2003-2008}
D:=Input("Periods, 0=Full Chart",0,2000,100);
D:=LastValue(If(D=0,LastValue(Cum(1)-1),D));
N:=Input("% Scaling in Box, 1=None",1,100,50);
F:=LastValue(Cum(1)); G:=F-D; {abbreviations}
A:=G<Cum(1); {window period}
B:=LastValue(Cum(If(A,V,0))); {window volume}
Q:=LastValue(HighestSince(1,A=0,C));{window HHV}
R:=LastValue(LowestSince(1,A=0,C)); {window LLV}
I:=(Q-R)/10; {range increment}
{accumulated volume for each price range}
X0:=LastValue(Cum(If(C<(R+I) AND A,V,0))/B);
X1:=LastValue(Cum(If(C>=(R+I) AND C<(R+I*2) AND A,V,0))/B);
X2:=LastValue(Cum(If(C>=(R+I*2) AND C<(R+I*3) AND A,V,0))/B);
X3:=LastValue(Cum(If(C>=(R+I*3) AND C<(R+I*4) AND A,V,0))/B);
X4:=LastValue(Cum(If(C>=(R+I*4) AND C<(R+I*5) AND A,V,0))/B);
X5:=LastValue(Cum(If(C>=(R+I*5) AND C<(R+I*6) AND A,V,0))/B);
X6:=LastValue(Cum(If(C>=(R+I*6) AND C<(R+I*7) AND A,V,0))/B);
X7:=LastValue(Cum(If(C>=(R+I*7) AND C<(R+I*8) AND A,V,0))/B);
X8:=LastValue(Cum(If(C>=(R+I*8) AND C<(R+I*9) AND A,V,0))/B);
X9:=LastValue(Cum(If(C>=(R+I*9) AND A,V,0))/B);
M:=Max(Max(X1,X2),Max(X3,X4));
M:=Max(Max(M,X5),Max(X6,X7));
M:=Max(Max(M,X8),Max(X9,X0));
M:=If(N=1,N,M*100)/N; {set window % usage}
{top of window, HHV for period}
ValueWhen(1,Cum(1)=G,Q);
{proportion of volume for each price range}
ValueWhen(1,F-X9*D/M<=Cum(1),R+I*9.5);
ValueWhen(1,F-X8*D/M<=Cum(1),R+I*8.5);
ValueWhen(1,F-X7*D/M<=Cum(1),R+I*7.5);
ValueWhen(1,F-X6*D/M<=Cum(1),R+I*6.5);
ValueWhen(1,F-X5*D/M<=Cum(1),R+I*5.5);
ValueWhen(1,F-X4*D/M<=Cum(1),R+I*4.5);
ValueWhen(1,F-X3*D/M<=Cum(1),R+I*3.5);
ValueWhen(1,F-X2*D/M<=Cum(1),R+I*2.5);
ValueWhen(1,F-X1*D/M<=Cum(1),R+I*1.5);
ValueWhen(1,F-X0*D/M<=Cum(1),R+I*0.5);
{left side and base of window, LLV for period}
ValueWhen(1,Cum(1)>=G,If(A,R,Q));