Thanks Mike. Really appreciate this work Best Regards Rick Osborn
________________________________ From: Mike <[email protected]> To: [email protected] Sent: Tue, December 29, 2009 2:05:49 AM Subject: [amibroker] Re: Seasonality Plot In the interest of completeness, here's an updated version that corrects a bug in the calculation of "initialValue" , discovered during a paralell thread: http://finance. groups.yahoo. com/group/ amibroker/ message/145407 and adds a little better documentation in the form of the chart title. baseColor = colorDarkRed; boundaryColor = colorLightGrey; years = Param( "Years", 3, 1, 15, 1); newYear = Year() != Ref( Year(), -1); avgROC = 0; // Create dynamic variables for each year (excluding current) for( y = 1; y <= years; y++ ) { initialValue = ValueWhen( newYear, Close, y + 1); barValue = Ref( Close, -252* y ); runningROC = ( ( barValue / initialValue ) - 1) * 100; VarSet( "Year"+ y, runningROC ); avgROC += runningROC; } avgROC /= years; // Plot zero line Plot( 0, "", boundaryColor, styleLine| StyleThick| StyleNoLabel); // Plot vertical lines for new year markers Plot( newYear, "", boundaryColor, styleHistogram| styleThick| styleOwnScale| styleNoLabel); // Plot current year with thick emphasis initialValue = ValueWhen( newYear, Close, 1); barValue = Close; runningROC = ( ( barValue / initialValue ) - 1) * 100; Plot( runningROC, "ROC", baseColor, styleThick); // Plot previous years with incrementing colors titleStr = StrFormat( ", Bar %g, Current: %g, Initial: %g", BarIndex(), barValue, initialValue ); titleStr += StrFormat( "\n"+ EncodeColor( baseColor ) + "This year: %2.1f%%", runningROC ); for( y = 1; y <= years; y++ ) { value = VarGet( "Year"+ y ); titleStr += StrFormat( "\n"+ EncodeColor( baseColor + y ) + y + " year"+ WriteIf( y > 1, "s", "") + " ago: %2.1f%%", value ); Plot( value, ""+ y + " years ago", baseColor + y ); } // Plot average as solid area Plot( avgROC, "Avg.", baseColor + y, styleArea| styleNoLabel); Title= NumToStr( DateTime(), formatDateTime) + titleStr + StrFormat( "\n"+ EncodeColor( baseColor + y ) + "Average: %2.1f%%", avgROC ); Mike --- In amibro...@yahoogrou ps.com, "Mike" <sfclimb...@. ..> wrote: > > > Wow, formatting of that was terrible. Reposting from a different > browser... > > years = Param("Years" , 3, 1, 15, 1); > newYear = Year() != Ref(Year(), -1); > avgROC = 0; > > // Create dynamic variables for each year (excluding current) > for (y = 1; y <= years; y++) { > initialValue = IIf(newYear, ValueWhen(newYear, Close, y), > ValueWhen(newYear, Close, y + 1)); > barValue = Ref(Close, -252 * y); > runningROC = (barValue / initialValue) - 1; > VarSet("Year" + y, runningROC); > avgROC += runningROC; > } > > avgROC /= years; > > // Plot zero line > Plot(0, "", colorLightGrey, styleLine | StyleThick | StyleNoLabel) ; > > // Plot vertical lines for new year markers > Plot(newYear, "", colorLightGrey, styleHistogram | styleThick | > styleOwnScale | styleNoLabel) ; > > // Plot current year with thick emphasis > initialValue = Iif(newYear, ValueWhen(newYear, Close, 0), > ValueWhen(newYear, Close, 1)); > barValue = Close; > runningROC = (barValue / initialValue) - 1; > Plot(runningROC, "ROC", colorDarkRed, styleThick); > > // Plot previous years with incrementing colors > for (y = 1; y <= years; y++) { > Plot(VarGet( "Year" + y), "" + y + " Years Ago", colorDarkRed + y); > } > > // Plot average as solid area > Plot(avgROC, "Avg.", colorDarkRed + y, styleArea); > > Mike > > > --- In amibro...@yahoogrou ps.com, "Mike" sfclimbers@ wrote: > > > > Richard, I suspect that ROC(C, 1) would not reveal much. It might be > > more interesting to plot a running ROC since the start of the > respective > > years. I've altered the code to show running year to date rate of > > return, including vertical bars delineating the first bar of each new > > year. You will notice that at each year goal post, all values start > over > > at zero (plus or minus a bar or two due to 252 being an imprecise > > measure of a year). > > Hope that helps. > > years = Param("Years" , 3, 1, 15, 1); newYear = Year() != Ref(Year(), > > -1); avgROC = 0; > > // Create dynamic variables for each year (excluding current) for (y = > > 1; y <= years; y++) { initialValue = IIf(newYear, ValueWhen(newYear, > > Close, y), ValueWhen(newYear, Close, y + 1)); barValue = Ref(Close, > > -252 * y); runningROC = (barValue / initialValue) - 1; > > VarSet("Year" + y, runningROC); > > avgROC += runningROC; } > > avgROC /= years; > > // Plot zero line Plot(0, "", colorLightGrey, styleLine | StyleThick | > > StyleNoLabel) ; > > // Plot vertical lines for new year markers Plot(newYear, "", > > colorLightGrey, styleHistogram | styleThick | styleOwnScale | > > styleNoLabel) ; > > // Plot current year with thick emphasis initialValue = Iif(newYear, > > ValueWhen(newYear, Close, 0), ValueWhen(newYear, Close, 1)); barValue > = > > Close; runningROC = (barValue / initialValue) - 1; Plot(runningROC, > > "ROC", colorDarkRed, styleThick); > > // Plot previous years with incrementing colors for (y = 1; y <= > years; > > y++) { Plot(VarGet( "Year" + y), "" + y + " Years Ago", colorDarkRed > > + y); } > > // Plot average as solid area Plot(avgROC, "Avg.", colorDarkRed + y, > > styleArea); > > Mike --- In amibro...@yahoogrou ps.com, "Richard" richpach2@ wrote: > > > > > > Hello Mike, > > > > > > This is very clever piece of code. Thank you for sharing it with us. > > > I would have used "for" loop to create a new "close" array for each > > year with 1-252 index. I didn't know you can use build-in "Close" > array > > in that way. Now that we can see the result for each year, it looks to > > me like we need to "normalize" the results so they can be compared on > > relative basis. Calculating an average from absolute values does not > > look right. Do you think that using ROC(C,1) would be an effective way > > to compare all individual year's results? > > > > > > Regards > > > Richard > > > > > > --- In amibro...@yahoogrou ps.com, "Mike" sfclimbers@ wrote: > > > > > > > > > > > > If "quick and dirty" is good enough for you, you can just assume > 252 > > > > trading days per trading year and then use Ref() with multiples of > > that > > > > number. > > > > > > > > e.g. > > > > years = Param("Years" , 3, 1, 15, 1); > > > > avgClose = 0; > > > > > > > > // Create dynamic variables for each year (excluding current) > > > > for (y = 1; y <= years; y++) { > > > > pastClose = Ref(Close, -252 * y); > > > > VarSet("Year" + y, pastClose); > > > > avgClose += pastClose; > > > > } > > > > > > > > avgClose /= years; > > > > > > > > // Plot current year with thick emphasis > > > > Plot(Close, "Close", colorDarkRed, styleThick); > > > > > > > > // Plot previous years with incrementing colors > > > > for (y = 1; y <= years; y++) { > > > > Plot(VarGet( "Year" + y), "" + y + " Years Ago", colorDarkRed + > > y); > > > > } > > > > > > > > // Plot average as solid area > > > > Plot(avgClose, "Avg.", colorDarkRed + y, styleArea); > > > > > > > > Note that the example assumes that the number of backyears (i.e. > > years > > > > variable) plus the base color (e.g. colorDarkRed) will not exceed > > the > > > > maximum color index found here: > > > > http://www.amibroke r.com/guide/ a_language. html > > > > <http://www.amibroke r.com/guide/ a_language. html> > > > > > > > > Mike > > > > > > > > > > > > --- In amibro...@yahoogrou ps.com, "Rick_Miller_ 98" <rick300m@> > > wrote: > > > > > > > > > > I removed the nested loops line and defined MonthPer=1 and > managed > > to > > > > get a plot. > > > > > > > > > > However this is looking at a month to month ROC with only 12 > > > > datapoints. A seasonality chart needs to be daily, weekly at most. > > > > > > > > > > Ideally the chart would have each year's performnce plotted in > the > > > > background and the composite chart of all years plotted in the > > > > foreground on a daily basis. > > > > > > > > > > This seams like quite complicated coding. I would be willing to > > > > contribute towards a properly functioning chart Afl if anyone has > it > > or > > > > is willing to code it. > > > > > > > > > > > > > > > > > > > > --- In amibro...@yahoogrou ps.com, "Richard" richpach2@ wrote: > > > > > > > > > > > > Thank you for posting this code. > > > > > > Whitout <Nested_Includes. AFL> some values are not defined. > > > > > > can you please advise what is the default value for MonthPer > and > > > > what is the ListMonths represent? > > > > > > > > > > > > Regards > > > > > > Richard > > > > > > > > > > > > --- In amibro...@yahoogrou ps.com, "vlanschot" <vlanschot@> > > wrote: > > > > > > > > > > > > > > Below is some old code of mine. May get you going though. > > > > > > > > > > > > > > PS > > > > > > > > > > > > > > #include_once <Nested_Includes. AFL> > > > > > > > > > > > > > > Maand = Month(); > > > > > > > > > > > > > > JanRet = ValueWhen(Maand == 1 AND > > > > Ref(Maand,1) ==2,ROC(C, MonthPer) ); > > > > > > > FebRet = ValueWhen(Maand == 2 AND > > > > Ref(Maand,1) ==3,ROC(C, MonthPer) ); > > > > > > > MarRet = ValueWhen(Maand == 3 AND > > > > Ref(Maand,1) ==4,ROC(C, MonthPer) ); > > > > > > > AprRet = ValueWhen(Maand == 4 AND > > > > Ref(Maand,1) ==5,ROC(C, MonthPer) ); > > > > > > > MayRet = ValueWhen(Maand == 5 AND > > > > Ref(Maand,1) ==6,ROC(C, MonthPer) ); > > > > > > > JunRet = ValueWhen(Maand == 6 AND > > > > Ref(Maand,1) ==7,ROC(C, MonthPer) ); > > > > > > > JulRet = ValueWhen(Maand == 7 AND > > > > Ref(Maand,1) ==8,ROC(C, MonthPer) ); > > > > > > > AugRet = ValueWhen(Maand == 8 AND > > > > Ref(Maand,1) ==9,ROC(C, MonthPer) ); > > > > > > > SepRet = ValueWhen(Maand == 9 AND > > > > Ref(Maand,1) ==10,ROC( C,MonthPer) ); > > > > > > > OctRet = ValueWhen(Maand == 10 AND > > > > Ref(Maand,1) ==11,ROC( C,MonthPer) ); > > > > > > > NovRet = ValueWhen(Maand == 11 AND > > > > Ref(Maand,1) ==12,ROC( C,MonthPer) ); > > > > > > > DecRet = ValueWhen(Maand == 12 AND > > > > Ref(Maand,1) ==1,ROC(C, MonthPer) ); > > > > > > > > > > > > > > > > > > > > > SeasRet = > > > > > > > IIf(Maand == 1, LastValue(Cum( JanRet)), > > > > > > > IIf(Maand == 2, LastValue(Cum( FebRet)), > > > > > > > IIf(Maand == 3, LastValue(Cum( MarRet)), > > > > > > > IIf(Maand == 4, LastValue(Cum( AprRet)), > > > > > > > IIf(Maand == 5, LastValue(Cum( MayRet)), > > > > > > > IIf(Maand == 6, LastValue(Cum( JunRet)), > > > > > > > IIf(Maand == 7, LastValue(Cum( JulRet)), > > > > > > > IIf(Maand == 8, LastValue(Cum( AugRet)), > > > > > > > IIf(Maand == 9, LastValue(Cum( SepRet)), > > > > > > > IIf(Maand == 10,LastValue( Cum(OctRet) ), > > > > > > > IIf(Maand == 11,LastValue( Cum(NovRet) ), > > > > > > > IIf(Maand == 12,LastValue( Cum(DecRet) ),0)))))) )))))); > > > > > > > > > > > > > > SeasRet = SeasRet/(BarCount- 1); > > > > > > > > > > > > > > KleurHist = IIf(SeasRet<0, > > > > colorRed,IIf( SeasRet>0,colorGreen, colorLightGrey) ); > > > > > > > > > > > > > > Plot(SeasRet, FullName( )+" Seasonal Return for > > > > "+StrExtract( ListMonths, SelectedValue( Month()-1) ),KleurHist, 2+4); > > > > > > > //Plot(OctRet, "ret",1,1) ; > > > > > > > Title = "{{DATE}} -- {{INTERVAL}} \n{{VALUES} } "; > > > > > > > > > > > > > > --- In amibro...@yahoogrou ps.com, Rick Osborn <ricko@> > wrote: > > > > > > > > > > > > > > > > I would be interested in that too > > > > > > > > > > > > > > > > Best Regards > > > > > > > > Rick Osborn > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ____________ _________ _________ __ > > > > > > > > From: Rick_Miller_ 98 <rick300m@> > > > > > > > > To: amibro...@yahoogrou ps.com > > > > > > > > Sent: Mon, December 14, 2009 9:53:23 PM > > > > > > > > Subject: [amibroker] Seasonality Plot > > > > > > > > > > > > > > > > > > > > > > > > I am looking for some code to overlay multiple years on > the > > same > > > > Jan-Dec axis and to create a composite plot of all of those years > to > > > > identify seasonality trends. > > > > > > > > > > > > > > > > Please E-Mail me if you have it. I am willing to > contribute > > to > > > > the cause. > > > > > > > > > > > > > > > > Thanks! > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
