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" <notanaiqgen...@...> 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. ( notanaiqgen...@... ) > 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. > > > > > > > > > > > > > > >