Hi, I like really like this one. Something for the FED -) 12/01/2007,12/31/2010
Regards, Ton. ----- Original Message ----- From: notanaiqgenius To: amibroker@yahoogroups.com Sent: Wednesday, July 07, 2010 12:05 AM Subject: [amibroker] Re: PLOT OVERLAY AFL FOR RECESSIONS Hi BisTrader, No need to study it (unless you want to). It should work if you just do the following: 1) copy my code to new afl document. 2) create this directory: c:\abTestData\ 3) with Notepad copy and paste the following dates into a file and save it as a .csv file in that abTestData directory. Name the file "recessions.csv" 4) apply to afl document to chart and Enjoy. 09/01/1902,08/31/1904 05/01/1907,06/30/1908 01/01/1910,01/31/1912 01/01/1913,12/31/1914 08/01/1918,03/31/1919 01/01/1920,07/31/1921 05/01/1923,07/31/1924 10/01/1926,11/30/1927 08/01/1929,03/31/1933 05/01/1937,06/30/1938 02/01/1945,10/31/1945 11/01/1948,10/31/1949 07/01/1953,05/31/1954 08/01/1957,04/30/1958 04/01/1960,02/28/1961 12/01/1969,11/30/1970 11/01/1973,03/31/1975 01/01/1980,07/31/1980 07/01/1981,11/30/1982 07/01/1990,03/31/1991 03/01/2001,11/30/2001 12/01/2007,12/31/2010 --- In amibroker@yahoogroups.com, "bistrader" <bistra...@...> wrote: > > Wow. Need to study. More work than expected. Most is ready the csv file and converting to 1s and 0s it appears. Thanks for sharing. > > --- In amibroker@yahoogroups.com, "notanaiqgenius" <notanaiqgenius@> wrote: > > > > Sebastian and bistrader, > > > > That is a very clean, fast, and simple solution, Sebastian. I actually > > prefer your method most of the time. > > > > However, I kind of got carried away and wrote it the hard way reading a > > csv file directly with the string functions. This code could be used to > > plot user-defined periods of any sort whose start and end dates are > > stored in two columns in a csv file. > > > > Please read the comments at the top of my code so you know how the > > begin and end recession dates should be formatted in the csv file. I > > wrote the dates for the recessions from then nber.org website from 1900 > > to now, and just guessed that the current recession would end at the > > end of this year. You can find them in a comment below the main code. > > > > I fully debugged this and it works. It basically parses the dates out > > of a csv file and then loops through to make a "isRecession" boolean > > array, which is then plotted on the chart in gray area, as bistrader > > originally requested. > > > > I hope you like this solution! > > > > -Paul > > > > > > CODE: > > > > > > /*Coded By: Paul D. ( notanaiqgenius@ ) > > Last Modified: 07/05/2010 using Amibroker 5.3 > > for Yahoo amibroker group message #150705 for bistrader > > > > NOTE #1: CSV file must be in following format: > > > > MM/DD/YYYY,MM/DD/YYYY > > MM/DD/YYYY,MM/DD/YYYY > > MM/DD/YYYY,MM/DD/YYYY > > > > where the first column is the START Of the recession OR period AND > > the Second column is the END Of the recession OR period > > > > NOTE #2: be sure to feed the full folder AND file path with \\ slashs > > for folder/file > > separators; it should look like this path string: > > "C:\\abTestData\\recessions.csv" > > You will need to make a folder called abTestData and put the > > recessions.csv file > > in there if you want my code to work "as-is" > > > > NOTE #3: the Plot should be inserted as an OVERLAY. > > > > NOTE #4: dates before 1900 won't work i don't think because i used "Easy > > Language" style dates > > which are in the format of YYYMMDD like 1101231. 01/01/1900 would be > > 0000101, so can't go before > > 01/01/1900. Sorry didn't think about this beforehand. */ > > > > function GetRecessionDates(returnBeginOrEnd, fullPathAndFileName) > > { //if you want the BEGIN dates array to be returned, set > > returnBeginOrEnd to 0 > > //if you want the END dates array to be returned, set > > returnBeginOrEnd to 1 > > local recDateStr; > > local fh; > > recDateStr = ""; > > fh = fopen(fullPathAndFileName,"r"); > > if (fh) > > { > > while(!feof(fh)) //get all text/string from csv file > > { > > recDateStr += fgets(fh); > > recDateStr += ","; > > } > > fclose(fh); > > > > //_TRACE("the string: " + recDateStr); > > > > //parse string and put it into an numeric array that this > > function will return > > rDatesBEGINarr = 0; rDatesENDarr = 0; > > DateCntr = 0; rDatesBEGINcntr = 0; rDatesENDcntr = 0; > > slashCounter = 0; > > MonthNum = 0; DayNum = 0; YearNum = 0; tempDateNum = 0; > > i = 0; > > fp = 0; //fp = first position > > while(i<StrLen(recDateStr)) > > { > > if(StrMid(recDateStr,i,1)=="/") > > { > > switch(slashCounter) > > { > > case 0: MonthNum = > > StrToNum(StrMid(recDateStr,fp,i-fp));break; //save month > > case 1: DayNum = > > StrToNum(StrMid(recDateStr,fp,i-fp));break; //save day > > } > > slashCounter++; > > fp = i + 1; > > } > > //save year + entire datenum > > if(StrMid(recDateStr,i,1)=="," & StrMid(recDateStr,i-1,1) > > != ",") > > { > > if(StrMid(recDateStr,i-1,1)=="\n") //if previous > > char was newline char > > YearNum = StrToNum(StrMid(recDateStr,fp,i-fp-1)); > > else //else last > > char not newline char > > YearNum = StrToNum(StrMid(recDateStr,fp,i-fp)); > > tempDateNum = 10000*(YearNum-1900) + 100*MonthNum + > > DayNum; > > if(DateCntr % 2 == 0) > > { > > rDatesBEGINarr[rDatesBEGINcntr] = tempDateNum; > > rDatesBEGINcntr++; > > } > > else > > { > > rDatesENDarr[rDatesENDcntr] = tempDateNum; > > rDatesENDcntr++; > > } > > DateCntr++; > > fp = i + 1; > > slashCounter = 0; > > } > > i++; > > } > > } > > if(returnBeginOrEnd==0) > > returnArr = rDatesBEGINarr; > > else > > returnArr = rDatesENDarr; > > return returnArr; > > } > > > > myFolderFilePath = "C:\\abTestData\\recessions.csv"; //remember "\" > > is written as "\\" > > rBegin = GetRecessionDates(0, myFolderFilePath); > > rEnd = GetRecessionDates(1, myFolderFilePath); > > > > /*tempStr = ""; > > for(i=0;i<BarCount;i++) > > { > > tempStr = StrFormat(" rBegin[i]: %f " + " rEnd[i]: %f", > > rBegin[i],rEnd[i]); > > _TRACE("i: " + i + tempStr); > > }*/ > > > > /*Now make "isRecession" amibroker array that will have > > "1" for recessions and "0" for no recession on that date*/ > > dn = DateNum(); > > isRecession = 0; > > j = 0; > > for(i=0;i<BarCount;i++) > > { > > while(j < BarCount-1 & dn[i] > rEnd[j]) > > j++; > > if(dn[i] >= rBegin[j] & dn[i] <= rEnd[j]) > > isRecession[i] = 1; > > //tempstr = StrFormat("i: %f datenum[i]: %f isRecession[i]: > > %f",i,dn[i],isRecession[i]); > > //_TRACE(tempstr); > > } > > > > recBarColor = Param("RecessionColorNum",47,16,55,1); > > Plot(isRecession, "RecessionOverlay", recBarColor, > > styleOwnScale|styleArea|styleNoLabel,0,1); > > > > //PUT THESE DATES IN A CSV FILE CALLED "recession.csv" > > /* > > 09/01/1902,08/31/1904 > > 05/01/1907,06/30/1908 > > 01/01/1910,01/31/1912 > > 01/01/1913,12/31/1914 > > 08/01/1918,03/31/1919 > > 01/01/1920,07/31/1921 > > 05/01/1923,07/31/1924 > > 10/01/1926,11/30/1927 > > 08/01/1929,03/31/1933 > > 05/01/1937,06/30/1938 > > 02/01/1945,10/31/1945 > > 11/01/1948,10/31/1949 > > 07/01/1953,05/31/1954 > > 08/01/1957,04/30/1958 > > 04/01/1960,02/28/1961 > > 12/01/1969,11/30/1970 > > 11/01/1973,03/31/1975 > > 01/01/1980,07/31/1980 > > 07/01/1981,11/30/1982 > > 07/01/1990,03/31/1991 > > 03/01/2001,11/30/2001 > > 12/01/2007,12/31/2010 > > */ > > > > > > > > > > --- In amibroker@yahoogroups.com, "sebastiandanconia" > > <sebastiandanconia@> wrote: > > > > > > Using a csv file was the way I solved this problem. The AB code is > > short and simple that way. > > > > > > I took the recession/expansion dates from: > > > > > > http://www.nber.org/cycles.html > > > > > > ...then created a csv file" named "^Recession Ribbon" (with the > > data,open,high,low,close,volume,open interest format) with "1"s and "0"s > > to denote expansions and recessions. > > > > > > This AB code will give you a yellow ribbon from the top to the bottom > > of a price chart during recessions. > > > > > > REC=Foreign("^Recession Ribbon","C")==0; > > > Plot(REC, "Recession", > > colorYellow,styleOwnScale|styleArea|styleNoLabel , 0,1); > > > > > > > > > Sebastian > > > > > > --- In amibroker@yahoogroups.com, "bistrader" bistrader@ wrote: > > > > > > > > Paul, > > > > > > > > Thanks. > > > > > > > > Two items. First, I would like the overlay to extend from the top > > to the bottom of the chart. Is there a way to do this? I remember > > seeing a chart someplace that did this but can not find it. Second, I > > would like to place the state date and end date for each recession in a > > csv, but is there a way to read the start and end dates (from column A > > and B, respectively) into the arrays that you have? > > > > > > > > Thanks > > > > > > > > Bert > > > > > > > > --- In amibroker@yahoogroups.com, "notanaiqgenius" <notanaiqgenius@> > > wrote: > > > > > > > > > > Hi, I made this indicator for you. Try applying as an overlay. Let > > me > > > > > know if that works for you. > > > > > > > > > > Paul > > > > > ------------- > > > > > > > > > > //RD stands for recession date > > > > > StartRD1 = 1050101; > > > > > EndRD1 = 1050631; > > > > > > > > > > StartRD2 = 1000401; > > > > > EndRD2 = 1030101; > > > > > > > > > > StartRD3 = 1070701; > > > > > EndRD3 = 1090301; > > > > > > > > > > isRecession = (DateNum()>=StartRD1 AND DateNum()<=EndRD1) OR > > > > > (DateNum()>=StartRD2 AND DateNum()<=EndRD2) OR > > > > > (DateNum()>=StartRD3 AND DateNum()<=EndRD3); > > > > > > > > > > myATR = ATR(50); > > > > > recBarColor = Param("RecessionColorNum", 25,16,55,1); > > > > > > > > > > rOpen = IIf(isRecession,Open,Open); > > > > > rHigh = IIf(isRecession,High+5*myATR,High); > > > > > rLow = IIf(isRecession,Low-5*myATR,Low); > > > > > rClose = IIf(isRecession,Close,Close); > > > > > > > > > > PlotOHLC( rOpen, rHigh, rLow, rClose, "RecessionOverlay", > > > > > recBarColor, styleCandle); > > > > > > > > > > --- In amibroker@yahoogroups.com, "bistrader" <bistrader@> wrote: > > > > > > > > > > > > I would like to create an overlay afl that has recession periods > > in a > > > > > color that can be selected via parameter with default of light > > gray. I > > > > > can come up with the beginning and ending dates for each period, > > but am > > > > > not how to proceed. Getting lost on how to best define (i.e., > > maybe 1 > > > > > if in recession and 0 otherwise) and how to best plot. Help > > > > > appreciated. > > > > > > > > > > > > > > > > > > > > >