/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 | 0 | India::India(Market) { |
26 | | // all calendar instances share the same implementation instance |
27 | 0 | static ext::shared_ptr<Calendar::Impl> impl(new India::NseImpl); |
28 | 0 | impl_ = impl; |
29 | 0 | } |
30 | | |
31 | 0 | bool India::NseImpl::isBusinessDay(const Date& date) const { |
32 | 0 | Weekday w = date.weekday(); |
33 | 0 | Day d = date.dayOfMonth(); |
34 | 0 | Month m = date.month(); |
35 | 0 | Year y = date.year(); |
36 | 0 | Day dd = date.dayOfYear(); |
37 | 0 | Day em = easterMonday(y); |
38 | |
|
39 | 0 | if (isWeekend(w) |
40 | | // Republic Day |
41 | 0 | || (d == 26 && m == January) |
42 | | // Good Friday |
43 | 0 | || (dd == em-3) |
44 | | // Ambedkar Jayanti |
45 | 0 | || (d == 14 && m == April) |
46 | | // May Day |
47 | 0 | || (d == 1 && m == May) |
48 | | // Independence Day |
49 | 0 | || (d == 15 && m == August) |
50 | | // Gandhi Jayanti |
51 | 0 | || (d == 2 && m == October) |
52 | | // Christmas |
53 | 0 | || (d == 25 && m == December) |
54 | 0 | ) |
55 | 0 | return false; |
56 | | |
57 | 0 | if (y == 2005) { |
58 | | // Moharram, Holi, Maharashtra Day, and Ramzan Id fall |
59 | | // on Saturday or Sunday in 2005 |
60 | 0 | if (// Bakri Id |
61 | 0 | (d == 21 && m == January) |
62 | | // Ganesh Chaturthi |
63 | 0 | || (d == 7 && m == September) |
64 | | // Dasara |
65 | 0 | || (d == 12 && m == October) |
66 | | // Laxmi Puja |
67 | 0 | || (d == 1 && m == November) |
68 | | // Bhaubeej |
69 | 0 | || (d == 3 && m == November) |
70 | | // Guru Nanak Jayanti |
71 | 0 | || (d == 15 && m == November) |
72 | 0 | ) |
73 | 0 | return false; |
74 | 0 | } |
75 | | |
76 | 0 | if (y == 2006) { |
77 | 0 | if (// Bakri Id |
78 | 0 | (d == 11 && m == January) |
79 | | // Moharram |
80 | 0 | || (d == 9 && m == February) |
81 | | // Holi |
82 | 0 | || (d == 15 && m == March) |
83 | | // Ram Navami |
84 | 0 | || (d == 6 && m == April) |
85 | | // Mahavir Jayanti |
86 | 0 | || (d == 11 && m == April) |
87 | | // Maharashtra Day |
88 | 0 | || (d == 1 && m == May) |
89 | | // Bhaubeej |
90 | 0 | || (d == 24 && m == October) |
91 | | // Ramzan Id |
92 | 0 | || (d == 25 && m == October) |
93 | 0 | ) |
94 | 0 | return false; |
95 | 0 | } |
96 | | |
97 | 0 | if (y == 2007) { |
98 | 0 | if (// Bakri Id |
99 | 0 | (d == 1 && m == January) |
100 | | // Moharram |
101 | 0 | || (d == 30 && m == January) |
102 | | // Mahashivratri |
103 | 0 | || (d == 16 && m == February) |
104 | | // Ram Navami |
105 | 0 | || (d == 27 && m == March) |
106 | | // Maharashtra Day |
107 | 0 | || (d == 1 && m == May) |
108 | | // Buddha Pournima |
109 | 0 | || (d == 2 && m == May) |
110 | | // Laxmi Puja |
111 | 0 | || (d == 9 && m == November) |
112 | | // Bakri Id (again) |
113 | 0 | || (d == 21 && m == December) |
114 | 0 | ) |
115 | 0 | return false; |
116 | 0 | } |
117 | | |
118 | 0 | if (y == 2008) { |
119 | 0 | if (// Mahashivratri |
120 | 0 | (d == 6 && m == March) |
121 | | // Id-E-Milad |
122 | 0 | || (d == 20 && m == March) |
123 | | // Mahavir Jayanti |
124 | 0 | || (d == 18 && m == April) |
125 | | // Maharashtra Day |
126 | 0 | || (d == 1 && m == May) |
127 | | // Buddha Pournima |
128 | 0 | || (d == 19 && m == May) |
129 | | // Ganesh Chaturthi |
130 | 0 | || (d == 3 && m == September) |
131 | | // Ramzan Id |
132 | 0 | || (d == 2 && m == October) |
133 | | // Dasara |
134 | 0 | || (d == 9 && m == October) |
135 | | // Laxmi Puja |
136 | 0 | || (d == 28 && m == October) |
137 | | // Bhau bhij |
138 | 0 | || (d == 30 && m == October) |
139 | | // Gurunanak Jayanti |
140 | 0 | || (d == 13 && m == November) |
141 | | // Bakri Id |
142 | 0 | || (d == 9 && m == December) |
143 | 0 | ) |
144 | 0 | return false; |
145 | 0 | } |
146 | | |
147 | 0 | if (y == 2009) { |
148 | 0 | if (// Moharram |
149 | 0 | (d == 8 && m == January) |
150 | | // Mahashivratri |
151 | 0 | || (d == 23 && m == February) |
152 | | // Id-E-Milad |
153 | 0 | || (d == 10 && m == March) |
154 | | // Holi |
155 | 0 | || (d == 11 && m == March) |
156 | | // Ram Navmi |
157 | 0 | || (d == 3 && m == April) |
158 | | // Mahavir Jayanti |
159 | 0 | || (d == 7 && m == April) |
160 | | // Maharashtra Day |
161 | 0 | || (d == 1 && m == May) |
162 | | // Ramzan Id |
163 | 0 | || (d == 21 && m == September) |
164 | | // Dasara |
165 | 0 | || (d == 28 && m == September) |
166 | | // Bhau Bhij |
167 | 0 | || (d == 19 && m == October) |
168 | | // Gurunanak Jayanti |
169 | 0 | || (d == 2 && m == November) |
170 | | // Moharram (again) |
171 | 0 | || (d == 28 && m == December) |
172 | 0 | ) |
173 | 0 | return false; |
174 | 0 | } |
175 | | |
176 | 0 | if (y == 2010) { |
177 | 0 | if (// New Year's Day |
178 | 0 | (d == 1 && m == January) |
179 | | // Mahashivratri |
180 | 0 | || (d == 12 && m == February) |
181 | | // Holi |
182 | 0 | || (d == 1 && m == March) |
183 | | // Ram Navmi |
184 | 0 | || (d == 24 && m == March) |
185 | | // Ramzan Id |
186 | 0 | || (d == 10 && m == September) |
187 | | // Laxmi Puja |
188 | 0 | || (d == 5 && m == November) |
189 | | // Bakri Id |
190 | 0 | || (d == 17 && m == November) |
191 | | // Moharram |
192 | 0 | || (d == 17 && m == December) |
193 | 0 | ) |
194 | 0 | return false; |
195 | 0 | } |
196 | | |
197 | 0 | if (y == 2011) { |
198 | 0 | if (// Mahashivratri |
199 | 0 | (d == 2 && m == March) |
200 | | // Ram Navmi |
201 | 0 | || (d == 12 && m == April) |
202 | | // Ramzan Id |
203 | 0 | || (d == 31 && m == August) |
204 | | // Ganesh Chaturthi |
205 | 0 | || (d == 1 && m == September) |
206 | | // Dasara |
207 | 0 | || (d == 6 && m == October) |
208 | | // Laxmi Puja |
209 | 0 | || (d == 26 && m == October) |
210 | | // Diwali - Balipratipada |
211 | 0 | || (d == 27 && m == October) |
212 | | // Bakri Id |
213 | 0 | || (d == 7 && m == November) |
214 | | // Gurunanak Jayanti |
215 | 0 | || (d == 10 && m == November) |
216 | | // Moharram |
217 | 0 | || (d == 6 && m == December) |
218 | 0 | ) |
219 | 0 | return false; |
220 | 0 | } |
221 | | |
222 | 0 | if (y == 2012) { |
223 | 0 | if (// Mahashivratri |
224 | 0 | (d == 20 && m == February) |
225 | | // Holi |
226 | 0 | || (d == 8 && m == March) |
227 | | // Mahavir Jayanti |
228 | 0 | || (d == 5 && m == April) |
229 | | // Ramzan Id |
230 | 0 | || (d == 20 && m == August) |
231 | | // Ganesh Chaturthi |
232 | 0 | || (d == 19 && m == September) |
233 | | // Dasara |
234 | 0 | || (d == 24 && m == October) |
235 | | // Diwali - Balipratipada |
236 | 0 | || (d == 14 && m == November) |
237 | | // Gurunanak Jayanti |
238 | 0 | || (d == 28 && m == November) |
239 | 0 | ) |
240 | 0 | return false; |
241 | 0 | } |
242 | | |
243 | 0 | if (y == 2013) { |
244 | 0 | if (// Holi |
245 | 0 | (d == 27 && m == March) |
246 | | // Ram Navmi |
247 | 0 | || (d == 19 && m == April) |
248 | | // Mahavir Jayanti |
249 | 0 | || (d == 24 && m == April) |
250 | | // Ramzan Id |
251 | 0 | || (d == 9 && m == August) |
252 | | // Ganesh Chaturthi |
253 | 0 | || (d == 9 && m == September) |
254 | | // Bakri Id |
255 | 0 | || (d == 16 && m == October) |
256 | | // Diwali - Balipratipada |
257 | 0 | || (d == 4 && m == November) |
258 | | // Moharram |
259 | 0 | || (d == 14 && m == November) |
260 | 0 | ) |
261 | 0 | return false; |
262 | 0 | } |
263 | | |
264 | 0 | if (y == 2014) { |
265 | 0 | if (// Mahashivratri |
266 | 0 | (d == 27 && m == February) |
267 | | // Holi |
268 | 0 | || (d == 17 && m == March) |
269 | | // Ram Navmi |
270 | 0 | || (d == 8 && m == April) |
271 | | // Ramzan Id |
272 | 0 | || (d == 29 && m == July) |
273 | | // Ganesh Chaturthi |
274 | 0 | || (d == 29 && m == August) |
275 | | // Dasera |
276 | 0 | || (d == 3 && m == October) |
277 | | // Bakri Id |
278 | 0 | || (d == 6 && m == October) |
279 | | // Diwali - Balipratipada |
280 | 0 | || (d == 24 && m == October) |
281 | | // Moharram |
282 | 0 | || (d == 4 && m == November) |
283 | | // Gurunank Jayanti |
284 | 0 | || (d == 6 && m == November) |
285 | 0 | ) |
286 | 0 | return false; |
287 | 0 | } |
288 | | |
289 | 0 | if (y == 2019) { |
290 | 0 | if (// Chatrapati Shivaji Jayanti |
291 | 0 | (d == 19 && m == February) |
292 | | // Mahashivratri |
293 | 0 | || (d == 4 && m == March) |
294 | | // Holi |
295 | 0 | || (d == 21 && m == March) |
296 | | // Annual Bank Closing |
297 | 0 | || (d == 1 && m == April) |
298 | | // Mahavir Jayanti |
299 | 0 | || (d == 17 && m == April) |
300 | | // Parliamentary Elections |
301 | 0 | || (d == 29 && m == April) |
302 | | // Ramzan Id |
303 | 0 | || (d == 05 && m == June) |
304 | | // Bakri Id |
305 | 0 | || (d == 12 && m == August) |
306 | | // Ganesh Chaturthi |
307 | 0 | || (d == 2 && m == September) |
308 | | // Moharram |
309 | 0 | || (d == 10 && m == September) |
310 | | // Dasera |
311 | 0 | || (d == 8 && m == October) |
312 | | // General Assembly Elections in Maharashtra |
313 | 0 | || (d == 21 && m == October) |
314 | | // Diwali - Balipratipada |
315 | 0 | || (d == 28 && m == October) |
316 | | // Gurunank Jayanti |
317 | 0 | || (d == 12 && m == November) |
318 | 0 | ) |
319 | 0 | return false; |
320 | 0 | } |
321 | | |
322 | 0 | if (y == 2020) { |
323 | 0 | if (// Chatrapati Shivaji Jayanti |
324 | 0 | (d == 19 && m == February) |
325 | | // Mahashivratri |
326 | 0 | || (d == 21 && m == February) |
327 | | // Holi |
328 | 0 | || (d == 10 && m == March) |
329 | | // Gudi Padwa |
330 | 0 | || (d == 25 && m == March) |
331 | | // Annual Bank Closing |
332 | 0 | || (d == 1 && m == April) |
333 | | // Ram Navami |
334 | 0 | || (d == 2 && m == April) |
335 | | // Mahavir Jayanti |
336 | 0 | || (d == 6 && m == April) |
337 | | // Buddha Pournima |
338 | 0 | || (d == 7 && m == May) |
339 | | // Ramzan Id |
340 | 0 | || (d == 25 && m == May) |
341 | | // Id-E-Milad |
342 | 0 | || (d == 30 && m == October) |
343 | | // Diwali - Balipratipada |
344 | 0 | || (d == 16 && m == November) |
345 | | // Gurunank Jayanti |
346 | 0 | || (d == 30 && m == November) |
347 | 0 | ) |
348 | 0 | return false; |
349 | 0 | } |
350 | | |
351 | 0 | if (y == 2021) { |
352 | 0 | if (// Chatrapati Shivaji Jayanti |
353 | 0 | (d == 19 && m == February) |
354 | | // Mahashivratri |
355 | 0 | || (d == 11 && m == March) |
356 | | // Holi |
357 | 0 | || (d == 29 && m == March) |
358 | | // Gudi Padwa |
359 | 0 | || (d == 13 && m == April) |
360 | | // Mahavir Jayanti |
361 | 0 | || (d == 14 && m == April) |
362 | | // Ram Navami |
363 | 0 | || (d == 21 && m == April) |
364 | | // Buddha Pournima |
365 | 0 | || (d == 26 && m == May) |
366 | | // Bakri Id |
367 | 0 | || (d == 21 && m == July) |
368 | | // Ganesh Chaturthi |
369 | 0 | || (d == 10 && m == September) |
370 | | // Dasera |
371 | 0 | || (d == 15 && m == October) |
372 | | // Id-E-Milad |
373 | 0 | || (d == 19 && m == October) |
374 | | // Diwali - Balipratipada |
375 | 0 | || (d == 5 && m == November) |
376 | | // Gurunank Jayanti |
377 | 0 | || (d == 19 && m == November)) |
378 | 0 | return false; |
379 | 0 | } |
380 | | |
381 | 0 | if (y == 2022) { |
382 | 0 | if ( // Mahashivratri |
383 | 0 | (d == 1 && m == March) |
384 | | // Holi |
385 | 0 | || (d == 18 && m == March) |
386 | | // Ramzan Id |
387 | 0 | || (d == 3 && m == May) |
388 | | // Buddha Pournima |
389 | 0 | || (d == 16 && m == May) |
390 | | // Ganesh Chaturthi |
391 | 0 | || (d == 31 && m == August) |
392 | | // Dasera |
393 | 0 | || (d == 5 && m == October) |
394 | | // Diwali - Balipratipada |
395 | 0 | || (d == 26 && m == October) |
396 | | // Gurunank Jayanti |
397 | 0 | || (d == 8 && m == November)) |
398 | 0 | return false; |
399 | 0 | } |
400 | | |
401 | 0 | if (y == 2023) { |
402 | 0 | if ( |
403 | | // Holi |
404 | 0 | (d == 7 && m == March) |
405 | | // Gudi Padwa |
406 | 0 | || (d == 22 && m == March) |
407 | | // Ram Navami |
408 | 0 | || (d == 30 && m == March) |
409 | | // Mahavir Jayanti |
410 | 0 | || (d == 4 && m == April) |
411 | | // Buddha Pournima |
412 | 0 | || (d == 5 && m == May) |
413 | | // Bakri Id |
414 | 0 | || (d == 29 && m == June) |
415 | | // Parsi New year |
416 | 0 | || (d == 16 && m == August) |
417 | | // Ganesh Chaturthi |
418 | 0 | || (d == 19 && m == September) |
419 | | // Id-E-Milad (was moved to Friday 29th) |
420 | 0 | || (d == 29 && m == September) |
421 | | // Dasera |
422 | 0 | || (d == 24 && m == October) |
423 | | // Diwali - Balipratipada |
424 | 0 | || (d == 14 && m == November) |
425 | | // Gurunank Jayanti |
426 | 0 | || (d == 27 && m == November)) |
427 | 0 | return false; |
428 | 0 | } |
429 | | |
430 | 0 | if (y == 2024) { |
431 | 0 | if ( // Special holiday |
432 | 0 | (d == 22 && m == January) |
433 | | // Chatrapati Shivaji Jayanti |
434 | 0 | || (d == 19 && m == February) |
435 | | // Mahashivratri |
436 | 0 | || (d == 8 && m == March) |
437 | | // Holi |
438 | 0 | || (d == 25 && m == March) |
439 | | // Annual Bank Closing |
440 | 0 | || (d == 1 && m == April) |
441 | | // Gudi Padwa |
442 | 0 | || (d == 9 && m == April) |
443 | | // Id-Ul-Fitr (Ramadan Eid) |
444 | 0 | || (d == 11 && m == April) |
445 | | // Ram Navami |
446 | 0 | || (d == 17 && m == April) |
447 | | // Mahavir Jayanti |
448 | 0 | || (d == 21 && m == April) |
449 | | // General Parliamentary Elections |
450 | 0 | || (d == 20 && m == May) |
451 | | // Buddha Pournima |
452 | 0 | || (d == 23 && m == May) |
453 | | // Bakri Eid |
454 | 0 | || (d == 17 && m == June) |
455 | | // Moharram |
456 | 0 | || (d == 17 && m == July) |
457 | | // Eid-E-Milad (estimated Sunday 15th or Monday 16th) |
458 | 0 | || (d == 16 && m == September) |
459 | | // Diwali-Laxmi Pujan |
460 | 0 | || (d == 1 && m == November) |
461 | | // Gurunank Jayanti |
462 | 0 | || (d == 15 && m == November)) |
463 | 0 | return false; |
464 | 0 | } |
465 | | |
466 | 0 | if (y == 2025) { |
467 | 0 | if ( // Chatrapati Shivaji Jayanti |
468 | 0 | (d == 19 && m == February) |
469 | | // Mahashivratri |
470 | 0 | || (d == 26 && m == February) |
471 | | // Holi |
472 | 0 | || (d == 14 && m == March) |
473 | | // Ramzan Id (estimated Sunday 30th or Monday 31st) |
474 | 0 | || (d == 31 && m == March) |
475 | | // Mahavir Jayanti |
476 | 0 | || (d == 10 && m == April) |
477 | | // Buddha Pournima |
478 | 0 | || (d == 12 && m == May) |
479 | | // Id-E-Milad (estimated Thursday 4th or Friday 5th) |
480 | 0 | || (d == 5 && m == September) |
481 | | // Diwali - Balipratipada |
482 | 0 | || (d == 22 && m == October) |
483 | | // Gurunank Jayanti |
484 | 0 | || (d == 5 && m == November)) |
485 | 0 | return false; |
486 | 0 | } |
487 | | |
488 | 0 | return true; |
489 | 0 | } |
490 | | |
491 | | } |
492 | | |