Reading CSV file to lookup special days for filtering in strategy

Apologies that I could not find how to answer this better on my own. I am a transitioning Tradestation user that would like to recode my strategies and functions in Amibroker. My Tradestation programming knowledge is fairly advanced, but I do not know how to program in C+ or Python or other common languages. So Amibroker is taking some getting used to. But I am extremely impressed with the capabilities I have found so far.

In TS I have created several functions that allow me to look at certain special days. For instance, I may want to test on performance for days the BLS Employment Report gets released. In TS I built functions that were not efficient, and it appears it can be coded much better in AFL.

So my old TS code would read something like:
EmploymentToday = false;
If date = 1/5/18 or date = 2/2/18 or date…
Then EmploymentToday = true;

I could then use this function in a strategy where I would say:
If employmenttoday = true then buy this bar on close;

In AFL it appears to me that I would be better off creating a CSV file where the Employment Day dates (or other special days) would be marked. Then I could write a function that would read that file. Unfortunately, I have not made it too far with this.

I created a csv file called specialdays.csv. I tried to attach the actual .csv but got an error saying I could only upload image files. I would be happy to share the csv file if you could tell me how to upload it. It has 2 such days that I have studied 1) Employment Days (back to 1993) through 2018, and 2) US Tax Days (normally 4/15) back to 1960 and through 2018. Here is a screenshot:

specialdays

I am spinning my wheels with several issues related to identifying these employment days.

  1. Where should I store the csv file to access it? Is there a standard recommended folder?
  2. Where should I store the code for the EmploymentToday function? Include folder? Custom folder? I am still grappling with best places to organize these things.
  3. How do I write the function to read the file and return whether today is an employment day or not? (I made a few attempts at this, but am not optimistic that I am even close. My latest attempt can be found below, though I am a bit embarrassed by it.)
function EmploymentToday(ndate)

fh = fopen("specialdays.csv", "r" );
if( fh ) 
{ 
   while( ! feof( fh ) ) 
   { 
      line = fgets( fh ); // read a line of text
      _TRACE( line );    
   }

	fclose( fh ); 
} 
else 
{ 
   Error("ERROR: file can not be open"); 
} 

{
  ndate = Date();
  Employ = Lookup(specialdays.csv, ndate, Employment_Day_93);

	return Employ
}


  1. How can I refer to this function in a strategy? My strategy code attempt is below – which is probably a little closer than the last bit of code if I actually get the EmploymentToday function to work.
Buy = Sell = Short = Cover = 0;

#include <EmploymentToday.afl>

ndate = Date;
daysheld = Optimize("DaysHeld", 1, 1, 21, 1);  //number of days I would like to hold the trade


isEmploy = EmploymentToday(ndate);  // Is today an employment day?
	
Buy = Ref(isEmploy, 0); //0 here is intended to mean I am buying on the close of the employment day, 
						//-1 would mean I would buy the close the day before the employment day so I could measure employment day performance

Sell = Ref(Close, daysheld);  //I am trying to say to that I would like to sell on the close 1 day after my entry (or longer if optimized)
  1. Lastly, if I am over-complicating things and should just do the code I thought might be less efficient with the “If date = xxx or date = xxxx” type of logic, please let me know.

Apologies for questions on things that are probably very basic…I just could not get there on my own yet.
Thanks!

1 Like

You do not need to create text files.
Just store your dates in matrix string and then check for existence of date in DateNum() array.

Datenum values are 6 to 7 digits (see employ_dates variable of below code).
Dates since year 2000 start by 1.

So for example your date 1/5/18 which I guess means January 5th 2018 would be 1180105 datenum value.
Years before year 2000 would be without leading 1, for example December 2nd 1998 -> 981202.

/// @link https://forum.amibroker.com/t/reading-csv-file-to-lookup-special-days-for-filtering-in-strategy/6637/2
employ_dates = "[1180105;1180202]";
employ_mat = MxFromString( employ_dates );
rownum = MxGetSize(employ_mat, 0);

dn = DateNum();

employ_arr = 0;
for( i = 0; i < BarCount; i++ ) {
	for( j = 0; j < rownum; j++ ) {
		if( dn[i] == employ_mat[j][0] )
			employ_arr[i] = 1;
	}
}

Plot( employ_arr, "Employment Date", colorGreen, styleHistogram | styleNoLabel, Null, Null, 0, 0, -60 );

346


BTW there exist formulas for US holidays or Employment announcements or... etc.
So actually manual dates are not required.

4 Likes

@QEdges first welcome into the light now that you have left the "dark side" :grin:

In addition to fxshrat's codes above, for future reference on importing .csv files, you should perhaps review these resources.

https://www.amibroker.com/guide/w_impwizard.html

http://www.amibroker.com/kb/tag/import/

http://www.amibroker.com/kb/2014/09/25/how-to-import-huge-ascii-files-quickly/

You could import and create your own "ticker" for your custom data. That data can then be included in your codes by calling the Foreign or setforeign functions.

https://www.amibroker.com/guide/afl/foreign.html
https://www.amibroker.com/guide/afl/setforeign.html

Your initial's aren't RH by any chance? You know about BTS and system 88? If so some of your stuff is coded into AmiBroker if you need to chat about it.

3 Likes

@fxshrat code example uses only 2 dates, so there it does not matter, but if you have some hundreds of dates to check, to speed up the formula, as the searched date is found, after setting the true value in the "special days" array, it is better to add a break statement in the inner loop.

Additional improvements can also be achieved (if the dates in the matrix are sorted) breaking from the loop when a date in the matrix is later than the one corresponding to the external loop over the bars.

1 Like

There is zero gain by just adding break to inner loop of that code (almost thousand dates in picture).
Gain would be if writing plugin.

(And actually import to DB is better. I read it would be only few dates)

702

159

1 Like

We all know that AmiBroker is very very fast :smile: but since you like to - within the Windows limits - quantify the code speed (and you already wrote the required framework), if you have some extra the time to spare, maybe you could also kindly try another variation (in addition to the break).
Use a variable for the start index of the loop over matrix dates; each time a date is found increment it by one (since there is no more need to loop over it).
This requires to have all the matrix dates sorted, with the most recent date in the last matrix row.

Thanks in advance for any feedback.

1 Like

Thank you. Unfortunately, I seem to be missing a few steps. I am not certain how to place your code to get it to show on a chart, or be able to call it as a function in a strategy. I kept getting errors when I placed it, though I made several attempts at figuring where to put it. My last attempt looks like this:

function EmploymentToday(ndate)

{
  /// @link https://forum.amibroker.com/t/reading-csv-file-to-lookup-special-days-for-filtering-in-strategy/6637/2
employ_dates = "[1180105;1180202]";
employ_mat = MxFromString( employ_dates );
rownum = MxGetSize(employ_mat, 0);

dn = DateNum();

employ_arr = 0;
for( i = 0; i < BarCount; i++ ) {
	for( j = 0; j < rownum; j++ ) {
		if( dn[i] == employ_mat[j][0] )
			employ_arr[i] = 1;
	}
}

Plot( employ_arr, "Employment Date", colorGreen, styleHistogram | styleNoLabel, Null, Null, 0, 0, -60 );

	return employ_arr;
}

With regards to formulas for US Holidays or Employment announcements, I did search the AFL Library using "Holiday" and only found a formula for moon phases. "Employment" returned nothing. I will note that I do not believe a formula for Employment announcements would be accurate unless there were several exceptions included. Below I have listed all of the employment dates back to 1993. See the notes below the list of dates to see what I mean by "exceptions".

930108;930205;930305;930412;930507;930604;930702;930806;930903;931008;931105;931203;
940107;940204;940304;940506;940603;940708;940805;940902;941007;941102;941202;
950106;950203;950310;950407;950505;950602;950707;950804;950901;951006;951101;951206;
960119;960202;960308;960503;960606;960705;960802;960906;961004;961101;961206;
970110;970207;970307;970404;970502;970606;970703;970801;970905;971003;971107;971205;
980109;980206;980306;980403;980508;980605;980702;980807;980904;981002;981204;
990108;990205;990305;990507;990604;990702;990806;990903;991008;991105;991203;
1000107;1000204;1000303;1000407;1000505;1000602;1000707;1000804;1000901;1001006;1001103;1001208;
1010105;1010202;1010309;1010406;1010504;1010601;1010706;1010803;1010907;1011005;1011102;1011207;
1020104;1020201;1020308;1020405;1020503;1020607;1020705;1020802;1020906;1021004;1021101;1021206;
1030110;1030207;1030307;1030404;1030502;1030606;1030703;1030801;1030905;1031003;1031107;1031205;
1040109;1040206;1040305;1040402;1040507;1040604;1040702;1040806;1040903;1041008;1041105;1041203;
1050107;1050204;1050304;1050401;1050506;1050603;1050708;1050805;1050902;1051007;1051104;1051202;
1060106;1060203;1060310;1060505;1060602;1060707;1060804;1060901;1061006;1061103;1061208;
1070105;1070202;1070309;1070406;1070504;1070601;1070706;1070803;1070907;1071005;1071102;1071207;
1080104;1080201;1080307;1080404;1080502;1080606;1080703;1080801;1080905;1081003;1081107;1081205;
1090109;1090206;1090306;1090403;1090508;1090605;1090702;1090807;1090904;1091002;1091106;1091204;
1100108;1100205;1100305;1100507;1100604;1100702;1100806;1100903;1101008;1101105;1101203;
1110107;1110204;1110304;1110401;1110506;1110603;1110708;1110805;1110902;1111007;1111104;1111202;
1120106;1120203;1120309;1120504;1120601;1120706;1120803;1120907;1121005;1121102;1121207;
1130104;1130201;1130308;1130405;1130503;1130607;1130705;1130802;1130906;1131022;1131108;1131206;
140110;1140207;1140307;1140404;1140502;1140606;1140703;1140801;1140905;1141003;1141107;1141205;
1150109;1150206;1150306;1150508;1150605;1150702;1150807;1150904;1151002;1151106;1151204;
1160108;1160205;1160304;1160401;1160506;1160603;1160708;1160805;1160902;1161007;1161104;1161202;
1170106;1170203;1170310;1170407;1170505;1170602;1170707;1170804;1170901;1171006;1171103;1171208;
1180105;1180202;1180309;1180406;1180504;1180601;1180706;1180803;1180907;1181005;1181102;1181207



///Note the following dates occured on Good Friday when the market was closed and are not included
///among the list 940401;960405;990402;1060407;1100402;1120406;1150403

//The estimates for October 1998 originally were scheduled to be released at 8:30 AM EST on 
//Friday, November 6. Some estimates of nonfarm payroll employment inadvertently were released
//prematurely on the Internet, so the schedule was revised and the Employment Situation report 
//was released officially at 1:30 PM EST on Thursday, November 5.  This date is also excluded from the list.

//October 2013 Report was delayed due to govt shutdown, which is why it occurred on the 22nd

Note while I tried to use the code to show the dates on the chart as you did, my ultimate objective is to refer to this function so that I may use it as a filter as I described in Question 4 code above.

@beppe Thanks for your input as well. I will look to add a break and speed it up once I get the basic code working for me. Thank you.

@portfoliobuilder - Yes. Busted. A friend gave me System88 code as an example and I built BTS last week as an exercise for myself. Would love to talk with you sometime. Feel free to email or call me. I am sure you have my info.

Hello @QEdges,

Great question there mate!

What I understand from your query is that, you basically want to read something out of a CSV file and assign that to a variable in AFL to give it a purpose.

The method shown by fxshrat resolves your case. But what if your csv list is too long and you are not okay to update your code once in a while. And what if somebody necessarily has to get a value from a CSV (or XML) and using Matrix in AFL is not an option. I am a lazy simpleton who is addicted to trading and programming is not my domain.

The process that I will explain below requires one to be, slightly more flexible, however, more power assured when it comes to interaction of AFL with external applications keeping OLE/COM objects aside. The concept that I am vouching for, is to use Autohotkey (AHK) from/for AFL. If you already know AHK, there is no need to proceed further, you know what I am saying.

Why AHK? In short, AHK is an open-source scripting language that gives immense power to non-coders with its simple high-level syntax-es. All explained in their Tutorial. AHK is extremely easy to learn - you can literally Google your AHK related queries and 98% of the time find somebody has already asked it in their forum with a readymade solution. All you need is logic and a little bit of searching will make the dish ready.

Using AHK, parsing texts from CSV or XML is so ultra-tailored, that you can even avoid any string manipulation. Amibroker with its user-friendliness is custom made for non-programmers, add AHK to your arsenal, you further enhance your chart's features.

Okay, enough said, let's dig the hole. I am going to show a sample scenario for demonstration purposes and then you can mold it accordingly to suite your needs. Please pay attention to the commented texts and visit the webpages whenever suggested for better understanding of the codes.

Scenario 1 objective is to read the "Tick Size" for its corresponding symbol from a CSV and pass the value to the chart's title:

Let's say we have the below csv file saved as C:\Users\Sample.csv.

Futures Contract,Ticker Symbol,Tick Size,Per Contract Dollar
E-mini S&P 500,ES,0.25,12.5
E-mini Nasdaq 100,NQ,0.25,5
E-mini Dow,YM,1,5
E-mini Russell 2000,RTY,0.1,5

Writing AFL (saved as C:\Program Files\AmiBroker\Formulas\Custom\Test398.afl) to call the AHK file:

// For https://forum.amibroker.com/t/reading-csv-file-to-lookup-special-days-for-filtering-in-strategy/6637/5
// Using Native AFL functions
_SECTION_BEGIN( "Assign value using AHK " );
	 TrigMe = ParamTrigger( "Run AHK", "Click Me" );
	 if( TrigMe )
	 {
		 // Using a separate TXT file for data transferring purposes
		 ToWrite = fopen( "C://Users//TickSz.txt", "w" );
		 if( ToWrite )
		 {
			 fputs( Name(), ToWrite ); // Write the symbol name onto the text file and later use that in the AHK
		 }
		 fclose( ToWrite );
	 
		 // Calling AHK file
		 ShellExecute( "C:\\Program Files\\AmiBroker\\Scripts\\AHK\\GetTickSz.ahk", "", "", 1 );
		 // Pausing AFL execution for a second before moving onto next line such that the AHK accomplishes its task in the interim flawlessly
		 for( i = 0; i < 10; i++ )
		 {
			 ThreadSleep( 100 );
		 }
		 
		 // AHK script has manipulated the content of the same TXT file and has replaced the symbol with its corresponding Tick Size as read from the CSV
		 ToRead = fopen( "C://Users//TickSz.txt", "r" );
		 if( ToRead )
		 {
			 TickSz = StrToNum( fgets( ToRead ) ); // Reading the captured value from the text file
		 }
		 fclose( ToRead );
		 
		 if( TickSz == 0 )
		 {
			 StaticVarSet( "#TickSz" + Name(), Null, False );  //Assigning it as Null in case the Symbol is not found in the CSV
		 }
		 else
		 {
			 StaticVarSet( "#TickSz" + Name(), TickSz, False );
		 }
	 }
 
	 prmTkSz = Param( "Default Tick Size", 0.01, 0.01, 10, 0.01 );
	 TkSz = Nz( StaticVarGet( "#TickSz" + Name(), False ), prmTkSz );
	 
	 Title = Name() + "  Tick Size: " + TkSz;
_SECTION_END();

BTW in AHK a semi-colon is used for commenting a line and /* *\ for commenting a set of lines. Now writing the AHK (saved as C:\Program Files\AmiBroker\Scripts\AHK\GetTickSz.ahk):

#SingleInstance, Force		;Ensures one single instance of the code running at a given point of time otherwise asks for user's permission

/*
Below line # 13 reads C:\Users\TickSz.txt where we previously saved the symbol name using AFL to begin with

ToWrite = fopen( "C://Users//TickSz.txt", "w" );
if( ToWrite )
{
	 fputs( Name(), ToWrite ); // Write the symbol name onto the text file and later use that in the AHK
}
fclose( ToWrite );
*/
FileReadLine, Sym, C:\Users\TickSz.txt, 1	;The First line of the txt is read and the value is assigned onto variable "Sym"

SymList := Array()	;Assigning an array "SymList" to store the list of Symbols from C:\Users\Sample.csv as its elements
TickSz :=  Array()	;Assigning an array "TickSz" to store the list of Tick Sizes from C:\Users\Sample.csv as its elements

/*
Before staring the loop, let's understand how the CSV would be read in AHK:

;Try out yourself Example #4: Parse a comma separated value (CSV) file ( Taken from https://autohotkey.com/docs/commands/LoopParse.htm )
Loop, read, C:\Users\Sample.csv
{
     LineNumber = %A_Index%
     Loop, parse, A_LoopReadLine, CSV
     {
         MsgBox, 4, , Field %LineNumber%-%A_Index% is:`n%A_LoopField%`n`nContinue?
         IfMsgBox, No
             return
     }
}

To understand "A_Index" and "A_LoopField" visit https://autohotkey.com/docs/Variables.htm#loop

So LineNumber is from the outer loop
And %A_Index% is directly used in the inner loop

					Column %A_Index% as 1		Column %A_Index% as 2		Column %A_Index% as 3		Column %A_Index% as 4
Row LineNumber 1	Futures Contract			Ticker Symbol				Tick Size					Per Contract $
Row LineNumber 2	E-mini 	S&P 500				ES							0.25						12.5
Row LineNumber 3	E-mini Nasdaq 100			NQ							0.25						5
Row LineNumber 4	E-mini Dow					YM							1							5
Row LineNumber 5	E-mini Russell 2000			RTY							0.1							5
*/

Loop, Read, C:\Users\Sample.csv    ;Would suggest to visit the AHK tutorial for more information
{
	 Loop, parse, A_LoopReadLine, CSV ;This line shows the beauty of AHK and how CSVs or XML tags can be easily parsed
     {
		 FieldNumber = %A_Index%
		 if( FieldNumber == 2 )
		 {
			 SymList.Push( A_LoopField ) ;"%A_Index% as 2" column is pushed as SymList array elements
		 }
		 if( FieldNumber == 3 )
		 {
			 TickSz.Push( A_LoopField ) ;"%A_Index% as 3" column is pushed as TickSz array elements
		 }
	 }
}

ctr := SymList.MaxIndex()		;Figuring out the SymList array size
Loop, %ctr%						;Another way of looping in AHK
{
	 FieldNum = %A_Index%
	 TkSym = % SymList[ FieldNum ]			;Assigning each SymList elements as TkSym for comparison purposes
	 StringReplace, LotSym, LotSym, %A_Space%,,All		;Replacing any spaces off TkSym with no spaces as a safety measure
	 
	 if( TkSym == Sym )		;Comparing it with Sym ( Line # 13 )
	 {
		 _TkSz = % TickSz[ FieldNum ]		;Capturing corresponding Tick Size value when the match is found
		 StringReplace, _TkSz, _TkSz, %A_Space%,,All
		 
		 FileDelete, C:\Users\TickSz.txt	;Deleting txt for re-writing
		 FileAppend, %_TkSz%, C:\Users\TickSz.txt	;Writing the TXT file with its corresponding TickSz which will later be read by AFL and passed on to its native variable
	 }
}

ExitApp
^+x::ExitApp   ;This bit is to Terminate AHK script in an Emergency (if at all happen) by pressing {Ctrl}{Shift}{x} together - part of best practices followed in AHK

/*
All the above happens within that 1 second which you spared in the AFL using ThreadSleep
Then the AFL reads the value from text file and passes it to a staticvar

ToRead = fopen( "C://Users//TickSz.txt", "r" );
if( ToRead )
{
	 TickSz = StrToNum( fgets( ToRead ) ); // Reading the captured value from the text file
}
fclose( ToRead );
*/

Scenario 2 objective is to read the "Per Contract Dollar" for its corresponding symbol from a CSV and pass the value to the chart's title:

;Simply manipulate the second FieldNumber in the AHK file's inner loop
Loop, Read, C:\Users\Sample.csv
{
	 Loop, parse, A_LoopReadLine, CSV
	 {
		 FieldNumber = %A_Index%
		 if( FieldNumber == 2 )
		 {
			 SymList.Push( A_LoopField )
		 }
		 if( FieldNumber == 4 ) ;Here we are comparing A_Index to 4 instead of previous 3
		 {
			 TickSz.Push( A_LoopField )
		 }
	 }
}

If interested:
Download AHK
Download AHK Editor - SciTE4AutoHotkey

Reference: Categorized list of AFL functions

P.S. In order to upload files for others, use Google Drive or Dropbox and paste the shared link in your post. And for sharing animated shreenshots, use screentogif.

5 Likes

You need latest final AmiBroker 6.20 release but not AmiBroker 6.00.

I was talking about general formulas not about AFL library.
I have made several DLL AB functions regarding US, UK, other holidays as well as for NFP (non farm payrolls) days.
708

And as you can see below my NFPdays function is returning equal TRUE flags as your long list of employments announcements dates since 1993 but it is 99% faster. Such functions are more convenient than import plus using foreign functions also.

1138

4 Likes

Hi Lennon,

Thanks for the response. I will look to dig into AHK at some point. It seems a bit beyond what I am looking for as far as just referencing some dates right now. Being new to this I need to try an figure this out one step at a time. Will definitely keep the AHK tutorials in mind for reference.

I am using 6.20.1. I am just not certain where you want me to put that code, and how to save and reference it.

Are these formulas you are talking about available somewhere? I am searching Amibroker site and also Googling and am coming up empty.

I appreciate all the replies, but in looking at them I am afraid I gave too many details in my question and overcomplicated things. So perhaps I should ask a different way.
I am hoping for the following...
A method to read a bunch of dates with a value, and then use that information as a filter in a strategy. Ideally, in English, I would like to get to the following:

If tomorrow is an employment day, buy today at close;
Sell tomorrow at close;

Daily bars only. Not worried about intraday at this point. The employment day check is just an example. Once I understand a method for achieving the above I should be able to run with the code and build out from there. Right now, I think I prefer simple to fast. If 8 lines of code takes longer to run than 40 lines of code, I’ll be happier with the 8, since all of the AFL code is like a foreign language to me at this point. Don’t care if it is a matrix, a security import (which is the method I think I am closest to understanding at this point), or a csv import. Just want to be able to refer to employment day like in the above strategy. Then I can create other strategies that refer to employment days, or other days with unique characteristics/values. Thank you!

You said you get an errorr but didn't say which error. Also you didn't mention AB version so I guessed you could have used wrong AB version.

Here is code example in addition using persistent variables making it fast once it is stored (calling NFP function just once and then reading it from static variable).

function NFPFlag() {	
	/// @link https://forum.amibroker.com/t/reading-csv-file-to-lookup-special-days-for-filtering-in-strategy/6637/11
	employ_dates = "[930108;930205;930305;930412;930507;930604;930702;930806;930903;931008;931105;931203;
				   940107;940204;940304;940506;940603;940708;940805;940902;941007;941102;941202;
				   950106;950203;950310;950407;950505;950602;950707;950804;950901;951006;951101;951206;
				   960119;960202;960308;960503;960606;960705;960802;960906;961004;961101;961206;
				   970110;970207;970307;970404;970502;970606;970703;970801;970905;971003;971107;971205;
				   980109;980206;980306;980403;980508;980605;980702;980807;980904;981002;981204;
				   990108;990205;990305;990507;990604;990702;990806;990903;991008;991105;991203;
				   1000107;1000204;1000303;1000407;1000505;1000602;1000707;1000804;1000901;1001006;1001103;1001208;
				   1010105;1010202;1010309;1010406;1010504;1010601;1010706;1010803;1010907;1011005;1011102;1011207;
				   1020104;1020201;1020308;1020405;1020503;1020607;1020705;1020802;1020906;1021004;1021101;1021206;
				   1030110;1030207;1030307;1030404;1030502;1030606;1030703;1030801;1030905;1031003;1031107;1031205;
				   1040109;1040206;1040305;1040402;1040507;1040604;1040702;1040806;1040903;1041008;1041105;1041203;
				   1050107;1050204;1050304;1050401;1050506;1050603;1050708;1050805;1050902;1051007;1051104;1051202;
				   1060106;1060203;1060310;1060505;1060602;1060707;1060804;1060901;1061006;1061103;1061208;
				   1070105;1070202;1070309;1070406;1070504;1070601;1070706;1070803;1070907;1071005;1071102;1071207;
				   1080104;1080201;1080307;1080404;1080502;1080606;1080703;1080801;1080905;1081003;1081107;1081205;
				   1090109;1090206;1090306;1090403;1090508;1090605;1090702;1090807;1090904;1091002;1091106;1091204;
				   1100108;1100205;1100305;1100507;1100604;1100702;1100806;1100903;1101008;1101105;1101203;
				   1110107;1110204;1110304;1110401;1110506;1110603;1110708;1110805;1110902;1111007;1111104;1111202;
				   1120106;1120203;1120309;1120504;1120601;1120706;1120803;1120907;1121005;1121102;1121207;
				   1130104;1130201;1130308;1130405;1130503;1130607;1130705;1130802;1130906;1131022;1131108;1131206;
				   1140110;1140207;1140307;1140404;1140502;1140606;1140703;1140801;1140905;1141003;1141107;1141205;
				   1150109;1150206;1150306;1150508;1150605;1150702;1150807;1150904;1151002;1151106;1151204;
				   1160108;1160205;1160304;1160401;1160506;1160603;1160708;1160805;1160902;1161007;1161104;1161202;
				   1170106;1170203;1170310;1170407;1170505;1170602;1170707;1170804;1170901;1171006;1171103;1171208;
				   1180105;1180202;1180309;1180406;1180504;1180601;1180706;1180803;1180907;1181005;1181102;1181207]";
	//
	employ_mat = MxSort(MxFromString( employ_dates ), 1 );
	rownum = MxGetSize(employ_mat, 0);
	dn = DateNum();	
	if( GetChartID() == 0 )
		bir = Status( "barinrange" );
	else
		bir = 1;
	employ_arr = 0;
	for( i = 0; i < BarCount; i++ ) {
		if( bir[ i ] ) {
			for( j = 0; j < rownum; j++ ) {
				if( dn[i] == employ_mat[j][0] )
					employ_arr[i] = 1;
			}
		}
	}	
	return employ_arr;
}

SetBarsRequired( sbrAll );

if( ParamTrigger( "Store NFP days persistently", "CLICK HERE" ) OR Status( "action" ) == actionScan ) 
	StaticVarSet( "Qedges_NFP_array", NFPFlag(), 1 );
	
employ_arr = StaticVarGet( "Qedges_NFP_array" );
Plot( employ_arr, "Employment Date", colorGreen, styleHistogram | styleNoLabel, Null, Null, 0, 0, -60 );

You may save that function NFPflag to an INCLUDE folder of Formulas folder and name it e.g. SpecialDays.afl or whatever

And then instead of upper code use this one

#include <SpecialDays.afl>

SetBarsRequired( sbrAll );

if( ParamTrigger( "Store NFP days persistently", "CLICK HERE" ) OR Status( "action" ) == actionScan ) 
	StaticVarSet( "Qedges_NFP_array", NFPFlag(), 1 );
	
employ_arr = StaticVarGet( "Qedges_NFP_array" );
Plot( employ_arr, "Employment Date", colorGreen, styleHistogram | styleNoLabel, Null, Null, 0, 0, -60 );

To get histogram you first have to click trigger in parameters window (right click chart pane to choose "Parameters" or click CTRL+R if chart pane is selected)
54

Or if being in analysis click "Scan" button (if upper AFL is applied there) to activate/update static variable.

I don't know where exactly there are formulas (many years ago that I made those functions). I am too lazy to search now. But there are definitely descriptions somewhere e.g. on how each US holiday is calculated.

If you want to look ahead at when is NFP in future then you can not use array but have to create array independent method. Because array goes from past to "current".

4 Likes

Here is function for LOOKING AHEAD REALTIME(!!) (so do not use for backtest!).

function NFPFutureFlag() {	
	/// function for realtime LOOK-AHEAD!
	/// Do not use for Backtest!
	/// @link https://forum.amibroker.com/t/reading-csv-file-to-lookup-special-days-for-filtering-in-strategy/6637/13
	employ_dates = "[1180706;1180803;1180907;1181005;1181102;1181207]";
	employ_mat = MxSort(MxFromString( employ_dates ), 1 );
	rownum = MxGetSize(employ_mat, 0);
	
	dt = Now(5);// LastValue(DateTime());	
	employflag = 0;
	for( i = 0; i < rownum; i++ ) {
		if( DateTimeDiff( DateTimeConvert(2, employ_mat[i][0]), dt ) / 86400 <= 1 ) {
			employflag = 1;
			break;
		}
	}
	return employflag;
}

x = NFPFutureFlag();

printf( "NFP day tommorrow: %s", StrExtract("FALSE,TRUE", x) );
3 Likes

Small correction to previous realtime function:
date dfifference should be larger 1 and smaller 2 for true flag (e.g. today Thursday and tomorrow Friday NFP day).

function NFPFutureFlag() {	
	/// function for realtime LOOK-AHEAD!
	/// Do not use for Backtest!
	/// @link https://forum.amibroker.com/t/reading-csv-file-to-lookup-special-days-for-filtering-in-strategy/6637/15
	local i, employ_dates, employ_mat, employflag, rownum, dn, dtdiff;
	employ_dates = "[1180706;1180803;1180907;1181005;1181102;1181207]";
	employ_mat = MxSort(MxFromString( employ_dates ), 1 );
	rownum = MxGetSize(employ_mat, 0);
	
	dn = Now(5);// LastValue(DateTime());	
	employflag = 0;
	for ( i = 0; i < rownum; i++ ) {
		dtdiff = DateTimeDiff( DateTimeConvert(2, employ_mat[i][0]), dn ) / 86400;
		//printf( "\n%g", dtdiff );
		if ( dtdiff >= 1 && dtdiff < 2 ) {
			employflag = 1;
			break;
		}
	}
	return employflag;
}

x = NFPFutureFlag();

printf( "NFP day tommorrow: %s", StrExtract("FALSE,TRUE", x) );
3 Likes

On the other hand if you want to backtest "Buy if tommorrow is NFP day" then for example you may do like so.

/// This AFL requires code of post of below link to be applied FIRST if static variable "employ_arr" is NULL.
/// @link https://forum.amibroker.com/t/reading-csv-file-to-lookup-special-days-for-filtering-in-strategy/6637/13
/// code has to be applied in analysis not in chart!
/// to get signal arrows in chart right click result list after running backtest 
/// and select "Show Arrows for actual trades" of context menu.

if( GetChartID() > 0 )
	Error( "Apply code in Analysis!" );

if( Interval(2) != "Daily" )
	Error( "Set Interval to EOD!" );

SetOption( "HoldMinBars", 1 );
SetOption( "Allowsamebarexit", 0 );

employ_arr = StaticVarGet( "Qedges_NFP_array" );	

BuyPrice = SellPrice = Close;

Buy = Ref( employ_arr, 1 );
Sell = 1;

Short = Cover = 0;
2 Likes

With all due respect to @fxshrat,

This approach will not work when the employment day occurs after a weekend or market holiday. The previous trading day can actually be several calendar days before.

It may be easier to construct a new list that contains the prior market day and use that to generate the signals.

In 96% of cases since 1993 NFP days have happened on Fridays.

As aside why am I supposed to provide fully fledged code with all bells and whistles and in addition checking peoples data?! Seriously.

It is basic EXAMPLE on how to apply employ_arr variable in Buy signal of some analysis code using EOD data!

If you want to check for holidays then create functions as shown being possible above. If you want to check whether it is a true one day difference then use for example DateTimeDiff function.

1 Like

I realize that it is just an example and that everybody on this forum appreciates your work.

My suggestion was not meant as a criticism and I did not mean to imply that you should do the work to demonstrate it.

1 Like

Here is the list that I use to track market holidays and special closings. It may be useful for this endeavor.
It's too long for one post, so I'll split it into two.

Cheers!

Date,Weekday,Event
01/01/1900,Mon,New Years Day - day of week is wrong in Excel prior to 3/1/1900
02/12/1900,Mon,Lincoln's Birthday - day of week is wrong in Excel prior to 3/1/1900
02/22/1900,Thu,Washington's Birthday - day of week is wrong in Excel prior to 3/1/1900
04/13/1900,Fri,Good Friday
04/14/1900,Sat,Saturday after Good Friday
05/30/1900,Wed,Memorial Day
07/04/1900,Wed,Independence Day
09/01/1900,Sat,Saturday before Labor Day
09/03/1900,Mon,Labor Day
11/06/1900,Tue,Election Day
11/29/1900,Thu,Thanksgiving Day
12/24/1900,Mon,Christmas Day Eve
12/25/1900,Tue,Christmas Day
01/01/1901,Tue,New Years Day
02/02/1901,Sat,Funeral of Queen Victoria of England
02/12/1901,Tue,Lincoln's Birthday
02/22/1901,Fri,Washington's Birthday
02/23/1901,Sat,Saturday after Washington's Birthday
04/05/1901,Fri,Good Friday
04/06/1901,Sat,Saturday after Good Friday
04/27/1901,Sat,Move to temporary quarters in Produce Exchange
05/11/1901,Sat,Enlargement of temporary quarters in Produce Exchange
05/30/1901,Thu,Memorial Day
07/04/1901,Thu,Independence Day
07/05/1901,Fri,Days after Independence Day
07/06/1901,Sat,Days after Independence Day
08/31/1901,Sat,Saturday before Labor Day
09/02/1901,Mon,Labor Day
09/14/1901,Sat,Death of President William McKinley
09/19/1901,Thu,Funeral of President William McKinley
11/05/1901,Tue,Election Day
11/28/1901,Thu,Thanksgiving Day
12/25/1901,Wed,Christmas Day
01/01/1902,Wed,New Years Day
02/12/1902,Wed,Lincoln's Birthday
02/22/1902,Sat,Washington's Birthday
03/28/1902,Fri,Good Friday
03/29/1902,Sat,Saturday after Good Friday
05/30/1902,Fri,Memorial Day
05/31/1902,Sat,Saturday after Memorial Day
07/04/1902,Fri,Independence Day
07/05/1902,Sat,Saturday after Independence Day
08/09/1902,Sat,Coronation of King Edward VII of England
08/30/1902,Sat,Saturday before Labor Day
09/01/1902,Mon,Labor Day
11/04/1902,Tue,Election Day
11/27/1902,Thu,Thanksgiving Day
12/25/1902,Thu,Christmas Day
01/01/1903,Thu,New Years Day
02/12/1903,Thu,Lincoln's Birthday
02/21/1903,Sat,Saturday before Washington's Birthday
02/23/1903,Mon,Washington's Birthday (observed)
04/10/1903,Fri,Good Friday
04/11/1903,Sat,Saturday after Good Friday
04/22/1903,Wed,Opening of new NYSE building at 18 Broad Street
05/30/1903,Sat,Memorial Day
07/04/1903,Sat,Independence Day
09/05/1903,Sat,Saturday before Labor Day
09/07/1903,Mon,Labor Day
11/03/1903,Tue,Election Day
11/26/1903,Thu,Thanksgiving Day
12/25/1903,Fri,Christmas Day
12/26/1903,Sat,Saturday after Christmas Day
01/01/1904,Fri,New Years Day
02/12/1904,Fri,Lincoln's Birthday
02/22/1904,Mon,Washington's Birthday
04/01/1904,Fri,Good Friday
05/28/1904,Sat,Saturday before Memorial Day
05/30/1904,Mon,Memorial Day
07/02/1904,Sat,Saturday before Independence Day
07/04/1904,Mon,Independence Day
09/03/1904,Sat,Saturday before Labor Day
09/05/1904,Mon,Labor Day
11/08/1904,Tue,Election Day
11/24/1904,Thu,Thanksgiving Day
12/24/1904,Sat,Saturday before Christmas Day
12/26/1904,Mon,Christmas Day (observed)
01/02/1905,Mon,New Years Day (observed)
02/13/1905,Mon,Lincoln's Birthday (observed)
02/22/1905,Wed,Washington's Birthday
04/21/1905,Fri,Good Friday
04/22/1905,Sat,Saturday after Good Friday
05/30/1905,Tue,Memorial Day
07/04/1905,Tue,Independence Day
09/04/1905,Mon,Labor Day
11/07/1905,Tue,Election Day
11/30/1905,Thu,Thanksgiving Day
12/25/1905,Mon,Christmas Day
01/01/1906,Mon,New Years Day
02/12/1906,Mon,Lincoln's Birthday
02/22/1906,Thu,Washington's Birthday
05/30/1906,Wed,Memorial Day
07/04/1906,Wed,Independence Day
09/03/1906,Mon,Labor Day
11/06/1906,Tue,Election Day
11/29/1906,Thu,Thanksgiving Day
12/25/1906,Tue,Christmas Day
01/01/1907,Tue,New Years Day
02/12/1907,Tue,Lincoln's Birthday
02/22/1907,Fri,Washington's Birthday
02/23/1907,Sat,Saturday after Washington's Birthday
03/30/1907,Sat,Saturday after Good Friday
05/30/1907,Thu,Memorial Day
07/04/1907,Thu,Independence Day
08/31/1907,Sat,Saturday before Labor Day
09/02/1907,Mon,Labor Day
11/05/1907,Tue,Election Day
11/28/1907,Thu,Thanksgiving Day
12/25/1907,Wed,Christmas Day
01/01/1908,Wed,New Years Day
02/12/1908,Wed,Lincoln's Birthday
02/22/1908,Sat,Washington's Birthday
04/17/1908,Fri,Good Friday
04/18/1908,Sat,Saturday after Good Friday
05/30/1908,Sat,Memorial Day
07/04/1908,Sat,Independence Day
09/05/1908,Sat,Saturday before Labor Day
09/07/1908,Mon,Labor Day
11/03/1908,Tue,Election Day
11/26/1908,Thu,Thanksgiving Day
12/25/1908,Fri,Christmas Day
12/26/1908,Sat,Saturday after Christmas Day
01/01/1909,Fri,New Years Day
02/12/1909,Fri,Lincoln's Birthday
02/13/1909,Sat,Saturday after Lincoln's Birthday
02/22/1909,Mon,Washington's Birthday
04/09/1909,Fri,Good Friday
04/10/1909,Sat,Saturday after Good Friday
05/29/1909,Sat,Saturday before Memorial Day
05/31/1909,Mon,Memorial Day (observed)
07/03/1909,Sat,Saturday before Independence Day
07/05/1909,Mon,Independence Day (observed)
09/04/1909,Sat,Saturday before Labor Day
09/06/1909,Mon,Labor Day
09/25/1909,Sat,Reception Day of the Hudson-Fulton Celebration
10/12/1909,Tue,Columbus Day
11/02/1909,Tue,Election Day
11/25/1909,Thu,Thanksgiving Day
12/25/1909,Sat,Christmas Day
01/01/1910,Sat,New Years Day
02/12/1910,Sat,Lincoln's Birthday
02/22/1910,Tue,Washington's Birthday
03/25/1910,Fri,Good Friday
03/26/1910,Sat,Saturday after Good Friday
05/28/1910,Sat,Saturday before Memorial Day
05/30/1910,Mon,Memorial Day
07/02/1910,Sat,Saturday before Independence Day
07/04/1910,Mon,Independence Day
09/03/1910,Sat,Saturday before Labor Day
09/05/1910,Mon,Labor Day
10/12/1910,Wed,Columbus Day
11/08/1910,Tue,Election Day
11/24/1910,Thu,Thanksgiving Day
12/24/1910,Sat,Saturday before Christmas Day
12/26/1910,Mon,Christmas Day (observed)
01/02/1911,Mon,New Years Day (observed)
02/13/1911,Mon,Lincoln's Birthday (observed)
02/22/1911,Wed,Washington's Birthday
04/14/1911,Fri,Good Friday
04/15/1911,Sat,Saturday after Good Friday
05/30/1911,Tue,Memorial Day
07/04/1911,Tue,Independence Day
09/02/1911,Sat,Saturday before Labor Day
09/04/1911,Mon,Labor Day
10/12/1911,Thu,Columbus Day
11/07/1911,Tue,Election Day
11/30/1911,Thu,Thanksgiving Day
12/23/1911,Sat,Saturday before Christmas Day
12/25/1911,Mon,Christmas Day
01/01/1912,Mon,New Years Day
02/12/1912,Mon,Lincoln's Birthday
02/22/1912,Thu,Washington's Birthday
04/05/1912,Fri,Good Friday
05/30/1912,Thu,Memorial Day
07/04/1912,Thu,Independence Day
08/31/1912,Sat,Saturday before Labor Day
09/02/1912,Mon,Labor Day
10/12/1912,Sat,Columbus Day
11/02/1912,Sat,Funeral of Vice-President James S. Sherman
11/05/1912,Tue,Election Day
11/28/1912,Thu,Thanksgiving Day
12/25/1912,Wed,Christmas Day
01/01/1913,Wed,New Years Day
02/12/1913,Wed,Lincoln's Birthday
02/22/1913,Sat,Washington's Birthday
03/21/1913,Fri,Good Friday
03/22/1913,Sat,Saturday after Good Friday
05/30/1913,Fri,Memorial Day
05/31/1913,Sat,Saturday after Memorial Day
07/04/1913,Fri,Independence Day
07/05/1913,Sat,Saturday after Independence Day
08/30/1913,Sat,Saturday before Labor Day
09/01/1913,Mon,Labor Day
10/13/1913,Mon,Columbus Day (observed)
11/04/1913,Tue,Election Day
11/27/1913,Thu,Thanksgiving Day
12/25/1913,Thu,Christmas Day
01/01/1914,Thu,New Years Day
02/12/1914,Thu,Lincoln's Birthday
02/23/1914,Mon,Washington's Birthday (observed)
04/10/1914,Fri,Good Friday
05/30/1914,Sat,Memorial Day
07/04/1914,Sat,Independence Day
07/31/1914,Fri,Pending outbreak of World War I
08/01/1914,Sat,Pending outbreak of World War I
08/03/1914,Mon,Pending outbreak of World War I
08/04/1914,Tue,Pending outbreak of World War I
08/05/1914,Wed,Pending outbreak of World War I
08/06/1914,Thu,Pending outbreak of World War I
08/07/1914,Fri,Pending outbreak of World War I
08/08/1914,Sat,Pending outbreak of World War I
08/10/1914,Mon,Pending outbreak of World War I
08/11/1914,Tue,Pending outbreak of World War I
08/12/1914,Wed,Pending outbreak of World War I
08/13/1914,Thu,Pending outbreak of World War I
08/14/1914,Fri,Pending outbreak of World War I
08/15/1914,Sat,Pending outbreak of World War I
08/17/1914,Mon,Pending outbreak of World War I
08/18/1914,Tue,Pending outbreak of World War I
08/19/1914,Wed,Pending outbreak of World War I
08/20/1914,Thu,Pending outbreak of World War I
08/21/1914,Fri,Pending outbreak of World War I
08/22/1914,Sat,Pending outbreak of World War I
08/24/1914,Mon,Pending outbreak of World War I
08/25/1914,Tue,Pending outbreak of World War I
08/26/1914,Wed,Pending outbreak of World War I
08/27/1914,Thu,Pending outbreak of World War I
08/28/1914,Fri,Pending outbreak of World War I
08/29/1914,Sat,Pending outbreak of World War I
08/31/1914,Mon,Pending outbreak of World War I
09/01/1914,Tue,Pending outbreak of World War I
09/02/1914,Wed,Pending outbreak of World War I
09/03/1914,Thu,Pending outbreak of World War I
09/04/1914,Fri,Pending outbreak of World War I
09/05/1914,Sat,Pending outbreak of World War I
09/07/1914,Mon,Labor Day
09/08/1914,Tue,Pending outbreak of World War I
09/09/1914,Wed,Pending outbreak of World War I
09/10/1914,Thu,Pending outbreak of World War I
09/11/1914,Fri,Pending outbreak of World War I
09/12/1914,Sat,Pending outbreak of World War I
09/14/1914,Mon,Pending outbreak of World War I
09/15/1914,Tue,Pending outbreak of World War I
09/16/1914,Wed,Pending outbreak of World War I
09/17/1914,Thu,Pending outbreak of World War I
09/18/1914,Fri,Pending outbreak of World War I
09/19/1914,Sat,Pending outbreak of World War I
09/21/1914,Mon,Pending outbreak of World War I
09/22/1914,Tue,Pending outbreak of World War I
09/23/1914,Wed,Pending outbreak of World War I
09/24/1914,Thu,Pending outbreak of World War I
09/25/1914,Fri,Pending outbreak of World War I
09/26/1914,Sat,Pending outbreak of World War I
09/28/1914,Mon,Pending outbreak of World War I
09/29/1914,Tue,Pending outbreak of World War I
09/30/1914,Wed,Pending outbreak of World War I
10/01/1914,Thu,Pending outbreak of World War I
10/02/1914,Fri,Pending outbreak of World War I
10/03/1914,Sat,Pending outbreak of World War I
10/05/1914,Mon,Pending outbreak of World War I
10/06/1914,Tue,Pending outbreak of World War I
10/07/1914,Wed,Pending outbreak of World War I
10/08/1914,Thu,Pending outbreak of World War I
10/09/1914,Fri,Pending outbreak of World War I
10/10/1914,Sat,Pending outbreak of World War I
10/12/1914,Mon,Columbus Day
10/13/1914,Tue,Pending outbreak of World War I
10/14/1914,Wed,Pending outbreak of World War I
10/15/1914,Thu,Pending outbreak of World War I
10/16/1914,Fri,Pending outbreak of World War I
10/17/1914,Sat,Pending outbreak of World War I
10/19/1914,Mon,Pending outbreak of World War I
10/20/1914,Tue,Pending outbreak of World War I
10/21/1914,Wed,Pending outbreak of World War I
10/22/1914,Thu,Pending outbreak of World War I
10/23/1914,Fri,Pending outbreak of World War I
10/24/1914,Sat,Pending outbreak of World War I
10/26/1914,Mon,Pending outbreak of World War I
10/27/1914,Tue,Pending outbreak of World War I
10/28/1914,Wed,Pending outbreak of World War I
10/29/1914,Thu,Pending outbreak of World War I
10/30/1914,Fri,Pending outbreak of World War I
10/31/1914,Sat,Pending outbreak of World War I
11/02/1914,Mon,Pending outbreak of World War I
11/03/1914,Tue,Election Day
11/04/1914,Wed,Pending outbreak of World War I
11/05/1914,Thu,Pending outbreak of World War I
11/06/1914,Fri,Pending outbreak of World War I
11/07/1914,Sat,Pending outbreak of World War I
11/09/1914,Mon,Pending outbreak of World War I
11/10/1914,Tue,Pending outbreak of World War I
11/11/1914,Wed,Pending outbreak of World War I
11/12/1914,Thu,Pending outbreak of World War I
11/13/1914,Fri,Pending outbreak of World War I
11/14/1914,Sat,Pending outbreak of World War I
11/16/1914,Mon,Pending outbreak of World War I
11/17/1914,Tue,Pending outbreak of World War I
11/18/1914,Wed,Pending outbreak of World War I
11/19/1914,Thu,Pending outbreak of World War I
11/20/1914,Fri,Pending outbreak of World War I
11/21/1914,Sat,Pending outbreak of World War I
11/23/1914,Mon,Pending outbreak of World War I
11/24/1914,Tue,Pending outbreak of World War I
11/25/1914,Wed,Pending outbreak of World War I
11/26/1914,Thu,Thanksgiving Day
11/27/1914,Fri,Pending outbreak of World War I
11/28/1914,Sat,Pending outbreak of World War I
11/30/1914,Mon,Pending outbreak of World War I
12/01/1914,Tue,Pending outbreak of World War I
12/02/1914,Wed,Pending outbreak of World War I
12/03/1914,Thu,Pending outbreak of World War I
12/04/1914,Fri,Pending outbreak of World War I
12/05/1914,Sat,Pending outbreak of World War I
12/07/1914,Mon,Pending outbreak of World War I
12/08/1914,Tue,Pending outbreak of World War I
12/09/1914,Wed,Pending outbreak of World War I
12/10/1914,Thu,Pending outbreak of World War I
12/11/1914,Fri,Pending outbreak of World War I
12/25/1914,Fri,Christmas Day
01/01/1915,Fri,New Years Day
02/12/1915,Fri,Lincoln's Birthday
02/22/1915,Mon,Washington's Birthday
04/02/1915,Fri,Good Friday
05/31/1915,Mon,Memorial Day (observed)
07/05/1915,Mon,Independence Day (observed)
09/06/1915,Mon,Labor Day
10/12/1915,Tue,Columbus Day
11/02/1915,Tue,Election Day
11/25/1915,Thu,Thanksgiving Day
12/25/1915,Sat,Christmas Day
01/01/1916,Sat,New Years Day
02/12/1916,Sat,Lincoln's Birthday
02/22/1916,Tue,Washington's Birthday
04/21/1916,Fri,Good Friday
05/30/1916,Tue,Memorial Day
07/04/1916,Tue,Independence Day
09/04/1916,Mon,Labor Day
10/12/1916,Thu,Columbus Day
11/07/1916,Tue,Election Day
11/30/1916,Thu,Thanksgiving Day
12/25/1916,Mon,Christmas Day
12/30/1916,Sat,Saturday before New Years Day
01/01/1917,Mon,New Years Day
02/12/1917,Mon,Lincoln's Birthday
02/22/1917,Thu,Washington's Birthday
04/06/1917,Fri,Good Friday
05/30/1917,Wed,Memorial Day
06/05/1917,Tue,Draft Registration Day
07/04/1917,Wed,Independence Day
08/04/1917,Sat,Weather (Heatless Day)
09/01/1917,Sat,Saturday before Labor Day
09/03/1917,Mon,Labor Day
10/12/1917,Fri,Columbus Day
10/13/1917,Sat,Saturday after Columbus Day
11/06/1917,Tue,Election Day
11/29/1917,Thu,Thanksgiving Day
12/25/1917,Tue,Christmas Day
01/01/1918,Tue,New Years Day
01/28/1918,Mon,Weather (Heatless Day)
02/04/1918,Mon,Weather (Heatless Day)
02/11/1918,Mon,Weather (Heatless Day)
02/12/1918,Tue,Lincoln's Birthday
02/22/1918,Fri,Washington's Birthday
03/29/1918,Fri,Good Friday
05/30/1918,Thu,Memorial Day
07/04/1918,Thu,Independence Day
09/02/1918,Mon,Labor Day
09/12/1918,Thu,Draft Registration Day
10/12/1918,Sat,Columbus Day
11/05/1918,Tue,Election Day
11/11/1918,Mon,Armistice signed
11/28/1918,Thu,Thanksgiving Day
12/25/1918,Wed,Christmas Day
01/01/1919,Wed,New Years Day
02/12/1919,Wed,Lincoln's Birthday
02/22/1919,Sat,Washington's Birthday
03/25/1919,Tue,Homecoming of 27th Division
04/18/1919,Fri,Good Friday
05/06/1919,Tue,Parade 77th Division
05/30/1919,Fri,Memorial Day
05/31/1919,Sat,Saturday after Memorial Day
07/04/1919,Fri,Independence Day
07/05/1919,Sat,Saturday after Independence Day
07/19/1919,Sat,Weather (Heatless Day & Clerical Backlog Relief)
08/02/1919,Sat,To allow offices to catch up on work
08/16/1919,Sat,To allow offices to catch up on work
08/30/1919,Sat,Saturday before Labor Day
09/01/1919,Mon,Labor Day
09/10/1919,Wed,Return of General John J. Pershing
10/13/1919,Mon,Columbus Day (observed)
11/04/1919,Tue,Election Day
11/27/1919,Thu,Thanksgiving Day
12/25/1919,Thu,Christmas Day
01/01/1920,Thu,New Years Day
02/12/1920,Thu,Lincoln's Birthday
02/23/1920,Mon,Washington's Birthday (observed)
04/02/1920,Fri,Good Friday
04/03/1920,Sat,Saturday after Good Friday
05/01/1920,Sat,Relocation of Brokerage Firm Offices
05/31/1920,Mon,Memorial Day (observed)
07/03/1920,Sat,Saturday before Independence Day
07/05/1920,Mon,Independence Day (observed)
09/04/1920,Sat,Saturday before Labor Day
09/06/1920,Mon,Labor Day
10/12/1920,Tue,Columbus Day
11/02/1920,Tue,Election Day
11/25/1920,Thu,Thanksgiving Day
12/25/1920,Sat,Christmas Day
01/01/1921,Sat,New Years Day
02/12/1921,Sat,Lincoln's Birthday
02/22/1921,Tue,Washington's Birthday
03/25/1921,Fri,Good Friday
05/28/1921,Sat,Saturday before Memorial Day
05/30/1921,Mon,Memorial Day
07/02/1921,Sat,Saturday before Independence Day
07/04/1921,Mon,Independence Day
09/03/1921,Sat,Saturday before Labor Day
09/05/1921,Mon,Labor Day
10/12/1921,Wed,Columbus Day
11/08/1921,Tue,Election Day
11/11/1921,Fri,Veterans Day
11/24/1921,Thu,Thanksgiving Day
12/26/1921,Mon,Christmas Day (observed)
01/02/1922,Mon,New Years Day (observed)
02/13/1922,Mon,Lincoln's Birthday (observed)
02/22/1922,Wed,Washington's Birthday
04/14/1922,Fri,Good Friday
05/30/1922,Tue,Memorial Day
07/04/1922,Tue,Independence Day
09/04/1922,Mon,Labor Day
10/12/1922,Thu,Columbus Day
11/07/1922,Tue,Election Day
11/30/1922,Thu,Thanksgiving Day
12/23/1922,Sat,Saturday before Christmas Day
12/25/1922,Mon,Christmas Day
01/01/1923,Mon,New Years Day
02/12/1923,Mon,Lincoln's Birthday
02/22/1923,Thu,Washington's Birthday
03/30/1923,Fri,Good Friday
05/30/1923,Wed,Memorial Day
07/04/1923,Wed,Independence Day
08/03/1923,Fri,Death of President Warren G. Harding
08/10/1923,Fri,Funeral of President Warren G. Harding
09/03/1923,Mon,Labor Day
10/12/1923,Fri,Columbus Day
11/06/1923,Tue,Election Day
11/29/1923,Thu,Thanksgiving Day
12/25/1923,Tue,Christmas Day
01/01/1924,Tue,New Years Day
02/12/1924,Tue,Lincoln's Birthday
02/22/1924,Fri,Washington's Birthday
04/18/1924,Fri,Good Friday
05/30/1924,Fri,Memorial Day
05/31/1924,Sat,Saturday after Memorial Day
07/04/1924,Fri,Independence Day
09/01/1924,Mon,Labor Day
10/13/1924,Mon,Columbus Day (observed)
11/04/1924,Tue,Election Day
11/27/1924,Thu,Thanksgiving Day
12/25/1924,Thu,Christmas Day
01/01/1925,Thu,New Years Day
02/12/1925,Thu,Lincoln's Birthday
02/23/1925,Mon,Washington's Birthday (observed)
04/10/1925,Fri,Good Friday
05/30/1925,Sat,Memorial Day
07/04/1925,Sat,Independence Day
09/07/1925,Mon,Labor Day
10/12/1925,Mon,Columbus Day
11/03/1925,Tue,Election Day
11/26/1925,Thu,Thanksgiving Day
12/25/1925,Fri,Christmas Day
12/26/1925,Sat,Saturday after Christmas Day
01/01/1926,Fri,New Years Day
02/12/1926,Fri,Lincoln's Birthday
02/22/1926,Mon,Washington's Birthday
04/02/1926,Fri,Good Friday
05/29/1926,Sat,Saturday before Memorial Day
05/31/1926,Mon,Memorial Day (observed)
07/03/1926,Sat,Saturday before Independence Day
07/05/1926,Mon,Independence Day (observed)
09/04/1926,Sat,Saturday before Labor Day
09/06/1926,Mon,Labor Day
10/12/1926,Tue,Columbus Day
11/02/1926,Tue,Election Day
11/25/1926,Thu,Thanksgiving Day
12/25/1926,Sat,Christmas Day
01/01/1927,Sat,New Years Day
02/12/1927,Sat,Lincoln's Birthday
02/22/1927,Tue,Washington's Birthday
04/15/1927,Fri,Good Friday
05/30/1927,Mon,Memorial Day
06/13/1927,Mon,Parade for Colonel Charles A. Lindbergh
07/04/1927,Mon,Independence Day
09/05/1927,Mon,Labor Day
10/12/1927,Wed,Columbus Day
11/08/1927,Tue,Election Day
11/24/1927,Thu,Thanksgiving Day
12/26/1927,Mon,Christmas Day (observed)
01/02/1928,Mon,New Years Day (observed)
02/13/1928,Mon,Lincoln's Birthday (observed)
02/22/1928,Wed,Washington's Birthday
04/06/1928,Fri,Good Friday
04/07/1928,Sat,Heavy volume (Clerical Backlog Relief)
04/21/1928,Sat,Heavy volume (Clerical Backlog Relief)
05/05/1928,Sat,Heavy volume (Clerical Backlog Relief)
05/12/1928,Sat,Heavy volume (Clerical Backlog Relief)
05/19/1928,Sat,Heavy volume (Clerical Backlog Relief)
05/26/1928,Sat,Heavy volume (Clerical Backlog Relief)
05/30/1928,Wed,Memorial Day
07/04/1928,Wed,Independence Day
09/03/1928,Mon,Labor Day
10/12/1928,Fri,Columbus Day
11/06/1928,Tue,Election Day
11/24/1928,Sat,Heavy volume (Clerical Backlog Relief)
11/29/1928,Thu,Thanksgiving Day
12/25/1928,Tue,Christmas Day
01/01/1929,Tue,New Years Day
02/09/1929,Sat,Heavy volume (Clerical Backlog Relief)
02/12/1929,Tue,Lincoln's Birthday
02/22/1929,Fri,Washington's Birthday
02/23/1929,Sat,Saturday after Washington's Birthday
03/29/1929,Fri,Good Friday
03/30/1929,Sat,Saturday after Good Friday
05/30/1929,Thu,Memorial Day
07/04/1929,Thu,Independence Day
08/31/1929,Sat,Saturday before Labor Day
09/02/1929,Mon,Labor Day
10/12/1929,Sat,Columbus Day
11/01/1929,Fri,Heavy volume (Clerical Backlog Relief)
11/02/1929,Sat,Heavy volume (Clerical Backlog Relief)
11/05/1929,Tue,Election Day
11/09/1929,Sat,Heavy volume (Clerical Backlog Relief)
11/16/1929,Sat,Heavy volume (Clerical Backlog Relief)
11/23/1929,Sat,Heavy volume (Clerical Backlog Relief)
11/28/1929,Thu,Thanksgiving Day
11/29/1929,Fri,Heavy volume (Clerical Backlog Relief)
11/30/1929,Sat,Heavy volume (Clerical Backlog Relief)
12/25/1929,Wed,Christmas Day
01/01/1930,Wed,New Years Day
02/12/1930,Wed,Lincoln's Birthday
02/22/1930,Sat,Washington's Birthday
04/18/1930,Fri,Good Friday
04/19/1930,Sat,Saturday after Good Friday
05/30/1930,Fri,Memorial Day
05/31/1930,Sat,Saturday after Memorial Day
07/04/1930,Fri,Independence Day
07/05/1930,Sat,Saturday after Independence Day
08/30/1930,Sat,Saturday before Labor Day
09/01/1930,Mon,Labor Day
10/13/1930,Mon,Columbus Day (observed)
11/04/1930,Tue,Election Day
11/27/1930,Thu,Thanksgiving Day
12/25/1930,Thu,Christmas Day
01/01/1931,Thu,New Years Day
02/12/1931,Thu,Lincoln's Birthday
02/23/1931,Mon,Washington's Birthday (observed)
04/03/1931,Fri,Good Friday
05/30/1931,Sat,Memorial Day
07/04/1931,Sat,Independence Day
09/05/1931,Sat,Saturday before Labor Day
09/07/1931,Mon,Labor Day
10/12/1931,Mon,Columbus Day
11/03/1931,Tue,Election Day
11/26/1931,Thu,Thanksgiving Day
12/25/1931,Fri,Christmas Day
12/26/1931,Sat,Saturday after Christmas Day
01/01/1932,Fri,New Years Day
02/12/1932,Fri,Lincoln's Birthday
02/22/1932,Mon,Washington's Birthday
03/25/1932,Fri,Good Friday
05/30/1932,Mon,Memorial Day
07/02/1932,Sat,Saturday before Independence Day
07/04/1932,Mon,Independence Day
09/05/1932,Mon,Labor Day
10/12/1932,Wed,Columbus Day
11/08/1932,Tue,Election Day
11/24/1932,Thu,Thanksgiving Day
12/26/1932,Mon,Christmas Day (observed)
01/02/1933,Mon,New Years Day (observed)
01/07/1933,Sat,Funeral of President Calvin Coolidge
02/13/1933,Mon,Lincoln's Birthday (observed)
02/22/1933,Wed,Washington's Birthday
03/04/1933,Sat,State banking holiday
03/06/1933,Mon,National banking holiday
03/07/1933,Tue,National banking holiday
03/08/1933,Wed,National banking holiday
03/09/1933,Thu,National banking holiday
03/10/1933,Fri,National banking holiday
03/11/1933,Sat,National banking holiday
03/13/1933,Mon,National banking holiday
03/14/1933,Tue,National banking holiday
04/14/1933,Fri,Good Friday
05/30/1933,Tue,Memorial Day
07/04/1933,Tue,Independence Day
07/29/1933,Sat,Volume activity
08/05/1933,Sat,Volume activity
08/12/1933,Sat,Volume activity
08/19/1933,Sat,Volume activity
08/26/1933,Sat,Volume activity
09/02/1933,Sat,Volume activity
09/04/1933,Mon,Labor Day
10/12/1933,Thu,Columbus Day
11/07/1933,Tue,Election Day
11/30/1933,Thu,Thanksgiving Day
12/25/1933,Mon,Christmas Day
01/01/1934,Mon,New Years Day
02/12/1934,Mon,Lincoln's Birthday
02/22/1934,Thu,Washington's Birthday
03/30/1934,Fri,Good Friday
05/30/1934,Wed,Memorial Day
07/04/1934,Wed,Independence Day
09/03/1934,Mon,Labor Day
10/12/1934,Fri,Columbus Day
11/06/1934,Tue,Election Day
11/12/1934,Mon,Veterans Day (observed)
11/29/1934,Thu,Thanksgiving Day
12/25/1934,Tue,Christmas Day
01/01/1935,Tue,New Years Day
02/12/1935,Tue,Lincoln's Birthday
02/22/1935,Fri,Washington's Birthday
04/19/1935,Fri,Good Friday
05/30/1935,Thu,Memorial Day
07/04/1935,Thu,Independence Day
09/02/1935,Mon,Labor Day
10/12/1935,Sat,Columbus Day
11/05/1935,Tue,Election Day
11/11/1935,Mon,Veterans Day
11/28/1935,Thu,Thanksgiving Day
12/25/1935,Wed,Christmas Day
01/01/1936,Wed,New Years Day
02/12/1936,Wed,Lincoln's Birthday
02/22/1936,Sat,Washington's Birthday
04/10/1936,Fri,Good Friday
05/30/1936,Sat,Memorial Day
07/04/1936,Sat,Independence Day
09/07/1936,Mon,Labor Day
10/12/1936,Mon,Columbus Day
11/03/1936,Tue,Election Day
11/11/1936,Wed,Veterans Day
11/26/1936,Thu,Thanksgiving Day
12/25/1936,Fri,Christmas Day
12/26/1936,Sat,Saturday after Christmas Day
01/01/1937,Fri,New Years Day
02/12/1937,Fri,Lincoln's Birthday
02/22/1937,Mon,Washington's Birthday
03/26/1937,Fri,Good Friday
05/29/1937,Sat,Saturday before Memorial Day
05/31/1937,Mon,Memorial Day (observed)
07/03/1937,Sat,Saturday before Independence Day
07/05/1937,Mon,Independence Day (observed)
09/06/1937,Mon,Labor Day
10/12/1937,Tue,Columbus Day
11/02/1937,Tue,Election Day
11/11/1937,Thu,Veterans Day
11/25/1937,Thu,Thanksgiving Day
12/25/1937,Sat,Christmas Day
01/01/1938,Sat,New Years Day
02/12/1938,Sat,Lincoln's Birthday
02/22/1938,Tue,Washington's Birthday
04/15/1938,Fri,Good Friday
05/30/1938,Mon,Memorial Day
07/04/1938,Mon,Independence Day
09/05/1938,Mon,Labor Day
10/12/1938,Wed,Columbus Day
11/08/1938,Tue,Election Day
11/11/1938,Fri,Veterans Day
11/24/1938,Thu,Thanksgiving Day
12/26/1938,Mon,Christmas Day (observed)
01/02/1939,Mon,New Years Day (observed)
02/13/1939,Mon,Lincoln's Birthday (observed)
02/22/1939,Wed,Washington's Birthday
04/07/1939,Fri,Good Friday
05/30/1939,Tue,Memorial Day
07/04/1939,Tue,Independence Day
09/04/1939,Mon,Labor Day
10/12/1939,Thu,Columbus Day
11/07/1939,Tue,Election Day
11/11/1939,Sat,Veterans Day
11/23/1939,Thu,Thanksgiving Day
12/25/1939,Mon,Christmas Day
01/01/1940,Mon,New Years Day
02/12/1940,Mon,Lincoln's Birthday
02/22/1940,Thu,Washington's Birthday
03/22/1940,Fri,Good Friday
05/30/1940,Thu,Memorial Day
07/04/1940,Thu,Independence Day
09/02/1940,Mon,Labor Day
10/12/1940,Sat,Columbus Day
11/05/1940,Tue,Election Day
11/11/1940,Mon,Veterans Day
11/21/1940,Thu,Thanksgiving Day
12/25/1940,Wed,Christmas Day
01/01/1941,Wed,New Years Day
02/12/1941,Wed,Lincoln's Birthday
02/22/1941,Sat,Washington's Birthday
04/11/1941,Fri,Good Friday
05/30/1941,Fri,Memorial Day
07/04/1941,Fri,Independence Day
09/01/1941,Mon,Labor Day
10/13/1941,Mon,Columbus Day (observed)
11/04/1941,Tue,Election Day
11/11/1941,Tue,Veterans Day
11/20/1941,Thu,Thanksgiving Day
12/25/1941,Thu,Christmas Day
01/01/1942,Thu,New Years Day
02/12/1942,Thu,Lincoln's Birthday
02/23/1942,Mon,Washington's Birthday (observed)
04/03/1942,Fri,Good Friday
05/30/1942,Sat,Memorial Day
07/04/1942,Sat,Independence Day
09/07/1942,Mon,Labor Day
10/12/1942,Mon,Columbus Day
11/03/1942,Tue,Election Day
11/11/1942,Wed,Veterans Day
11/26/1942,Thu,Thanksgiving Day
12/25/1942,Fri,Christmas Day
01/01/1943,Fri,New Years Day
02/12/1943,Fri,Lincoln's Birthday
02/22/1943,Mon,Washington's Birthday
04/23/1943,Fri,Good Friday
05/31/1943,Mon,Memorial Day (observed)
07/05/1943,Mon,Independence Day (observed)
09/06/1943,Mon,Labor Day
10/12/1943,Tue,Columbus Day
11/02/1943,Tue,Election Day
11/11/1943,Thu,Veterans Day
11/25/1943,Thu,Thanksgiving Day
12/25/1943,Sat,Christmas Day
01/01/1944,Sat,New Years Day
02/12/1944,Sat,Lincoln's Birthday
02/22/1944,Tue,Washington's Birthday
04/07/1944,Fri,Good Friday
05/30/1944,Tue,Memorial Day
07/04/1944,Tue,Independence Day
08/19/1944,Sat,Closed Saturday
08/26/1944,Sat,Closed Saturday
09/02/1944,Sat,Closed Saturday
09/04/1944,Mon,Labor Day
10/12/1944,Thu,Columbus Day
11/07/1944,Tue,Election Day
11/11/1944,Sat,Veterans Day
11/23/1944,Thu,Thanksgiving Day
12/25/1944,Mon,Christmas Day
01/01/1945,Mon,New Years Day
02/12/1945,Mon,Lincoln's Birthday
02/22/1945,Thu,Washington's Birthday
03/30/1945,Fri,Good Friday
04/14/1945,Sat,Day of Mourning for President Franklin D. Roosevelt
05/30/1945,Wed,Memorial Day
07/04/1945,Wed,Independence Day
07/07/1945,Sat,Closed Saturdays
07/14/1945,Sat,Closed Saturdays
07/21/1945,Sat,Closed Saturdays
07/28/1945,Sat,Closed Saturdays
08/04/1945,Sat,Closed Saturdays
08/11/1945,Sat,Closed Saturdays
08/15/1945,Wed,V-J Day. End of Pending outbreak of World War II
08/16/1945,Thu,V-J Day. End of Pending outbreak of World War II
08/18/1945,Sat,Closed Saturdays
08/25/1945,Sat,Closed Saturdays
09/01/1945,Sat,Closed Saturdays
09/03/1945,Mon,Labor Day
10/12/1945,Fri,Columbus Day
10/13/1945,Sat,Saturday after Columbus Day
10/27/1945,Sat,Navy Day
11/06/1945,Tue,Election Day
11/12/1945,Mon,Veterans Day (observed)
11/22/1945,Thu,Thanksgiving Day
12/24/1945,Mon,Christmas Day Eve
12/25/1945,Tue,Christmas Day
01/01/1946,Tue,New Years Day
02/12/1946,Tue,Lincoln's Birthday
02/22/1946,Fri,Washington's Birthday
02/23/1946,Sat,Saturday after Washington's Birthday
04/19/1946,Fri,Good Friday
05/25/1946,Sat,Railroad Strike
05/30/1946,Thu,Memorial Day
06/01/1946,Sat,Closed Saturdays
06/08/1946,Sat,Closed Saturdays
06/15/1946,Sat,Closed Saturdays
06/22/1946,Sat,Closed Saturdays
06/29/1946,Sat,Closed Saturdays
07/04/1946,Thu,Independence Day
07/06/1946,Sat,Closed Saturdays
07/13/1946,Sat,Closed Saturdays
07/20/1946,Sat,Closed Saturdays
07/27/1946,Sat,Closed Saturdays
08/03/1946,Sat,Closed Saturdays
08/10/1946,Sat,Closed Saturdays
08/17/1946,Sat,Closed Saturdays
08/24/1946,Sat,Closed Saturdays
08/31/1946,Sat,Closed Saturdays
09/02/1946,Mon,Labor Day
09/07/1946,Sat,Closed Saturdays
09/14/1946,Sat,Closed Saturdays
09/21/1946,Sat,Closed Saturdays
09/28/1946,Sat,Closed Saturdays
10/12/1946,Sat,Columbus Day
11/05/1946,Tue,Election Day
11/11/1946,Mon,Veterans Day
11/28/1946,Thu,Thanksgiving Day
12/25/1946,Wed,Christmas Day
01/01/1947,Wed,New Years Day
02/12/1947,Wed,Lincoln's Birthday
02/22/1947,Sat,Washington's Birthday
04/04/1947,Fri,Good Friday
05/30/1947,Fri,Memorial Day
05/31/1947,Sat,Closed Saturdays
06/07/1947,Sat,Closed Saturdays
06/14/1947,Sat,Closed Saturdays
06/21/1947,Sat,Closed Saturdays
06/28/1947,Sat,Closed Saturdays
07/04/1947,Fri,Independence Day
07/05/1947,Sat,Closed Saturdays
07/12/1947,Sat,Closed Saturdays
07/19/1947,Sat,Closed Saturdays
07/26/1947,Sat,Closed Saturdays
08/02/1947,Sat,Closed Saturdays
08/09/1947,Sat,Closed Saturdays
08/16/1947,Sat,Closed Saturdays
08/23/1947,Sat,Closed Saturdays
08/30/1947,Sat,Closed Saturdays
09/01/1947,Mon,Labor Day
09/06/1947,Sat,Closed Saturdays
09/13/1947,Sat,Closed Saturdays
09/20/1947,Sat,Closed Saturdays
09/27/1947,Sat,Closed Saturdays
10/13/1947,Mon,Columbus Day (observed)
11/04/1947,Tue,Election Day
11/11/1947,Tue,Veterans Day
11/27/1947,Thu,Thanksgiving Day
12/25/1947,Thu,Christmas Day
01/01/1948,Thu,New Years Day
01/03/1948,Sat,Weather (Severe weather conditions)
02/12/1948,Thu,Lincoln's Birthday
02/23/1948,Mon,Washington's Birthday (observed)
03/26/1948,Fri,Good Friday
05/29/1948,Sat,Closed Saturdays
05/31/1948,Mon,Memorial Day (observed)
06/05/1948,Sat,Closed Saturdays
06/12/1948,Sat,Closed Saturdays
06/19/1948,Sat,Closed Saturdays
06/26/1948,Sat,Closed Saturdays
07/03/1948,Sat,Closed Saturdays
07/05/1948,Mon,Independence Day (observed)
07/10/1948,Sat,Closed Saturdays
07/17/1948,Sat,Closed Saturdays
07/24/1948,Sat,Closed Saturdays
07/31/1948,Sat,Closed Saturdays
08/07/1948,Sat,Closed Saturdays
08/14/1948,Sat,Closed Saturdays
08/21/1948,Sat,Closed Saturdays
08/28/1948,Sat,Closed Saturdays
09/04/1948,Sat,Closed Saturdays
09/06/1948,Mon,Labor Day
09/11/1948,Sat,Closed Saturdays
09/18/1948,Sat,Closed Saturdays
09/25/1948,Sat,Closed Saturdays
10/12/1948,Tue,Columbus Day
11/02/1948,Tue,Election Day
11/11/1948,Thu,Veterans Day
11/25/1948,Thu,Thanksgiving Day
12/25/1948,Sat,Christmas Day
01/01/1949,Sat,New Years Day
02/12/1949,Sat,Lincoln's Birthday
02/22/1949,Tue,Washington's Birthday
04/15/1949,Fri,Good Friday
05/28/1949,Sat,Closed Saturdays
05/30/1949,Mon,Memorial Day
06/04/1949,Sat,Closed Saturdays
06/11/1949,Sat,Closed Saturdays
06/18/1949,Sat,Closed Saturdays
06/25/1949,Sat,Closed Saturdays
07/02/1949,Sat,Closed Saturdays
07/04/1949,Mon,Independence Day
07/09/1949,Sat,Closed Saturdays
07/16/1949,Sat,Closed Saturdays
07/23/1949,Sat,Closed Saturdays
07/30/1949,Sat,Closed Saturdays
08/06/1949,Sat,Closed Saturdays
08/13/1949,Sat,Closed Saturdays
08/20/1949,Sat,Closed Saturdays
08/27/1949,Sat,Closed Saturdays
09/03/1949,Sat,Closed Saturdays
09/05/1949,Mon,Labor Day
09/10/1949,Sat,Closed Saturdays
09/17/1949,Sat,Closed Saturdays
09/24/1949,Sat,Closed Saturdays
10/12/1949,Wed,Columbus Day
11/08/1949,Tue,Election Day
11/11/1949,Fri,Veterans Day
11/24/1949,Thu,Thanksgiving Day
12/24/1949,Sat,Christmas Day Eve
12/26/1949,Mon,Christmas Day (observed)