Thanks to everyone for their help on this one...
What I ended up doing was creating two different functions, one for holidays, one for FOMC report days.
In those functions, I created arrays. The one for holidays was easy (unless the following code is hosed, in that case it was extremely difficult),

the code follows:
Holidays Function:
****************************************************
Variables: DateNextBarJul(0), DateNextBar(0);
Arrays: Holiday[11](0);
Holiday[1] = 11; {Jan01}
Holiday[2] = 121; {Jan21}
Holiday[3] = 218; {Feb18}
Holiday[4] = 329; {Mar29}
Holiday[5] = 527; {May27}
Holiday[6] = 74; {July4}
Holiday[7] = 92; {Sept2}
Holiday[8] = 1128; {Nov28}
Holiday[9] = 1129; {Nov29}
Holiday[10] = 1224; {Dec24}
Holiday[11] = 1225; {Dec25}
DateNextBarJul=DateToJulian(Date)+1;
DateNextBar=JulianToDate(DateNextBarJul);
For Value1 = 1 To 11 Begin
If NumToStr(Holiday[Value1],0)=NumToStr(Month(DateNextBar),0)+NumToStr(DayOfMonth(DateNextBar),0) Then Holidays=True Else Holidays=False;
End;
****************************************************
I did it this way so that no year is included in the array, since the market holidays are the same each year. Basically, I took today's date, converted it to a Julian date, added one day to it, then converted it back to the EasyLanguage format date. Then I concatenated the strings which consist of the number corresponding to the Month, and the number corresponding to the DayOfMonth for tomorrow's date, and compared them to a string conversion of the array elements.
If the two equate, then Holidays=True. In my Signal, I then put into the code that if @Holidays=True, I cover open positions with options.
On those days which are market half-days due to holidays, I simply decided to forego trading. Those days are rarely worth it anyway.
For the FOMC report days, I had to create an array that will simply have to be updated as time goes by, but that'll be not much of a problem. The code follows:
FOMC_Report_Day Function:
****************************************************
Arrays: Report_Day[160](0);
Report_Day[1] = 960130;
Report_Day[2] = 960131;
Report_Day[3] = 960326;
Report_Day[4] = 960521;
Report_Day[5] = 960702;
Report_Day[6] = 960703;
Report_Day[7] = 960820;
Report_Day[8] = 960924;
Report_Day[9] = 961113;
Report_Day[10] = 961217;
Report_Day[11] = 970205;
Report_Day[12] = 970325;
Report_Day[13] = 970520;
Report_Day[14] = 970702;
Report_Day[15] = 970819;
Report_Day[16] = 970930;
Report_Day[17] = 971112;
Report_Day[18] = 971216;
Report_Day[19] = 980203;
Report_Day[20] = 980204;
Report_Day[21] = 980331;
Report_Day[22] = 980519;
Report_Day[23] = 980630;
Report_Day[24] = 980701;
Report_Day[25] = 980818;
Report_Day[26] = 980929;
Report_Day[27] = 981117;
Report_Day[28] = 981222;
Report_Day[29] = 990202;
Report_Day[30] = 990203;
Report_Day[31] = 990330;
Report_Day[32] = 990518;
Report_Day[33] = 990629;
Report_Day[34] = 990630;
Report_Day[35] = 990824;
Report_Day[36] = 991005;
Report_Day[37] = 991116;
Report_Day[38] = 991221;
Report_Day[39] = 1000201;
Report_Day[40] = 1000202;
Report_Day[41] = 1000321;
Report_Day[42] = 1000516;
Report_Day[43] = 1000627;
Report_Day[44] = 1000628;
Report_Day[45] = 1000822;
Report_Day[46] = 1001003;
Report_Day[47] = 1001115;
Report_Day[48] = 1001219;
Report_Day[49] = 1010130;
Report_Day[50] = 1010131;
Report_Day[51] = 1010320;
Report_Day[52] = 1010515;
Report_Day[53] = 1010626;
Report_Day[54] = 1010627;
Report_Day[55] = 1010821;
Report_Day[56] = 1011002;
Report_Day[57] = 1011106;
Report_Day[58] = 1011211;
Report_Day[59] = 1020129;
Report_Day[60] = 1020130;
Report_Day[61] = 1020319;
Report_Day[62] = 1020507;
Report_Day[63] = 1020625;
Report_Day[64] = 1020626;
Report_Day[65] = 1020813;
Report_Day[66] = 1020924;
Report_Day[67] = 1021106;
Report_Day[68] = 1021210;
Report_Day[69] = 1030128;
Report_Day[70] = 1030129;
Report_Day[71] = 1030318;
Report_Day[72] = 1030506;
Report_Day[73] = 1030624;
Report_Day[74] = 1030625;
Report_Day[75] = 1030812;
Report_Day[76] = 1030916;
Report_Day[77] = 1031028;
Report_Day[78] = 1031209;
For Value1 = 1 To 78 Begin
If Report_Day[Value1] = Date Then FOMC_Report_Day = True Else FOMC_Report_Day = False;
End;
****************************************************
I pulled the past and future FOMC meeting and report dates from the FOMC website, and entered them into an array. Notice that when I declared the array, I made it much larger than I needed right now. This is basically so I don't have to mess with resizing the array as I add future FOMC dates. (It should be good for another 5 years or so, much longer than I'll need).
The only thing I'll have to do is add the line:
Report_Day[xx]=yyymmdd;
to the end of the array list, and change the:
For Value1=1 To xx Begin
line to the number of array elements.
In my Signal code, I then specified that if FOMC_Report_Day=True, then the normal entry signals would not be taken, and instead buy and sell stops would be put above and below the market, just outside the volatility range. When we get stopped in on either the long or short side, we'll know it's actual market movement, and not noise. This would have worked extremely well today, an FOMC report day.
For the double and triple witching days, I did the following:
WorkDay = DayOfWeek((Year(Date) * 10000) + (100 * Month(Date)) + 1);
If WorkDay = 0 Then
FirstFriday = 6;
If WorkDay = 1 Then
FirstFriday = 5;
If WorkDay = 2 Then
FirstFriday = 4;
If WorkDay = 3 Then
FirstFriday = 3;
If WorkDay = 4 Then
FirstFriday = 2;
If WorkDay = 5 Then
FirstFriday = 1;
If WorkDay = 6 Then
FirstFriday = 7;
ThirdFriday = FirstFriday + 14;
If DateToJulian(Date)+1 = DateToJulian((Year(Date) * 10000) + (100 * Month(Date))+WorkDay+ThirdFriday) Then...
and I tell it to cover any existing contracts with options on the day before the double or triple witching day.
If anybody sees any glitches in the above code, please let me know...
Thanks,
DGBrothers