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



  

Reply via email to