> // NOTE: the code is SLOOOOWWWW...can someone help speed it up? How can a layperson measure the speed of execution of code ... say I want to compare this code to another version to see if I have improved the speed....perhaps there is some help somewhere in Howard's books or the help manual and I haven't read them carefully enough .. if anyone could give me a reference or a quick explanation that would be good.
--- In [email protected], "shakerlr" <ljr...@...> wrote: > > I just created the following code to calculate the VWAP + std deviation > bands, but have found that it is extrememly slow. I posted the original code > to the amibroker study site and was wondering if anyone has any suggestions > to speed it up for display on 1 minute charts. > > Also, I noticed that if I DO NOT USE: > SetBarsRequired( 1000, 0 ); > > The bands show up incorrect...(sometimes expanding/shrinkking as I scroll on > the 1 minute chart) > > Note that I have about 100000 bars in my stock/ticker being studied...so that > may be the reason it is slow... > > ---- > /// 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 > > > SetBarsRequired( 1000, 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); >
