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.
> > > > > >
> > > > >
> > > >
> > >
> >
>


Reply via email to