17 using System.Collections.Generic;
32 Func<DateTime, DateTime> result;
39 throw new ArgumentException($
"Expiry function not implemented for {symbol} in FuturesExpiryFunctions.FuturesExpiryDictionary");
48 public static Dictionary<DateTime, DateTime>
DairyReportDates =
new Dictionary<DateTime, DateTime>()
50 {
new DateTime(2012, 3, 1),
new DateTime(2012, 4, 2) },
51 {
new DateTime(2012, 4, 1),
new DateTime(2012, 5, 2) },
52 {
new DateTime(2012, 5, 1),
new DateTime(2012, 5, 31) },
53 {
new DateTime(2012, 6, 1),
new DateTime(2012, 7, 5) },
54 {
new DateTime(2012, 7, 1),
new DateTime(2012, 8, 1) },
55 {
new DateTime(2012, 8, 1),
new DateTime(2012, 8, 29) },
56 {
new DateTime(2012, 9, 1),
new DateTime(2012, 10, 3) },
57 {
new DateTime(2012, 10, 1),
new DateTime(2012, 10, 31) },
58 {
new DateTime(2012, 11, 1),
new DateTime(2012, 12, 5) },
59 {
new DateTime(2012, 12, 1),
new DateTime(2013, 1, 3) },
60 {
new DateTime(2013, 1, 1),
new DateTime(2013, 1, 30) },
61 {
new DateTime(2013, 2, 1),
new DateTime(2013, 2, 27) },
62 {
new DateTime(2013, 3, 1),
new DateTime(2013, 4, 3) },
63 {
new DateTime(2013, 4, 1),
new DateTime(2013, 5, 1) },
64 {
new DateTime(2013, 5, 1),
new DateTime(2013, 6, 5) },
65 {
new DateTime(2013, 6, 1),
new DateTime(2013, 7, 3) },
66 {
new DateTime(2013, 7, 1),
new DateTime(2013, 7, 31) },
67 {
new DateTime(2013, 8, 1),
new DateTime(2013, 9, 5) },
68 {
new DateTime(2013, 9, 1),
new DateTime(2013, 10, 18) },
69 {
new DateTime(2013, 10, 1),
new DateTime(2013, 10, 30) },
70 {
new DateTime(2013, 11, 1),
new DateTime(2013, 12, 4) },
71 {
new DateTime(2013, 12, 1),
new DateTime(2014, 1, 2) },
72 {
new DateTime(2014, 1, 1),
new DateTime(2014, 2, 5) },
73 {
new DateTime(2014, 2, 1),
new DateTime(2014, 3, 5) },
74 {
new DateTime(2014, 3, 1),
new DateTime(2014, 4, 2) },
75 {
new DateTime(2014, 4, 1),
new DateTime(2014, 4, 30) },
76 {
new DateTime(2014, 5, 1),
new DateTime(2014, 6, 4) },
77 {
new DateTime(2014, 6, 1),
new DateTime(2014, 7, 2) },
78 {
new DateTime(2014, 7, 1),
new DateTime(2014, 7, 30) },
79 {
new DateTime(2014, 8, 1),
new DateTime(2014, 9, 4) },
80 {
new DateTime(2014, 9, 1),
new DateTime(2014, 10, 1) },
81 {
new DateTime(2014, 10, 1),
new DateTime(2014, 11, 5) },
82 {
new DateTime(2014, 11, 1),
new DateTime(2014, 12, 3) },
83 {
new DateTime(2014, 12, 1),
new DateTime(2014, 12, 31) },
84 {
new DateTime(2015, 1, 1),
new DateTime(2015, 2, 4) },
85 {
new DateTime(2015, 2, 1),
new DateTime(2015, 3, 4) },
86 {
new DateTime(2015, 3, 1),
new DateTime(2015, 4, 1) },
87 {
new DateTime(2015, 4, 1),
new DateTime(2015, 4, 29) },
88 {
new DateTime(2015, 5, 1),
new DateTime(2015, 6, 3) },
89 {
new DateTime(2015, 6, 1),
new DateTime(2015, 7, 1) },
90 {
new DateTime(2015, 7, 1),
new DateTime(2015, 8, 5) },
91 {
new DateTime(2015, 8, 1),
new DateTime(2015, 9, 2) },
92 {
new DateTime(2015, 9, 1),
new DateTime(2015, 9, 30) },
93 {
new DateTime(2015, 10, 1),
new DateTime(2015, 11, 4) },
94 {
new DateTime(2015, 11, 1),
new DateTime(2015, 12, 2) },
95 {
new DateTime(2015, 12, 1),
new DateTime(2015, 12, 30) },
96 {
new DateTime(2016, 1, 1),
new DateTime(2016, 2, 3) },
97 {
new DateTime(2016, 2, 1),
new DateTime(2016, 3, 2) },
98 {
new DateTime(2016, 3, 1),
new DateTime(2016, 3, 30) },
99 {
new DateTime(2016, 4, 1),
new DateTime(2016, 5, 4) },
100 {
new DateTime(2016, 5, 1),
new DateTime(2016, 6, 2) },
101 {
new DateTime(2016, 6, 1),
new DateTime(2016, 6, 29) },
102 {
new DateTime(2016, 7, 1),
new DateTime(2016, 8, 3) },
103 {
new DateTime(2016, 8, 1),
new DateTime(2016, 8, 31) },
104 {
new DateTime(2016, 9, 1),
new DateTime(2016, 10, 5) },
105 {
new DateTime(2016, 10, 1),
new DateTime(2016, 11, 2) },
106 {
new DateTime(2016, 11, 1),
new DateTime(2016, 11, 30) },
107 {
new DateTime(2016, 12, 1),
new DateTime(2017, 1, 5) },
108 {
new DateTime(2017, 1, 1),
new DateTime(2017, 2, 1) },
109 {
new DateTime(2017, 2, 1),
new DateTime(2017, 3, 1) },
110 {
new DateTime(2017, 3, 1),
new DateTime(2017, 4, 5) },
111 {
new DateTime(2017, 4, 1),
new DateTime(2017, 5, 3) },
112 {
new DateTime(2017, 5, 1),
new DateTime(2017, 6, 1) },
113 {
new DateTime(2017, 6, 1),
new DateTime(2017, 6, 28) },
114 {
new DateTime(2017, 7, 1),
new DateTime(2017, 8, 2) },
115 {
new DateTime(2017, 8, 1),
new DateTime(2017, 8, 30) },
116 {
new DateTime(2017, 9, 1),
new DateTime(2017, 10, 4) },
117 {
new DateTime(2017, 10, 1),
new DateTime(2017, 11, 1) },
118 {
new DateTime(2017, 11, 1),
new DateTime(2017, 11, 29) },
119 {
new DateTime(2017, 12, 1),
new DateTime(2018, 1, 4) },
120 {
new DateTime(2018, 1, 1),
new DateTime(2018, 1, 31) },
121 {
new DateTime(2018, 2, 1),
new DateTime(2018, 2, 28) },
122 {
new DateTime(2018, 3, 1),
new DateTime(2018, 4, 4) },
123 {
new DateTime(2018, 4, 1),
new DateTime(2018, 5, 2) },
124 {
new DateTime(2018, 5, 1),
new DateTime(2018, 5, 31) },
125 {
new DateTime(2018, 6, 1),
new DateTime(2018, 7, 5) },
126 {
new DateTime(2018, 7, 1),
new DateTime(2018, 8, 1) },
127 {
new DateTime(2018, 8, 1),
new DateTime(2018, 8, 29) },
128 {
new DateTime(2018, 9, 1),
new DateTime(2018, 10, 3) },
129 {
new DateTime(2018, 10, 1),
new DateTime(2018, 10, 31) },
130 {
new DateTime(2018, 11, 1),
new DateTime(2018, 12, 5) },
131 {
new DateTime(2018, 12, 1),
new DateTime(2019, 1, 3) },
132 {
new DateTime(2019, 1, 1),
new DateTime(2019, 1, 30) },
133 {
new DateTime(2019, 2, 1),
new DateTime(2019, 2, 27) },
134 {
new DateTime(2019, 3, 1),
new DateTime(2019, 4, 3) },
135 {
new DateTime(2019, 4, 1),
new DateTime(2019, 5, 1) },
136 {
new DateTime(2019, 5, 1),
new DateTime(2019, 6, 5) },
137 {
new DateTime(2019, 6, 1),
new DateTime(2019, 7, 3) },
138 {
new DateTime(2019, 7, 1),
new DateTime(2019, 7, 31) },
139 {
new DateTime(2019, 8, 1),
new DateTime(2019, 9, 5) },
140 {
new DateTime(2019, 9, 1),
new DateTime(2019, 10, 2) },
141 {
new DateTime(2019, 10, 1),
new DateTime(2019, 10, 30) },
142 {
new DateTime(2019, 11, 1),
new DateTime(2019, 12, 4) },
143 {
new DateTime(2019, 12, 1),
new DateTime(2020, 1, 2) },
144 {
new DateTime(2020, 1, 1),
new DateTime(2020, 2, 5) },
145 {
new DateTime(2020, 2, 1),
new DateTime(2020, 3, 4) },
146 {
new DateTime(2020, 3, 1),
new DateTime(2020, 4, 1) },
147 {
new DateTime(2020, 4, 1),
new DateTime(2020, 4, 29) },
148 {
new DateTime(2020, 5, 1),
new DateTime(2020, 6, 3) },
149 {
new DateTime(2020, 6, 1),
new DateTime(2020, 7, 1) },
150 {
new DateTime(2020, 7, 1),
new DateTime(2020, 8, 5) },
151 {
new DateTime(2020, 8, 1),
new DateTime(2020, 9, 2) },
152 {
new DateTime(2020, 9, 1),
new DateTime(2020, 9, 30) },
153 {
new DateTime(2020, 10, 1),
new DateTime(2020, 11, 4) },
154 {
new DateTime(2020, 11, 1),
new DateTime(2020, 12, 2) },
155 {
new DateTime(2020, 12, 1),
new DateTime(2020, 12, 30) },
156 {
new DateTime(2021, 1, 1),
new DateTime(2021, 2, 3) },
157 {
new DateTime(2021, 2, 1),
new DateTime(2021, 3, 3) },
158 {
new DateTime(2021, 3, 1),
new DateTime(2021, 3, 31) },
159 {
new DateTime(2021, 4, 1),
new DateTime(2021, 5, 5) },
160 {
new DateTime(2021, 5, 1),
new DateTime(2021, 6, 3) },
161 {
new DateTime(2021, 6, 1),
new DateTime(2021, 6, 30) },
162 {
new DateTime(2021, 7, 1),
new DateTime(2021, 8, 4) },
163 {
new DateTime(2021, 8, 1),
new DateTime(2021, 9, 1) },
164 {
new DateTime(2021, 9, 1),
new DateTime(2021, 9, 29) },
165 {
new DateTime(2021, 10, 1),
new DateTime(2021, 11, 3) },
166 {
new DateTime(2021, 11, 1),
new DateTime(2021, 12, 1) },
167 {
new DateTime(2021, 12, 1),
new DateTime(2022, 1, 5) },
168 {
new DateTime(2022, 1, 1),
new DateTime(2022, 2, 2) },
169 {
new DateTime(2022, 2, 1),
new DateTime(2022, 3, 2) },
170 {
new DateTime(2022, 3, 1),
new DateTime(2022, 3, 30) },
171 {
new DateTime(2022, 4, 1),
new DateTime(2022, 5, 4) },
172 {
new DateTime(2022, 5, 1),
new DateTime(2022, 6, 2) },
173 {
new DateTime(2022, 6, 1),
new DateTime(2022, 6, 29) },
174 {
new DateTime(2022, 7, 1),
new DateTime(2022, 8, 3) },
175 {
new DateTime(2022, 8, 1),
new DateTime(2022, 8, 31) },
176 {
new DateTime(2022, 9, 1),
new DateTime(2022, 10, 5) },
177 {
new DateTime(2022, 10, 1),
new DateTime(2022, 11, 2) },
178 {
new DateTime(2022, 11, 1),
new DateTime(2022, 11, 30) },
179 {
new DateTime(2022, 12, 1),
new DateTime(2023, 1, 5) },
188 {
new DateTime(2019, 6, 1),
new DateTime(2019, 5, 17) },
189 {
new DateTime(2019, 7, 1),
new DateTime(2019, 6, 15) },
190 {
new DateTime(2019, 8, 1),
new DateTime(2019, 7, 17) },
191 {
new DateTime(2019, 9, 1),
new DateTime(2019, 8, 16) },
192 {
new DateTime(2019, 10, 1),
new DateTime(2019, 9, 14) },
193 {
new DateTime(2019, 11, 1),
new DateTime(2019, 10, 17) },
194 {
new DateTime(2019, 12, 1),
new DateTime(2019, 11, 15) },
195 {
new DateTime(2020, 1, 1),
new DateTime(2019, 12, 14) },
196 {
new DateTime(2020, 2, 1),
new DateTime(2020, 1, 22) },
197 {
new DateTime(2020, 3, 1),
new DateTime(2020, 2, 21) },
198 {
new DateTime(2020, 4, 1),
new DateTime(2020, 3, 21) },
199 {
new DateTime(2020, 5, 1),
new DateTime(2020, 4, 21) },
200 {
new DateTime(2020, 6, 1),
new DateTime(2020, 5, 21) },
201 {
new DateTime(2020, 7, 1),
new DateTime(2020, 6, 23) },
202 {
new DateTime(2020, 8, 1),
new DateTime(2020, 7, 21) },
203 {
new DateTime(2020, 9, 1),
new DateTime(2020, 8, 21) },
204 {
new DateTime(2020, 10, 1),
new DateTime(2020, 9, 22) },
205 {
new DateTime(2020, 11, 1),
new DateTime(2020, 10, 21) },
206 {
new DateTime(2020, 12, 1),
new DateTime(2020, 11, 21) },
207 {
new DateTime(2021, 1, 1),
new DateTime(2020, 12, 22) },
208 {
new DateTime(2021, 2, 1),
new DateTime(2021, 1, 21) },
209 {
new DateTime(2021, 3, 1),
new DateTime(2021, 2, 23) },
210 {
new DateTime(2021, 4, 1),
new DateTime(2021, 3, 23) },
211 {
new DateTime(2021, 5, 1),
new DateTime(2021, 4, 21) },
212 {
new DateTime(2021, 6, 1),
new DateTime(2021, 5, 21) },
213 {
new DateTime(2021, 7, 1),
new DateTime(2021, 6, 22) },
214 {
new DateTime(2021, 8, 1),
new DateTime(2021, 7, 21) },
215 {
new DateTime(2021, 9, 1),
new DateTime(2021, 8, 21) },
216 {
new DateTime(2021, 10, 1),
new DateTime(2021, 9, 21) },
217 {
new DateTime(2021, 11, 1),
new DateTime(2021, 10, 21) },
218 {
new DateTime(2021, 12, 1),
new DateTime(2021, 11, 23) },
219 {
new DateTime(2022, 1, 1),
new DateTime(2021, 12, 21) },
220 {
new DateTime(2022, 2, 1),
new DateTime(2022, 1, 21) },
221 {
new DateTime(2022, 3, 1),
new DateTime(2022, 2, 23) },
222 {
new DateTime(2022, 4, 1),
new DateTime(2022, 3, 22) },
223 {
new DateTime(2022, 5, 1),
new DateTime(2022, 4, 21) },
224 {
new DateTime(2022, 6, 1),
new DateTime(2022, 5, 21) },
225 {
new DateTime(2022, 7, 1),
new DateTime(2022, 6, 21) },
226 {
new DateTime(2022, 8, 1),
new DateTime(2022, 7, 21) },
227 {
new DateTime(2022, 9, 1),
new DateTime(2022, 8, 23) },
228 {
new DateTime(2022, 10, 1),
new DateTime(2022, 9, 21) },
229 {
new DateTime(2022, 11, 1),
new DateTime(2022, 10, 21) },
230 {
new DateTime(2022, 12, 1),
new DateTime(2022, 11, 22) },
238 public static readonly Dictionary<Symbol, Func<DateTime, DateTime>>
FuturesExpiryDictionary =
new Dictionary<Symbol, Func<DateTime, DateTime>>()
297 return lastBusinessDay;
311 return lastBusinessDay;
334 var lastWednesday = (from dateRange in Enumerable.Range(1, DateTime.DaysInMonth(time.Year, time.Month))
335 where
new DateTime(time.Year, time.Month, dateRange).DayOfWeek == DayOfWeek.Wednesday
336 select
new DateTime(time.Year, time.Month, dateRange)).Last();
348 time = time.AddMonths(1);
353 return thirdFriday.Add(
new TimeSpan(13,30,0));
362 time = time.AddMonths(1);
367 return thirdFriday.Add(
new TimeSpan(13,30,0));
376 time = time.AddMonths(1);
381 return thirdFriday.Add(
new TimeSpan(13,30,0));
390 time = time.AddMonths(1);
395 return thirdFriday.Add(
new TimeSpan (13,30,0));
407 time = time.AddMonths(1);
412 var priorBusinessDay = secondFriday.AddDays(-1);
415 priorBusinessDay = priorBusinessDay.AddDays(-1);
417 return priorBusinessDay.Add(TimeSpan.FromHours(21));
429 var priorBusinessDay = secondFriday.AddDays(-1);
432 priorBusinessDay = priorBusinessDay.AddDays(-1);
434 return priorBusinessDay.Add(TimeSpan.FromHours(21));
446 time = time.AddMonths(1);
451 var priorBusinessDay = secondFriday.AddDays(-1);
454 priorBusinessDay = priorBusinessDay.AddDays(-1);
456 return priorBusinessDay.Add(TimeSpan.FromHours(21));
471 secondLastBusinessDay = secondLastBusinessDay.AddDays(-1);
473 return secondLastBusinessDay.Add(TimeSpan.FromHours(6));
485 time = time.AddMonths(1);
493 thirdFriday = thirdFriday.AddDays(-1);
507 time = time.AddMonths(1);
515 thirdFriday = thirdFriday.AddDays(-1);
529 time = time.AddMonths(1);
537 thirdFriday = thirdFriday.AddDays(-1);
551 time = time.AddMonths(1);
556 var thursdaypriorsecondFriday = secondFriday.AddDays(-1);
560 thursdaypriorsecondFriday = thursdaypriorsecondFriday.AddDays(-1);
562 return thursdaypriorsecondFriday.Add(TimeSpan.FromHours(21));
574 time = time.AddMonths(1);
579 var thursdaypriorsecondFriday = secondFriday.AddDays(-1);
583 thursdaypriorsecondFriday = thursdaypriorsecondFriday.AddDays(-1);
585 return thursdaypriorsecondFriday.Add(TimeSpan.FromHours(21));
597 time = time.AddMonths(1);
604 thirdFriday = thirdFriday.AddDays(-1);
606 return thirdFriday.Add(
new TimeSpan(13, 30, 0));
618 time = time.AddMonths(1);
625 thirdFriday = thirdFriday.AddDays(-1);
627 return thirdFriday.Add(
new TimeSpan(13, 30, 0));
639 time = time.AddMonths(1);
646 thirdFriday = thirdFriday.AddDays(-1);
648 return thirdFriday.Add(
new TimeSpan(13, 30, 0));
660 time = time.AddMonths(1);
667 thirdFriday = thirdFriday.AddDays(-1);
669 return thirdFriday.Add(
new TimeSpan(13, 30, 0));
680 var expiryDate = nextThirdFriday.AddDays(-30);
684 if (holidays.Contains(expiryDate) || holidays.Contains(nextThirdFriday))
686 expiryDate = expiryDate.AddDays(-1);
689 return expiryDate.Add(
new TimeSpan(13, 0, 0));
701 time = time.AddMonths(1);
707 return thirdWednesday.Add(
new TimeSpan(18, 30, 0));
719 time = time.AddMonths(1);
726 return thirdFriday.Add(
new TimeSpan(13, 30, 0));
735 time = time.AddMonths(1);
748 time = time.AddMonths(1);
776 time = time.AddMonths(1);
780 var wednesdays = (from dateRange in Enumerable.Range(1, DateTime.DaysInMonth(time.Year, time.Month))
781 where
new DateTime(time.Year, time.Month, dateRange).DayOfWeek == DayOfWeek.Wednesday
782 select
new DateTime(time.Year, time.Month, dateRange));
784 var distanceFromFifteenthDay = wednesdays.Select(x => Math.Abs(15 - x.Day)).ToList();
785 var wednesdayIndex = distanceFromFifteenthDay.IndexOf(distanceFromFifteenthDay.Min());
786 var closestWednesday = wednesdays.ElementAt(wednesdayIndex);
792 return closestWednesday.Add(
new TimeSpan(20, 0, 0));
806 var priorBusinessDay = secondFriday.AddDays(-1);
810 while (holidays.Contains(priorBusinessDay) || !priorBusinessDay.IsCommonBusinessDay())
812 priorBusinessDay = priorBusinessDay.AddDays(-1);
814 return priorBusinessDay.Add(
new TimeSpan(14, 30, 0));
825 var lastDay =
new DateTime(time.Year, time.Month, DateTime.DaysInMonth(time.Year, time.Month));
826 var priorBusinessDay = lastDay.AddDays(-1);
830 while (holidays.Contains(priorBusinessDay) || !priorBusinessDay.IsCommonBusinessDay())
832 priorBusinessDay = priorBusinessDay.AddDays(-1);
834 return priorBusinessDay.Add(
new TimeSpan(13, 45, 0));
850 while (holidays.Contains(expiryday) || !expiryday.IsCommonBusinessDay())
852 expiryday = expiryday.AddDays(-1);
854 return expiryday.Add(
new TimeSpan(15, 30, 0));
870 while (holidays.Contains(expiryday) || !expiryday.IsCommonBusinessDay())
872 expiryday = expiryday.AddDays(-1);
874 return expiryday.Add(
new TimeSpan(15, 30, 0));
890 while (holidays.Contains(expiryday) || !expiryday.IsCommonBusinessDay())
892 expiryday = expiryday.AddDays(-1);
894 return expiryday.Add(
new TimeSpan(15, 30, 0));
909 return lastTradingDay.Add(
new TimeSpan(16, 15, 0));
924 return lastTradingDay.Add(
new TimeSpan(16, 15, 0));
938 return lastTradingDay.Add(
new TimeSpan(16, 15, 0));
953 return lastTradingDay.Add(
new TimeSpan(16, 15, 0));
967 return lastTradingDay.Add(
new TimeSpan(16, 15, 0));
981 return lastTradingDay.Add(
new TimeSpan(16, 15, 0));
994 time = time.AddMonths(1);
998 var sixteenth =
new DateTime(time.Year,time.Month,16);
1012 time = time.AddMonths(1);
1016 var sixteenth =
new DateTime(time.Year,time.Month, 16);
1030 time = time.AddMonths(1);
1034 var fifteenth =
new DateTime(time.Year,time.Month,15);
1047 time = time.AddMonths(1);
1051 var fifteenth =
new DateTime(time.Year,time.Month,15);
1064 time = time.AddMonths(1);
1068 var fifteenth =
new DateTime(time.Year,time.Month,15);
1081 time = time.AddMonths(1);
1085 var fifteenth =
new DateTime(time.Year,time.Month,15);
1098 time = time.AddMonths(1);
1102 var fifteenth =
new DateTime(time.Year,time.Month,15);
1115 time = time.AddMonths(1);
1119 var fifteenth =
new DateTime(time.Year,time.Month,15);
1132 time = time.AddMonths(1);
1136 var fifteenth =
new DateTime(time.Year,time.Month,15);
1163 return lastBusinessDay;
1173 time = time.AddMonths(1);
1186 var twoDaysPrior = thirdWednesday.AddDays(-2);
1188 return twoDaysPrior.Add(
new TimeSpan(10, 16, 0));
1204 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14,16,0));
1218 return businessDayPrecedingThridWednesday.Add(
new TimeSpan(14,16,0));
1234 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14,16,0));
1246 time = time.AddMonths(1);
1254 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14,16,0));
1270 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14,16,0));
1286 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14,16,0));
1298 time = time.AddMonths(1);
1306 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14,16,0));
1317 var fifteenth =
new DateTime(time.Year, time.Month, 15);
1323 return fifteenth.Add(
new TimeSpan(08,0,0));
1337 return lastPrecedingBusinessDay.Add(
new TimeSpan(14,15,0));
1352 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14,16,0));
1367 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14,16,0));
1379 time = time.AddMonths(1);
1387 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14,16,0));
1399 time = time.AddMonths(1);
1407 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
1419 time = time.AddMonths(1);
1427 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
1441 return lastFriday.Add(
new TimeSpan(15, 0, 0));
1455 return lastFriday.Add(
new TimeSpan(15, 0, 0));
1467 time = time.AddMonths(1);
1475 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
1488 var secondBusinessDayPrecedingThirdWednesday = thirdWednesday.AddDays(-2);
1489 while (holidays.Contains(secondBusinessDayPrecedingThirdWednesday) || !secondBusinessDayPrecedingThirdWednesday.IsCommonBusinessDay())
1491 secondBusinessDayPrecedingThirdWednesday = secondBusinessDayPrecedingThirdWednesday.AddDays(-1);
1494 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(3,0,0));
1507 time = time.AddMonths(1);
1515 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
1528 time = time.AddMonths(1);
1536 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
1549 time = time.AddMonths(1);
1557 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
1570 time = time.AddMonths(1);
1578 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
1590 time = time.AddMonths(1);
1598 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
1612 time = time.AddMonths(1);
1618 return seventhBusinessDayPrecedingLastBusinessDay.Add(
new TimeSpan(12,01,0));
1631 time = time.AddMonths(1);
1637 return seventhBusinessDayPrecedingLastBusinessDay.Add(
new TimeSpan(12,01,0));
1649 time = time.AddMonths(1);
1654 return lastBusinessDay.Add(
new TimeSpan(12,01,0));
1667 time = time.AddMonths(1);
1672 return lastBusinessDay.Add(
new TimeSpan(12,01,0));
1690 .Add(TimeSpan.FromHours(11));
1702 time = time.AddMonths(1);
1710 while (holidays.Contains(secondBusinessDayBeforeThirdWednesday) || !secondBusinessDayBeforeThirdWednesday.IsCommonBusinessDay())
1712 secondBusinessDayBeforeThirdWednesday = secondBusinessDayBeforeThirdWednesday.AddDays(-1);
1715 return secondBusinessDayBeforeThirdWednesday.Add(
new TimeSpan(19, 0, 0));
1728 time = time.AddMonths(1);
1734 return sevenBusinessDaysBeforeLastBusinessDay.Add(
new TimeSpan(12, 1, 0));
1747 time = time.AddMonths(1);
1792 return lastBusinessDay;
1806 var lastDay =
new DateTime(time.Year, time.Month, DateTime.DaysInMonth(time.Year, time.Month));
1808 while (holidays.Contains(lastDay) || !lastDay.IsCommonBusinessDay())
1810 lastDay = lastDay.AddDays(-1);
1872 return lastBusinessDay;
1959 return lastBusinessDay;
1973 var previousMonth = time.AddMonths(-1);
1974 var lastDay =
new DateTime(previousMonth.Year, previousMonth.Month, DateTime.DaysInMonth(previousMonth.Year, previousMonth.Month));
1976 while (!lastDay.IsCommonBusinessDay() || holidays.Contains(lastDay))
1978 lastDay = lastDay.AddDays(-1);
2065 return lastBusinessDay;
2076 var previousMonth = time.AddMonths(-1);
2077 var twentyFifthDay =
new DateTime(previousMonth.Year, previousMonth.Month, 25);
2078 while (!twentyFifthDay.IsCommonBusinessDay() || holidays.Contains(twentyFifthDay))
2083 return twentyFifthDay;
2098 return lastBusinessDay;
2157 return lastBusinessDay;
2203 var twentyFifthDayPriorMonth =
new DateTime(time.Year, time.Month, 25).AddMonths(-1);
2209 return twentyFifthDayPriorMonth;
2223 return lastBusinessDay;
2237 return lastBusinessDay;
2262 return lastBusinessDay;
2276 return lastBusinessDay;
2290 return lastBusinessDay;
2312 var twoMonthsPriorToContractMonth = time.AddMonths(-2);
2314 DateTime lastBusinessDay;
2316 if (twoMonthsPriorToContractMonth.Month == 2)
2327 return lastBusinessDay;
2338 var twentyFifth =
new DateTime(time.Year,time.Month,25);
2339 twentyFifth = twentyFifth.AddMonths(-1);
2341 var businessDays = -3;
2369 DateTime publicationDate;
2373 publicationDate =
new DateTime(time.Year, time.Month, 21).AddMonths(-1);
2377 publicationDate = publicationDate.AddDays(-1);
2379 while (!publicationDate.IsCommonBusinessDay());
2381 return publicationDate;
2395 return lastBusinessDay;
2420 return lastBusinessDay;
2434 return lastBusinessDay;
2470 while (holidays.Contains(lastBusinessDay) || !lastBusinessDay.IsCommonBusinessDay())
2472 lastBusinessDay = lastBusinessDay.AddDays(-1);
2475 return lastBusinessDay;
2488 while (holidays.Contains(lastBusinessDay) || !lastBusinessDay.IsCommonBusinessDay())
2490 lastBusinessDay = lastBusinessDay.AddDays(-1);
2493 return lastBusinessDay;
2506 while (holidays.Contains(lastBusinessDay) || !lastBusinessDay.IsCommonBusinessDay())
2508 lastBusinessDay = lastBusinessDay.AddDays(-1);
2511 return lastBusinessDay;
2535 while (holidays.Contains(lastBusinessDay) || !lastBusinessDay.IsCommonBusinessDay())
2537 lastBusinessDay = lastBusinessDay.AddDays(-1);
2540 return lastBusinessDay;
2564 while (holidays.Contains(lastBusinessDay) || !lastBusinessDay.IsCommonBusinessDay())
2566 lastBusinessDay = lastBusinessDay.AddDays(-1);
2569 return lastBusinessDay;
2582 while (holidays.Contains(lastBusinessDay) || !lastBusinessDay.IsCommonBusinessDay())
2584 lastBusinessDay = lastBusinessDay.AddDays(-1);
2587 return lastBusinessDay;
2600 while (holidays.Contains(lastBusinessDay) || !lastBusinessDay.IsCommonBusinessDay())
2602 lastBusinessDay = lastBusinessDay.AddDays(-1);
2605 return lastBusinessDay;
2618 while (holidays.Contains(lastBusinessDay) || !lastBusinessDay.IsCommonBusinessDay())
2620 lastBusinessDay = lastBusinessDay.AddDays(-1);
2623 return lastBusinessDay;
2634 var twentyFifthDayInPriorMonth =
new DateTime(time.Year, time.Month, 25).AddMonths(-1);
2637 while (i < 3 || !twentyFifthDayInPriorMonth.IsCommonBusinessDay() || holidays.Contains(twentyFifthDayInPriorMonth))
2639 if (twentyFifthDayInPriorMonth.IsCommonBusinessDay() &&
2640 !holidays.Contains(twentyFifthDayInPriorMonth))
2644 twentyFifthDayInPriorMonth = twentyFifthDayInPriorMonth.AddDays(-1);
2647 return twentyFifthDayInPriorMonth;
2658 var previousMonth = time.AddMonths(-1);
2659 previousMonth =
new DateTime(previousMonth.Year, previousMonth.Month, DateTime.DaysInMonth(previousMonth.Year, previousMonth.Month));
2672 var precedingMonth = time.AddMonths(-1);
2684 var previousMonth = time.AddMonths(-1);
2697 var twentyFifthPreviousMonth =
new DateTime(time.Year, time.Month, 25).AddMonths(-1);
2703 return twentyFifthPreviousMonth;
2714 var precedingMonth = time.AddMonths(-1);
2726 var firstDay =
new DateTime(time.Year,time.Month,1);
2741 var secondPrecedingMonth = time.AddMonths(-2);
2742 var nthLastBusinessDay = secondPrecedingMonth.Month == 12 ? 2 : 1;
2754 var fourteenthDay =
new DateTime(time.Year,time.Month,14);
2756 return twelfthDay.Add(
new TimeSpan(12,0,0));
2769 time = time.AddMonths(1);
2774 return lastBusinessDay.Add(
new TimeSpan(12,0,0));
2796 time = time.AddMonths(1);
2800 var lastday =
new DateTime(time.Year,time.Month,1);
2801 lastday = lastday.AddDays(-1);
2803 return tenthday.Add(
new TimeSpan(12,0,0));
2815 time = time.AddMonths(1);
2831 var daysInMonth = DateTime.DaysInMonth(time.Year, time.Month);
2833 if(time.Month == 11)
2835 var priorThursday = (from day in Enumerable.Range(1, daysInMonth)
2836 where
new DateTime(time.Year, time.Month, day).DayOfWeek == DayOfWeek.Thursday
2837 select
new DateTime(time.Year, time.Month, day)).Reverse().ElementAt(1);
2840 priorThursday = priorThursday.AddDays(-7);
2842 return priorThursday;
2845 var lastThursday = (from day in Enumerable.Range(1, daysInMonth)
2846 where
new DateTime(time.Year, time.Month, day).DayOfWeek == DayOfWeek.Thursday
2847 select
new DateTime(time.Year, time.Month, day)).Reverse().ElementAt(0);
2850 lastThursday = lastThursday.AddDays(-7);
2852 return lastThursday;
2865 time = time.AddMonths(1);
2884 time = time.AddMonths(1);
2899 time = time.AddMonths(1);
2920 time = time.AddMonths(1);
2938 time = time.AddMonths(1);
2942 var precedingMonth = time.AddMonths(-1);
2955 time = time.AddMonths(1);
3045 return lastBusinessDay;
3059 return lastBusinessDay;
3073 return lastBusinessDay;
3087 return lastBusinessDay;
3100 return lastBusinessDay.Add(
new TimeSpan(13, 30, 0));
3113 return lastBusinessDay.Add(
new TimeSpan(13, 25, 0));
3126 return lastBusinessDay.Add(
new TimeSpan(13, 30, 0));
3139 return lastBusinessDay.Add(
new TimeSpan(13, 25, 0));
3153 return lastBusinessDay;
3167 return lastBusinessDay;
3181 return lastBusinessDay;
3195 return lastBusinessDay;
3207 time = time.AddMonths(1);
3215 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
3227 time = time.AddMonths(1);
3235 return secondBusinessDayPrecedingThirdWednesday;
3247 time = time.AddMonths(1);
3255 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
3267 time = time.AddMonths(1);
3275 return firstBusinessDayPrecedingThirdWednesday;
3287 time = time.AddMonths(1);
3295 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
3307 time = time.AddMonths(1);
3315 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
3327 time = time.AddMonths(1);
3335 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
3353 return secondBusinessDayPrecedingLastBusinessDay.Add(
new TimeSpan(6,30,0));
3365 time = time.AddMonths(1);
3373 return firstBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
3385 time = time.AddMonths(1);
3393 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(14, 16, 0));
3409 return secondBusinessDayPrecedingThirdWednesday.Add(
new TimeSpan(3,0,0));
3418 time = time.AddMonths(1);
3423 return thirdFriday.Add(
new TimeSpan(13,30,0));
3432 time = time.AddMonths(1);
3437 return thirdFriday.Add(
new TimeSpan(13,30,0));
3446 time = time.AddMonths(1);
3451 return thirdFriday.Add(
new TimeSpan(13,30,0));
3460 time = time.AddMonths(1);
3465 return thirdFriday.Add(
new TimeSpan(13,30,0));
3480 var previousMonth = time.AddMonths(-1);
3481 var twentyFifthDay =
new DateTime(previousMonth.Year, previousMonth.Month, 25);
3483 var businessDays = -4;
3506 return lastBusinessDay;
3521 return lastBusinessDay;
3538 return lastBusinessDay;
3554 return lastBusinessDay;
3570 return lastBusinessDay;
3590 while (holidays.Contains(lastFriday))
3593 while (holidays.Contains(lastFriday))
3614 return lastBusinessDay;
3638 return lastFriday.Add(
new TimeSpan(15, 0, 0));
3661 return lastFriday.Add(
new TimeSpan(15, 0, 0));