Stock Portfolio Organizer

The ultimate porfolio management solution.

Shares, Margin, CFD's, Futures and Forex
EOD and Realtime
Dividends and Trust Distributions
And Much More ....
For Portfolio Manager Click Here

WiseTrader Toolbox

#1 Selling Amibroker Plugin featuring:

Advanced Adaptive Indicators
Advanced Pattern Exploration
Neural Networks
And Much More ....
Find Out More Here

VWAP with standard deviation bands for Amibroker (AFL)
kaiji
about 14 years ago
Amibroker (AFL)

Rating:
5 / 5 (Votes 2)
Tags:
amibroker

Here is my version of VWAP with standard deviation bands. The code is very slow because there is one LARGE loop and then a smaller loop in it to calculate the variance+stddev.

Note you need to have the setbarsrequired(10000,0) line or else scrolling through 1 min bars that cross a few days will cause the bands to change width when they should not – due to QuickAFL quirks..

By larry jag – ljr500 [at] hotmail.com

Similar Indicators / Formulas

Kavach Of Karna v2
Submitted by hbkwarez almost 10 years ago
Advanced Elliott Waves
Submitted by MarcosEn over 12 years ago
3_6Day GuaiLiLv
Submitted by motorfly over 12 years ago
Williams Alligator System
Submitted by durgesh1712 over 12 years ago
*Level Breakout system*
Submitted by Tinych over 12 years ago

Indicator / Formula

Copy & Paste Friendly
/// VWAP code that also plots standard deviations...if you want a 3rd...it should be fairly simple to add 
//
// NOTE: the code is SLOOOOWWWW...can someone help speed it up?  
// I tried my best, but can't really do much with the two for-loops...
//
// LarryJR - ljr500@hotmail.com

// need this line or else when u scroll 1 min chart over a few days, the vwap bars may change
// size (which is wrong) because of the QuickAFL processing code 
// so we ensure we have enough bars loaded for at least a couple of days... set the number appropriately.
SetBarsRequired( 10000, 0 );

// this stores true/false based on a new day...
newday=Day() != Ref(Day(), -1);

SumPriceVolume=0;
totVolume=0;
Vwap2=0;
stddev=0;
newdayindex=0;
Variance =0;

// we must use a loop here because we need to save the vwap for each bar to calc the variance later
for( i= 0; i < BarCount; i++ ) 
{ 
	// only want to reset our values at the start of a new day
	if (newday[i]==True)
	{
		SumPriceVolume=0;
		totVolume=0;
		newdayindex=i;	// this is the index at the start of a new day
		Variance=0;
		//Vwap2=0;
	}
	AvgPrice=(O[i] + H[i] + L[i] + C[i])/4;

	// Sum of Volume*price for each bar
	sumPriceVolume += AvgPrice * (Volume[i]);
		
	// running total of volume each bar
	totVolume += (Volume[i]);		

	if (totVolume[i] >0)
	{	
		Vwap2[i]=Sumpricevolume / totVolume ;
		Vwap2temp=Vwap2[i];
	}

	// now the hard part...calculate the variance...
	// a separate calc from the start of each day - note it requires the vwap from above
	// also note, we calculate starting at the first bar in the new day to today to the curent bar
	Variance=0;
	for (j=newdayindex; j < i; j++)
	{
		AvgPrice=(O[j] + H[j] + L[j] + C[j])/4;
		Variance += (Volume[j]/totVolume) * (Avgprice-Vwap2temp)*(Avgprice-Vwap2temp);
	}
	stddev_1_pos[i]=Vwap2temp + sqrt(Variance);
	stddev_1_neg[i]=Vwap2temp - sqrt(Variance);

	stddev_2_pos[i]=Vwap2temp + 2*sqrt(Variance);
	stddev_2_neg[i]=Vwap2temp - 2*sqrt(Variance);
} 
Plot (Vwap2,"VWAP2",colorDarkGrey, styleLine);
Plot (stddev_1_pos,"VWAP_std+1",colorGrey50, styleDashed);
Plot (stddev_1_neg,"VWAP_std-1",colorGrey50, styleDashed);
Plot (stddev_2_pos,"VWAP_std+2",colorGrey40, styleDashed);
Plot (stddev_2_neg,"VWAP_std-2",colorGrey40, styleDashed);

1 comments

1. MagicTH

Code is now 10+ times faster per request with other enhancements. You can find my updated version here:

http://www.wisestocktrader.com/indicators/2791-vwap-bands-v2

Leave Comment

Please login here to leave a comment.

Back