dear Joris, (1) First accept my sincere thanks for enlightening me.Lot of new things learnt. (2)if first bar is irrationally WRB than it should not be included. agreed. (3)To see the impact of WRB,deleted previous bars of a ticker. just to see the impact. enclosed that chart. http://img215.imageshack.us/img215/7628/atawt.jpg best regards
--- On Thu, 4/1/10, Joris Schuller <[email protected]> wrote: From: Joris Schuller <[email protected]> Subject: RE: [amibroker] regarding cum function To: [email protected] Date: Thursday, April 1, 2010, 12:31 PM I have added a few lines to make you understand better what the issues are in the code below. 1. WRB or NRB, NR7 or NR4 all have nothing to do with it, only C does. The impact of the first bar is removed at the (n+1) bar in case of a SMA of n. Even if there is a large difference in C between the first and the second bar, it simple doesn’t matter. It is immaterial at bar n+1. Furthermore, let’s assume that bar 1 has value 1 and the following bars are >100. Would you even want to include that bar for any decisionmaking? Of course not. 2. You should not plot sum(C,BarCount) , but sum(C,BarCount) /Barcount. However this will not display any lines. In the top left corner the value for the most right bar in the visible range is displayed (If it show {EMPTY} click on most right bar. To display a line you have to plot: //Plot(LastValue( AVGSum),"\nATA - LastValue("+BarCount+")",5,5); //This draws a line for the last value of AVGSUM. This will show a horizontal line 3. Not true: Visualize what a MA is. The impact of the first bar, included or not, is long gone (Move thru the data and look at the data results in the top left corner). In conclusion: Comparison of B, C, and D with E and F show that within a small number of bars the accuracy is more than adequate and the results for all practical purposes identical. In addition, use of C and D allows for a running determination of the ATA. With E only the ATA at the most right bar is determined and with F only the last value of the barcount is displayed. Moreover, often the ATA at the more recent time periods is so far removed from the actual data, that significant data compression occurs. It is often much better not to plot but instead display the data in a price plot as shown in A. This also facilitates comparison of the various data. Title = EncodeColor(4)+ _DEFAULT_NAME()+"; "+EncodeColor(1) + StrFormat("{{NAME}} - {{INTERVAL}} ; {{DATE}}; O=%g, H=%g, L=%g, C=%g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( 10*ROC( C, 1 ) ) ); Perfixed=Param("Period Fixed",20,1,7000,1); GetPerformanceCount er(True); {PerVariableBarInde x=(BarIndex());}//Bar Index variable elapsed=GetPerformanceCount er(); "Bar Index: Time in ms = " + elapsed; GetPerformanceCount er(True); {PerVariableCum= (Cum(1)-1);} //Cum variable elapsed=GetPerformanceCount er(); "Cum: Time in ms = " + elapsed; MAFixed=MA(C,Perfixed); MABarIndex=MA(C,PerVariableBarInde x); MACum=MA(C,PerVariableCum) ; AVGSum=Sum(C,BarCount)/(BarCount); //COMPARE THOSE FIVE PLOTS AND THE DATA RESULTS! Plot(C,"AVGSum("+WriteVal(BarCount,1.0)+") = "+WriteVal(AvgSum,2.4)+"; C",1,64); // A Plot(MAFixed,"\nMAFixed("+Perfixed+")",colorGreen,5);// B Plot(MABarIndex,"\nMABarIndex("+PerVariableBarInde x+")",colorRed,5);// C Plot(MACum,"\nMACum("+PerVariableCum+")",colorBlue,5);//D Plot(AVGSum,"\nAvgSumBarcount("+BarCount+")",colorViolet,5);//E //Plot(LastValue( AVGSum),"\nATA - LastValue("+BarCount+")",5,5); //F This draws a horizontal line for the last value of AVGSUM From: amibro...@yahoogrou ps.com [mailto:amibroker@ yahoogroups. com] On Behalf Of q q Sent: Wednesday, March 31, 2010 1:52 AM To: amibro...@yahoogrou ps.com Subject: RE: [amibroker] regarding cum function Thanks joris for your reply. (1)your AFL is perfect but when first bar is WRB then results shall vary a lot with the point (2),of my this mail. (2)Now coming to plot ATA(all time average average) in true spirit(from very first bar to last one),there is no option but to plot sum(C,BarCount) . This shall be a straight line, and the position of the selector line shall have no effect. (3)when a ticker falls or rises substantially on the listing day, we shall have much difference between your line and the line as mentioned in point no. 2. (due to neglected first bar). best regards --- On Wed, 3/31/10, Joris Schuller <jschul...@charter. net> wrote: From: Joris Schuller <jschul...@charter. net> Subject: RE: [amibroker] regarding cum function To: amibro...@yahoogrou ps.com Date: Wednesday, March 31, 2010, 6:08 AM With increased globalization we have also increased confusion and mis-communication. As a result, I am nowadays often not sure what people exactly are claiming and/or asking. That makes problem definition and -solution difficult. So I will try to address what I believe you are saying. I have added some code which should clarify this. To summarize: All price bars are displayed correctly. Bar 1 is not used in any computation. The indicators (MA, BarIndex, cum) are also correctly displayed, at least starting at bar 2 and use data from bar 2 on. 1. “Cum(close) gives the same value(that of last bar) on the first bar!” No, that’s not true at all! This is what happens: a. All bars and indicators are displayed correctly (with a caveat). All bars and indicators are displayed correctly when verifying with the data series in the Quote Editor. However, there are some peculiarities. b. First bar of data series. The first bar of the data series (bar 1) is correctly displayed (OHLC), as can be verified by looking at the first line in the Quote Editor. If you select (click on) a bar to the right (for example, bar 3) and then use the left arrow key to move back to bar 1, the correct OHLC values will appear in the Title. However, if you click on bar 1 it will display in the Title the data for the last bar in the current visible range. As the code below will show, the first bar is displayed correctly, but is not used in any computation. BarIndex, Cum, MA, and so on start at bar 2. So, although BarIndex is 0-based it starts effectively counting at 1 on bar 2. b. First bar (most left bar) of any visible range. This is more of the same: The bar itself is plotted correctly. Provided it is approached from the right by using the left arrow key it will show the correct data in the Title for OHLC, MA’s cum, bar index and so on. Clicking on the left most bar will again display in the Title the values for the most right bar in the visible range. The actual graphs (bars, Ma’s, indicators) remain correct and unchanged. c. “want to plot the All time average line(ATA) on the price chart.But due to cum function I get erratic line”. I presume you want to compute the avg. price including all the bars available at that moment. So at bar 4 the MA3 of Bars 2-4, at bar (N+1) the MaN of bars 2 to N+1 (bar 1 is not used). You can use either BarIndex or the cum function (see below). d. Use of cum or BarIndex. As the code shows you can use either one. Nowadays BarIndex is preferred because of apparent superior speed. I haven’t found that so far. I tested using Code Part2 below and found calculation times for BarIndex to be approximately 10-15% shorter than for Cum (Interpretation window) and 30% larger ( using Formula Editor/Tools/ Code Check & Profile) and approximately the same when including the array operator. Thus, you have an option whether to use barindex or cum. Since there is no performance penalty either way, I would use BarIndex not for speed, but for conformity reasons. Title = EncodeColor(4)+ _DEFAULT_NAME()+"; "+EncodeColor(1) + StrFormat("{{NAME}} - {{INTERVAL}} ; {{DATE}}; O=%g, H=%g, L=%g, C=%g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( 10*ROC( C, 1 ) ) ); Perfixed=Param("Period Fixed",20,1,60,1); GetPerformanceCount er(True); {PerVariableBarInde x=(BarIndex());}//Bar Index variable elapsed=GetPerformanceCount er(); "Bar Index: Time in ms = " + elapsed; GetPerformanceCount er(True); {PerVariableCum= (Cum(1)-1);} //Cum variable elapsed=GetPerformanceCount er(); "Cum: Time in ms = " + elapsed; MAFixed=MA(C,Perfixed); MABarIndex=MA(C,PerVariableBarInde x); MACum=MA(C,PerVariableCum) ; Plot(C,"C",1,64); Plot(MAFixed,"\nMAFixed("+Perfixed+")",colorGreen,5); Plot(MABarIndex,"\nMABarIndex("+PerVariableBarInde x+")",colorRed,5); Plot(MACum,"\nMACum("+PerVariableCum+")",colorBlue,5); /* //Code Part2. To test performance Cum vs BarIndex Title = EncodeColor( 4)+ _DEFAULT_NAME( )+"; "+EncodeColor( 1) + StrFormat("{{NAME}} - {{INTERVAL}} ; {{DATE}}; O=%g, H=%g, L=%g, C=%g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( 10*ROC( C, 1 ) ) ); Perfixed=Param("Period Fixed",20,1,60,1); GetPerformanceCount er(True); for(i=1; i<10001;i++) {PerVariableBarInde x=(BarIndex( ));}//Bar Index variable elapsed=GetPerforma nceCounter( ); "Bar Index: Time in ms = " + elapsed; GetPerformanceCount er(True); for(i=1; i<10001;i++) {PerVariableCum= (Cum(1)-1) ;} //Cum variable elapsed=GetPerforma nceCounter( ); "Cum: Time in ms = " + elapsed; MAFixed=MA(C, Perfixed) ; MABarIndex=MA( C,PerVariableBar Index); MACum=MA(C,PerVaria bleCum); Plot(C,"C",1,64); Plot(MAFixed,"\nMAFixed("+Perfixed+")",colorGreen, 5); Plot(MABarIndex,"\nMABarIndex("+PerVariableBarInde x+")",colorRed,5) ; Plot(MACum,"\nMACum("+PerVariableCum+")",colorBlue,5) ; From: amibro...@yahoogrou ps.com [mailto:amibroker@ yahoogroups. com] On Behalf Of war_maniac2002 Sent: Thursday, March 25, 2010 10:47 PM To: amibro...@yahoogrou ps.com Subject: [amibroker] regarding cum function respected members, Cum(close) gives the same value(that of last bar) on the first bar! rest fine with bars in between. Actually I want to plot the All time average line(ATA) on the price chart. But due to cum function I get erratic line. any solution? regards Send instant messages to your online friends http://uk.messenger .yahoo.com Send instant messages to your online friends http://uk.messenger.yahoo.com
