/src/quantlib/ql/time/calendars/india.cpp
Line | Count | Source |
1 | | /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
2 | | |
3 | | /* |
4 | | Copyright (C) 2005, 2007, 2008, 2009, 2010, 2011 StatPro Italia srl |
5 | | Copyright (C) 2023, 2024 Skandinaviska Enskilda Banken AB (publ) |
6 | | |
7 | | This file is part of QuantLib, a free-software/open-source library |
8 | | for financial quantitative analysts and developers - http://quantlib.org/ |
9 | | |
10 | | QuantLib is free software: you can redistribute it and/or modify it |
11 | | under the terms of the QuantLib license. You should have received a |
12 | | copy of the license along with this program; if not, please email |
13 | | <quantlib-dev@lists.sf.net>. The license is also available online at |
14 | | <https://www.quantlib.org/license.shtml>. |
15 | | |
16 | | This program is distributed in the hope that it will be useful, but WITHOUT |
17 | | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
18 | | FOR A PARTICULAR PURPOSE. See the license for more details. |
19 | | */ |
20 | | |
21 | | #include <ql/time/calendars/india.hpp> |
22 | | |
23 | | namespace QuantLib { |
24 | | |
25 | 5.69k | India::India(Market) { |
26 | | // all calendar instances share the same implementation instance |
27 | 5.69k | static ext::shared_ptr<Calendar::Impl> impl(new India::NseImpl); |
28 | 5.69k | impl_ = impl; |
29 | 5.69k | } |
30 | | |
31 | 33.1M | bool India::NseImpl::isBusinessDay(const Date& date) const { |
32 | 33.1M | Weekday w = date.weekday(); |
33 | 33.1M | Day d = date.dayOfMonth(); |
34 | 33.1M | Month m = date.month(); |
35 | 33.1M | Year y = date.year(); |
36 | 33.1M | Day dd = date.dayOfYear(); |
37 | 33.1M | Day em = easterMonday(y); |
38 | | |
39 | 33.1M | if (isWeekend(w) |
40 | | // Republic Day |
41 | 23.7M | || (d == 26 && m == January) |
42 | | // Good Friday |
43 | 23.6M | || (dd == em - 3) |
44 | | // Ambedkar Jayanti |
45 | 23.5M | || (d == 14 && m == April) |
46 | | // May Day |
47 | 23.5M | || (d == 1 && m == May) |
48 | | // Independence Day |
49 | 23.4M | || (d == 15 && m == August) |
50 | | // Gandhi Jayanti |
51 | 23.3M | || (d == 2 && m == October) |
52 | | // Christmas |
53 | 23.3M | || (d == 25 && m == December)) |
54 | 9.85M | return false; |
55 | | |
56 | | |
57 | 23.2M | if (y == 2005) { |
58 | | // Moharram, Holi, Maharashtra Day, and Ramzan Id fall |
59 | | // on Saturday or Sunday in 2005 |
60 | 100k | if ( // Bakri Id |
61 | 100k | (d == 21 && m == January) |
62 | | // Ganesh Chaturthi |
63 | 100k | || (d == 7 && m == September) |
64 | | // Dasara |
65 | 99.7k | || (d == 12 && m == October) |
66 | | // Laxmi Puja |
67 | 99.3k | || (d == 1 && m == November) |
68 | | // Bhaubeej |
69 | 98.8k | || (d == 3 && m == November) |
70 | | // Guru Nanak Jayanti |
71 | 98.4k | || (d == 15 && m == November)) |
72 | 2.54k | return false; |
73 | 100k | } |
74 | | |
75 | 23.2M | if (y == 2006) { |
76 | 119k | if ( // Bakri Id |
77 | 119k | (d == 11 && m == January) |
78 | | // Moharram |
79 | 118k | || (d == 9 && m == February) |
80 | | // Holi |
81 | 118k | || (d == 15 && m == March) |
82 | | // Ram Navami |
83 | 117k | || (d == 6 && m == April) |
84 | | // Mahavir Jayanti |
85 | 117k | || (d == 11 && m == April) |
86 | | // Maharashtra Day |
87 | 116k | || (d == 1 && m == May) |
88 | | // Bhaubeej |
89 | 116k | || (d == 24 && m == October) |
90 | | // Ramzan Id |
91 | 116k | || (d == 25 && m == October)) |
92 | 3.34k | return false; |
93 | 119k | } |
94 | | |
95 | 23.2M | if (y == 2007) { |
96 | 136k | if ( // Bakri Id |
97 | 136k | (d == 1 && m == January) |
98 | | // Moharram |
99 | 136k | || (d == 30 && m == January) |
100 | | // Mahashivratri |
101 | 135k | || (d == 16 && m == February) |
102 | | // Ram Navami |
103 | 135k | || (d == 27 && m == March) |
104 | | // Maharashtra Day |
105 | 134k | || (d == 1 && m == May) |
106 | | // Buddha Pournima |
107 | 134k | || (d == 2 && m == May) |
108 | | // Laxmi Puja |
109 | 133k | || (d == 9 && m == November) |
110 | | // Bakri Id (again) |
111 | 133k | || (d == 21 && m == December)) |
112 | 3.83k | return false; |
113 | 136k | } |
114 | | |
115 | 23.2M | if (y == 2008) { |
116 | 155k | if ( // Mahashivratri |
117 | 155k | (d == 6 && m == March) |
118 | | // Id-E-Milad |
119 | 154k | || (d == 20 && m == March) |
120 | | // Mahavir Jayanti |
121 | 154k | || (d == 18 && m == April) |
122 | | // Maharashtra Day |
123 | 153k | || (d == 1 && m == May) |
124 | | // Buddha Pournima |
125 | 153k | || (d == 19 && m == May) |
126 | | // Ganesh Chaturthi |
127 | 152k | || (d == 3 && m == September) |
128 | | // Ramzan Id |
129 | 152k | || (d == 2 && m == October) |
130 | | // Dasara |
131 | 152k | || (d == 9 && m == October) |
132 | | // Laxmi Puja |
133 | 151k | || (d == 28 && m == October) |
134 | | // Bhau bhij |
135 | 150k | || (d == 30 && m == October) |
136 | | // Gurunanak Jayanti |
137 | 150k | || (d == 13 && m == November) |
138 | | // Bakri Id |
139 | 149k | || (d == 9 && m == December)) |
140 | 6.27k | return false; |
141 | 155k | } |
142 | | |
143 | 23.2M | if (y == 2009) { |
144 | 167k | if ( // Moharram |
145 | 167k | (d == 8 && m == January) |
146 | | // Mahashivratri |
147 | 167k | || (d == 23 && m == February) |
148 | | // Id-E-Milad |
149 | 166k | || (d == 10 && m == March) |
150 | | // Holi |
151 | 165k | || (d == 11 && m == March) |
152 | | // Ram Navmi |
153 | 165k | || (d == 3 && m == April) |
154 | | // Mahavir Jayanti |
155 | 164k | || (d == 7 && m == April) |
156 | | // Maharashtra Day |
157 | 163k | || (d == 1 && m == May) |
158 | | // Ramzan Id |
159 | 163k | || (d == 21 && m == September) |
160 | | // Dasara |
161 | 163k | || (d == 28 && m == September) |
162 | | // Bhau Bhij |
163 | 162k | || (d == 19 && m == October) |
164 | | // Gurunanak Jayanti |
165 | 161k | || (d == 2 && m == November) |
166 | | // Moharram (again) |
167 | 161k | || (d == 28 && m == December)) |
168 | 7.47k | return false; |
169 | 167k | } |
170 | | |
171 | 23.2M | if (y == 2010) { |
172 | 183k | if ( // New Year's Day |
173 | 183k | (d == 1 && m == January) |
174 | | // Mahashivratri |
175 | 182k | || (d == 12 && m == February) |
176 | | // Holi |
177 | 181k | || (d == 1 && m == March) |
178 | | // Ram Navmi |
179 | 181k | || (d == 24 && m == March) |
180 | | // Ramzan Id |
181 | 180k | || (d == 10 && m == September) |
182 | | // Laxmi Puja |
183 | 179k | || (d == 5 && m == November) |
184 | | // Bakri Id |
185 | 179k | || (d == 17 && m == November) |
186 | | // Moharram |
187 | 178k | || (d == 17 && m == December)) |
188 | 5.80k | return false; |
189 | 183k | } |
190 | | |
191 | 23.2M | if (y == 2011) { |
192 | 192k | if ( // Mahashivratri |
193 | 192k | (d == 2 && m == March) |
194 | | // Ram Navmi |
195 | 191k | || (d == 12 && m == April) |
196 | | // Ramzan Id |
197 | 190k | || (d == 31 && m == August) |
198 | | // Ganesh Chaturthi |
199 | 190k | || (d == 1 && m == September) |
200 | | // Dasara |
201 | 189k | || (d == 6 && m == October) |
202 | | // Laxmi Puja |
203 | 188k | || (d == 26 && m == October) |
204 | | // Diwali - Balipratipada |
205 | 187k | || (d == 27 && m == October) |
206 | | // Bakri Id |
207 | 186k | || (d == 7 && m == November) |
208 | | // Gurunanak Jayanti |
209 | 186k | || (d == 10 && m == November) |
210 | | // Moharram |
211 | 185k | || (d == 6 && m == December)) |
212 | 7.78k | return false; |
213 | 192k | } |
214 | | |
215 | 23.2M | if (y == 2012) { |
216 | 205k | if ( // Mahashivratri |
217 | 205k | (d == 20 && m == February) |
218 | | // Holi |
219 | 204k | || (d == 8 && m == March) |
220 | | // Mahavir Jayanti |
221 | 203k | || (d == 5 && m == April) |
222 | | // Ramzan Id |
223 | 203k | || (d == 20 && m == August) |
224 | | // Ganesh Chaturthi |
225 | 202k | || (d == 19 && m == September) |
226 | | // Dasara |
227 | 201k | || (d == 24 && m == October) |
228 | | // Diwali - Balipratipada |
229 | 200k | || (d == 14 && m == November) |
230 | | // Gurunanak Jayanti |
231 | 199k | || (d == 28 && m == November)) |
232 | 6.57k | return false; |
233 | 205k | } |
234 | | |
235 | 23.2M | if (y == 2013) { |
236 | 212k | if ( // Holi |
237 | 212k | (d == 27 && m == March) |
238 | | // Ram Navmi |
239 | 211k | || (d == 19 && m == April) |
240 | | // Mahavir Jayanti |
241 | 210k | || (d == 24 && m == April) |
242 | | // Ramzan Id |
243 | 209k | || (d == 9 && m == August) |
244 | | // Ganesh Chaturthi |
245 | 208k | || (d == 9 && m == September) |
246 | | // Bakri Id |
247 | 207k | || (d == 16 && m == October) |
248 | | // Diwali - Balipratipada |
249 | 207k | || (d == 4 && m == November) |
250 | | // Moharram |
251 | 206k | || (d == 14 && m == November)) |
252 | 6.74k | return false; |
253 | 212k | } |
254 | | |
255 | 23.2M | if (y == 2014) { |
256 | 216k | if ( // Mahashivratri |
257 | 216k | (d == 27 && m == February) |
258 | | // Holi |
259 | 215k | || (d == 17 && m == March) |
260 | | // Ram Navmi |
261 | 214k | || (d == 8 && m == April) |
262 | | // Ramzan Id |
263 | 214k | || (d == 29 && m == July) |
264 | | // Ganesh Chaturthi |
265 | 213k | || (d == 29 && m == August) |
266 | | // Dasera |
267 | 212k | || (d == 3 && m == October) |
268 | | // Bakri Id |
269 | 211k | || (d == 6 && m == October) |
270 | | // Diwali - Balipratipada |
271 | 210k | || (d == 24 && m == October) |
272 | | // Moharram |
273 | 209k | || (d == 4 && m == November) |
274 | | // Gurunank Jayanti |
275 | 208k | || (d == 6 && m == November)) |
276 | 8.59k | return false; |
277 | 216k | } |
278 | | |
279 | 23.1M | if (y == 2019) { |
280 | 226k | if ( // Chatrapati Shivaji Jayanti |
281 | 226k | (d == 19 && m == February) |
282 | | // Mahashivratri |
283 | 225k | || (d == 4 && m == March) |
284 | | // Holi |
285 | 224k | || (d == 21 && m == March) |
286 | | // Annual Bank Closing |
287 | 224k | || (d == 1 && m == April) |
288 | | // Mahavir Jayanti |
289 | 223k | || (d == 17 && m == April) |
290 | | // Parliamentary Elections |
291 | 222k | || (d == 29 && m == April) |
292 | | // Ramzan Id |
293 | 221k | || (d == 05 && m == June) |
294 | | // Bakri Id |
295 | 220k | || (d == 12 && m == August) |
296 | | // Ganesh Chaturthi |
297 | 219k | || (d == 2 && m == September) |
298 | | // Moharram |
299 | 218k | || (d == 10 && m == September) |
300 | | // Dasera |
301 | 217k | || (d == 8 && m == October) |
302 | | // General Assembly Elections in Maharashtra |
303 | 216k | || (d == 21 && m == October) |
304 | | // Diwali - Balipratipada |
305 | 215k | || (d == 28 && m == October) |
306 | | // Gurunank Jayanti |
307 | 215k | || (d == 12 && m == November)) |
308 | 12.5k | return false; |
309 | 226k | } |
310 | | |
311 | 23.1M | if (y == 2020) { |
312 | 233k | if ( // Chatrapati Shivaji Jayanti |
313 | 233k | (d == 19 && m == February) |
314 | | // Mahashivratri |
315 | 232k | || (d == 21 && m == February) |
316 | | // Holi |
317 | 231k | || (d == 10 && m == March) |
318 | | // Gudi Padwa |
319 | 230k | || (d == 25 && m == March) |
320 | | // Annual Bank Closing |
321 | 229k | || (d == 1 && m == April) |
322 | | // Ram Navami |
323 | 228k | || (d == 2 && m == April) |
324 | | // Mahavir Jayanti |
325 | 227k | || (d == 6 && m == April) |
326 | | // Buddha Pournima |
327 | 226k | || (d == 7 && m == May) |
328 | | // Ramzan Id |
329 | 225k | || (d == 25 && m == May) |
330 | | // Id-E-Milad |
331 | 224k | || (d == 30 && m == October) |
332 | | // Diwali - Balipratipada |
333 | 223k | || (d == 16 && m == November) |
334 | | // Gurunank Jayanti |
335 | 222k | || (d == 30 && m == November)) |
336 | 11.0k | return false; |
337 | 233k | } |
338 | | |
339 | 23.1M | if (y == 2021) { |
340 | 238k | if ( // Chatrapati Shivaji Jayanti |
341 | 238k | (d == 19 && m == February) |
342 | | // Mahashivratri |
343 | 237k | || (d == 11 && m == March) |
344 | | // Holi |
345 | 236k | || (d == 29 && m == March) |
346 | | // Gudi Padwa |
347 | 235k | || (d == 13 && m == April) |
348 | | // Mahavir Jayanti |
349 | 234k | || (d == 14 && m == April) |
350 | | // Ram Navami |
351 | 234k | || (d == 21 && m == April) |
352 | | // Buddha Pournima |
353 | 233k | || (d == 26 && m == May) |
354 | | // Bakri Id |
355 | 232k | || (d == 21 && m == July) |
356 | | // Ganesh Chaturthi |
357 | 231k | || (d == 10 && m == September) |
358 | | // Dasera |
359 | 231k | || (d == 15 && m == October) |
360 | | // Id-E-Milad |
361 | 230k | || (d == 19 && m == October) |
362 | | // Diwali - Balipratipada |
363 | 229k | || (d == 5 && m == November) |
364 | | // Gurunank Jayanti |
365 | 228k | || (d == 19 && m == November)) |
366 | 11.2k | return false; |
367 | 238k | } |
368 | | |
369 | 23.1M | if (y == 2022) { |
370 | 243k | if ( // Mahashivratri |
371 | 243k | (d == 1 && m == March) |
372 | | // Holi |
373 | 242k | || (d == 18 && m == March) |
374 | | // Ramzan Id |
375 | 241k | || (d == 3 && m == May) |
376 | | // Buddha Pournima |
377 | 240k | || (d == 16 && m == May) |
378 | | // Ganesh Chaturthi |
379 | 239k | || (d == 31 && m == August) |
380 | | // Dasera |
381 | 238k | || (d == 5 && m == October) |
382 | | // Diwali - Balipratipada |
383 | 237k | || (d == 26 && m == October) |
384 | | // Gurunank Jayanti |
385 | 236k | || (d == 8 && m == November)) |
386 | 7.69k | return false; |
387 | 243k | } |
388 | | |
389 | 23.1M | if (y == 2023) { |
390 | 244k | if ( |
391 | | // Holi |
392 | 244k | (d == 7 && m == March) |
393 | | // Gudi Padwa |
394 | 243k | || (d == 22 && m == March) |
395 | | // Ram Navami |
396 | 242k | || (d == 30 && m == March) |
397 | | // Mahavir Jayanti |
398 | 241k | || (d == 4 && m == April) |
399 | | // Buddha Pournima |
400 | 240k | || (d == 5 && m == May) |
401 | | // Bakri Id |
402 | 239k | || (d == 29 && m == June) |
403 | | // Parsi New year |
404 | 238k | || (d == 16 && m == August) |
405 | | // Ganesh Chaturthi |
406 | 237k | || (d == 19 && m == September) |
407 | | // Id-E-Milad (was moved to Friday 29th) |
408 | 236k | || (d == 29 && m == September) |
409 | | // Dasera |
410 | 235k | || (d == 24 && m == October) |
411 | | // Diwali - Balipratipada |
412 | 234k | || (d == 14 && m == November) |
413 | | // Gurunank Jayanti |
414 | 233k | || (d == 27 && m == November)) |
415 | 11.6k | return false; |
416 | 244k | } |
417 | | |
418 | 23.1M | if (y == 2024) { |
419 | 246k | if ( // Special holiday |
420 | 246k | (d == 22 && m == January) |
421 | | // Chatrapati Shivaji Jayanti |
422 | 245k | || (d == 19 && m == February) |
423 | | // Mahashivratri |
424 | 244k | || (d == 8 && m == March) |
425 | | // Holi |
426 | 243k | || (d == 25 && m == March) |
427 | | // Annual Bank Closing |
428 | 242k | || (d == 1 && m == April) |
429 | | // Gudi Padwa |
430 | 241k | || (d == 9 && m == April) |
431 | | // Id-Ul-Fitr (Ramadan Eid) |
432 | 240k | || (d == 11 && m == April) |
433 | | // Ram Navami |
434 | 239k | || (d == 17 && m == April) |
435 | | // Mahavir Jayanti |
436 | 238k | || (d == 21 && m == April) |
437 | | // General Parliamentary Elections |
438 | 238k | || (d == 20 && m == May) |
439 | | // Buddha Pournima |
440 | 237k | || (d == 23 && m == May) |
441 | | // Bakri Eid |
442 | 236k | || (d == 17 && m == June) |
443 | | // Moharram |
444 | 235k | || (d == 17 && m == July) |
445 | | // Eid-E-Milad (estimated Sunday 15th or Monday 16th) |
446 | 234k | || (d == 16 && m == September) |
447 | | // Diwali-Laxmi Pujan |
448 | 233k | || (d == 1 && m == November) |
449 | | // Gurunank Jayanti |
450 | 232k | || (d == 15 && m == November)) |
451 | 14.6k | return false; |
452 | 246k | } |
453 | | |
454 | 23.1M | if (y == 2025) { |
455 | 243k | if ( // Chatrapati Shivaji Jayanti |
456 | 243k | (d == 19 && m == February) |
457 | | // Mahashivratri |
458 | 242k | || (d == 26 && m == February) |
459 | | // Holi |
460 | 241k | || (d == 14 && m == March) |
461 | | // Ramzan Id (estimated Sunday 30th or Monday 31st) |
462 | 240k | || (d == 31 && m == March) |
463 | | // Mahavir Jayanti |
464 | 239k | || (d == 10 && m == April) |
465 | | // Buddha Pournima |
466 | 238k | || (d == 12 && m == May) |
467 | | // Id-E-Milad (estimated Thursday 4th or Friday 5th) |
468 | 237k | || (d == 5 && m == September) |
469 | | // Diwali - Balipratipada |
470 | 236k | || (d == 22 && m == October) |
471 | | // Gurunank Jayanti |
472 | 235k | || (d == 5 && m == November)) |
473 | 8.69k | return false; |
474 | 243k | } |
475 | | |
476 | 23.1M | if (y == 2026) { |
477 | 238k | if ( // Municipal Corporation Election - Maharashtra |
478 | 238k | (d == 15 && m == January) |
479 | | // Chatrapati Shivaji Jayanti |
480 | 237k | || (d == 19 && m == February) |
481 | | // Holi |
482 | 236k | || (d == 3 && m == March) |
483 | | // Gudi Padwa |
484 | 235k | || (d == 19 && m == March) |
485 | | // Ram Navami |
486 | 234k | || (d == 26 && m == March) |
487 | | // Mahavir Jayanti |
488 | 234k | || (d == 31 && m == March) |
489 | | // Annual Bank Closing |
490 | 233k | || (d == 1 && m == April) |
491 | | // Bakri Id |
492 | 232k | || (d == 28 && m == May) |
493 | | // Moharram |
494 | 231k | || (d == 26 && m == June) |
495 | | // Id-E-Milad |
496 | 230k | || (d == 26 && m == August) |
497 | | // Ganesh Chaturthi |
498 | 229k | || (d == 14 && m == September) |
499 | | // Dussehra |
500 | 228k | || (d == 20 && m == October) |
501 | | // Diwali - Balipratipada |
502 | 227k | || (d == 10 && m == November) |
503 | | // Gurunank Jayanti |
504 | 226k | || (d == 24 && m == November)) |
505 | 13.0k | return false; |
506 | 238k | } |
507 | | |
508 | 23.1M | return true; |
509 | 23.1M | } |
510 | | |
511 | | } |