QuantLib: a free/open-source library for quantitative finance
Fully annotated sources - version 1.32
Loading...
Searching...
No Matches
taiwan.cpp
1/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3/*
4 Copyright (C) 2004 FIMAT Group
5 Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 StatPro Italia srl
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 <http://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/taiwan.hpp>
22
23namespace QuantLib {
24
26 // all calendar instances share the same implementation instance
27 static ext::shared_ptr<Calendar::Impl> impl(new Taiwan::TsecImpl);
28 impl_ = impl;
29 }
30
32 return w == Saturday || w == Sunday;
33 }
34
35 bool Taiwan::TsecImpl::isBusinessDay(const Date& date) const {
36 Weekday w = date.weekday();
37 Day d = date.dayOfMonth();
38 Month m = date.month();
39 Year y = date.year();
40
41 if (isWeekend(w)
42 // New Year's Day
43 || (d == 1 && m == January)
44 // Peace Memorial Day
45 || (d == 28 && m == February)
46 // Labor Day
47 || (d == 1 && m == May)
48 // Double Tenth
49 || (d == 10 && m == October)
50 )
51 return false;
52
53 if (y == 2002) {
54 // Dragon Boat Festival and Moon Festival fall on Saturday
55 if (// Chinese Lunar New Year
56 (d >= 9 && d <= 17 && m == February)
57 // Tomb Sweeping Day
58 || (d == 5 && m == April)
59 )
60 return false;
61 }
62
63 if (y == 2003) {
64 // Tomb Sweeping Day falls on Saturday
65 if (// Chinese Lunar New Year
66 ((d >= 31 && m == January) || (d <= 5 && m == February))
67 // Dragon Boat Festival
68 || (d == 4 && m == June)
69 // Moon Festival
70 || (d == 11 && m == September)
71 )
72 return false;
73 }
74
75 if (y == 2004) {
76 // Tomb Sweeping Day falls on Sunday
77 if (// Chinese Lunar New Year
78 (d >= 21 && d <= 26 && m == January)
79 // Dragon Boat Festival
80 || (d == 22 && m == June)
81 // Moon Festival
82 || (d == 28 && m == September)
83 )
84 return false;
85 }
86
87 if (y == 2005) {
88 // Dragon Boat and Moon Festival fall on Saturday or Sunday
89 if (// Chinese Lunar New Year
90 (d >= 6 && d <= 13 && m == February)
91 // Tomb Sweeping Day
92 || (d == 5 && m == April)
93 // make up for Labor Day, not seen in other years
94 || (d == 2 && m == May)
95 )
96 return false;
97 }
98
99 if (y == 2006) {
100 // Dragon Boat and Moon Festival fall on Saturday or Sunday
101 if (// Chinese Lunar New Year
102 ((d >= 28 && m == January) || (d <= 5 && m == February))
103 // Tomb Sweeping Day
104 || (d == 5 && m == April)
105 // Dragon Boat Festival
106 || (d == 31 && m == May)
107 // Moon Festival
108 || (d == 6 && m == October)
109 )
110 return false;
111 }
112
113 if (y == 2007) {
114 if (// Chinese Lunar New Year
115 (d >= 17 && d <= 25 && m == February)
116 // Tomb Sweeping Day
117 || (d == 5 && m == April)
118 // adjusted holidays
119 || (d == 6 && m == April)
120 || (d == 18 && m == June)
121 // Dragon Boat Festival
122 || (d == 19 && m == June)
123 // adjusted holiday
124 || (d == 24 && m == September)
125 // Moon Festival
126 || (d == 25 && m == September)
127 )
128 return false;
129 }
130
131 if (y == 2008) {
132 if (// Chinese Lunar New Year
133 (d >= 4 && d <= 11 && m == February)
134 // Tomb Sweeping Day
135 || (d == 4 && m == April)
136 )
137 return false;
138 }
139
140 if (y == 2009) {
141 if (// Public holiday
142 (d == 2 && m == January)
143 // Chinese Lunar New Year
144 || (d >= 24 && m == January)
145 // Tomb Sweeping Day
146 || (d == 4 && m == April)
147 // Dragon Boat Festival
148 || ((d == 28 || d == 29) && m == May)
149 // Moon Festival
150 || (d == 3 && m == October)
151 )
152 return false;
153 }
154
155 if (y == 2010) {
156 if (// Chinese Lunar New Year
157 (d >= 13 && d <= 21 && m == January)
158 // Tomb Sweeping Day
159 || (d == 5 && m == April)
160 // Dragon Boat Festival
161 || (d == 16 && m == May)
162 // Moon Festival
163 || (d == 22 && m == September)
164 )
165 return false;
166 }
167
168 if (y == 2011) {
169 if (// Spring Festival
170 (d >= 2 && d <= 7 && m == February)
171 // Children's Day
172 || (d == 4 && m == April)
173 // Tomb Sweeping Day
174 || (d == 5 && m == April)
175 // Labour Day
176 || (d == 2 && m == May)
177 // Dragon Boat Festival
178 || (d == 6 && m == June)
179 // Mid-Autumn Festival
180 || (d == 12 && m == September)
181 )
182 return false;
183 }
184
185 if (y == 2012) {
186 if (// Spring Festival
187 (d >= 23 && d <= 27 && m == January)
188 // Peace Memorial Day
189 || (d == 27 && m == February)
190 // Children's Day
191 // Tomb Sweeping Day
192 || (d == 4 && m == April)
193 // Labour Day
194 || (d == 1 && m == May)
195 // Dragon Boat Festival
196 || (d == 23 && m == June)
197 // Mid-Autumn Festival
198 || (d == 30 && m == September)
199 // Memorial Day:
200 // Founding of the Republic of China
201 || (d == 31 && m == December)
202 )
203 return false;
204 }
205
206 if (y == 2013) {
207 if (// Spring Festival
208 (d >= 10 && d <= 15 && m == February)
209 // Children's Day
210 || (d == 4 && m == April)
211 // Tomb Sweeping Day
212 || (d == 5 && m == April)
213 // Labour Day
214 || (d == 1 && m == May)
215 // Dragon Boat Festival
216 || (d == 12 && m == June)
217 // Mid-Autumn Festival
218 || (d >= 19 && d <= 20 && m == September)
219 )
220 return false;
221 }
222
223 if (y == 2014) {
224 if (// Lunar New Year
225 (d >= 28 && d <= 30 && m == January)
226 // Spring Festival
227 || ((d == 31 && m == January) || (d <= 4 && m == February))
228 // Children's Day
229 || (d == 4 && m == April)
230 // Tomb Sweeping Day
231 || (d == 5 && m == April)
232 // Dragon Boat Festival
233 || (d == 2 && m == June)
234 // Mid-Autumn Festival
235 || (d == 8 && m == September)
236 )
237 return false;
238 }
239
240 if (y == 2015) {
241 if (// adjusted holidays
242 (d == 2 && m == January)
243 // Lunar New Year
244 || (d >= 18 && d <= 23 && m == February)
245 // adjusted holidays
246 || (d == 27 && m == February)
247 // adjusted holidays
248 || (d == 3 && m == April)
249 // adjusted holidays
250 || (d == 6 && m == April)
251 // adjusted holidays
252 || (d == 19 && m == June)
253 // adjusted holidays
254 || (d == 28 && m == September)
255 // adjusted holidays
256 || (d == 9 && m == October)
257 )
258 return false;
259 }
260
261 if (y == 2016) {
262 if (// Lunar New Year
263 (d >= 8 && d <= 12 && m == February)
264 // adjusted holidays
265 || (d == 29 && m == February)
266 // Children's Day
267 || (d == 4 && m == April)
268 // adjusted holidays
269 || (d == 5 && m == April)
270 // adjusted holidays
271 || (d == 2 && m == May)
272 // Dragon Boat Festival
273 || (d == 9 && m == June)
274 // adjusted holidays
275 || (d == 10 && m == June)
276 // Mid-Autumn Festival
277 || (d == 15 && m == September)
278 // adjusted holidays
279 || (d == 16 && m == September)
280 )
281 return false;
282 }
283
284 if (y == 2017) {
285 if (// adjusted holidays
286 (d == 2 && m == January)
287 // Lunar New Year
288 || ((d >= 27 && m == January) || (d == 1 && m == February))
289 // adjusted holidays
290 || (d == 27 && m == February)
291 // adjusted holidays
292 || (d == 3 && m == April)
293 // Children's Day
294 || (d == 4 && m == April)
295 // adjusted holidays
296 || (d == 29 && m == May)
297 // Dragon Boat Festival
298 || (d == 30 && m == May)
299 // Mid-Autumn Festival
300 || (d == 4 && m == October)
301 // adjusted holidays
302 || (d == 9 && m == October)
303 )
304 return false;
305 }
306
307 if (y == 2018) {
308 if (// Lunar New Year
309 (d >= 15 && d <= 20 && m == February)
310 // Children's Day
311 || (d == 4 && m == April)
312 // Tomb Sweeping Day
313 || (d == 5 && m == April)
314 // adjusted holidays
315 || (d == 6 && m == April)
316 // Dragon Boat Festival
317 || (d == 18 && m == June)
318 // Mid-Autumn Festival
319 || (d == 24 && m == September)
320 // adjusted holidays
321 || (d == 31 && m == December)
322 )
323 return false;
324 }
325
326 if (y == 2019) {
327 if (// Lunar New Year
328 (d >= 4 && d <= 8 && m == February)
329 // adjusted holidays
330 || (d == 1 && m == March)
331 // Children's Day
332 || (d == 4 && m == April)
333 // Tomb Sweeping Day
334 || (d == 5 && m == April)
335 // Dragon Boat Festival
336 || (d == 7 && m == June)
337 // Mid-Autumn Festival
338 || (d == 13 && m == September)
339 // adjusted holidays
340 || (d == 11 && m == October)
341 )
342 return false;
343 }
344
345 if (y == 2020) {
346 if (// adjusted holiday
347 (d == 23 && m == January)
348 // Lunar New Year
349 || (d >= 24 && d <= 29 && m == January)
350 // adjusted holiday
351 || (d == 2 && m == April)
352 // adjusted holiday
353 || (d == 3 && m == April)
354 // Dragon Boat Festival
355 || (d == 25 && m == June)
356 // adjusted holiday
357 || (d == 26 && m == June)
358 // Mid-Autumn Festival
359 || (d == 1 && m == October)
360 // adjusted holiday
361 || (d == 2 && m == October)
362 // adjusted holiday
363 || (d == 9 && m == October)
364 )
365 return false;
366 }
367
368 if (y == 2021) {
369 // Tomb Sweeping Day falls on Sunday
370 if (// adjusted holiday
371 (d == 10 && m == February)
372 // Lunar New Year
373 || (d >= 11 && d <= 16 && m == February)
374 // adjusted holiday
375 || (d == 1 && m == March)
376 // Children's Day
377 || (d == 2 && m == April)
378 // adjusted holiday
379 || (d == 5 && m == April)
380 // adjusted holiday
381 || (d == 30 && m == April)
382 // Dragon Boat Festival
383 || (d == 14 && m == June)
384 // adjusted holiday
385 || (d == 20 && m == September)
386 // Mid-Autumn Festival
387 || (d == 21 && m == September)
388 // adjusted holiday
389 || (d == 11 && m == October)
390 // adjusted holiday
391 || (d == 31 && m == December)
392 )
393 return false;
394 }
395
396 if (y == 2022) {
397 // Mid-Autumn Festival falls on Saturday
398 if ( // Lunar New Year
399 ((d == 31 && m == January) || (d <= 4 && m == February))
400 // Children's Day
401 || (d == 4 && m == April)
402 // Tomb Sweeping Day
403 || (d == 5 && m == April)
404 // adjusted holiday
405 || (d == 2 && m == May)
406 // Dragon Boat Festival
407 || (d == 3 && m == June)
408 // adjusted holiday
409 || (d == 9 && m == September)
410 )
411 return false;
412 }
413
414 if (y == 2023) {
415 if (// adjusted holiday
416 (d == 2 && m == January)
417 // adjusted holiday
418 || (d == 20 && m == January)
419 // Lunar New Year
420 || (d >= 21 && d <= 24 && m == January)
421 // adjusted holiday
422 || (d >= 25 && d <= 27 && m == January)
423 // adjusted holiday
424 || (d == 27 && m == February)
425 // adjusted holiday
426 || (d == 3 && m == April)
427 // Children's Day
428 || (d == 4 && m == April)
429 // Tomb Sweeping Day
430 || (d == 5 && m == April)
431 // Dragon Boat Festival
432 || (d == 22 && m == June)
433 // adjusted holiday
434 || (d == 23 && m == June)
435 // Mid-Autumn Festival
436 || (d == 29 && m == September)
437 // adjusted holiday
438 || (d == 9 && m == October)
439 )
440 return false;
441 }
442
443 return true;
444 }
445
446}
bool isWeekend(Weekday w) const
Definition: calendar.hpp:255
ext::shared_ptr< Impl > impl_
Definition: calendar.hpp:72
Concrete date class.
Definition: date.hpp:125
Month month() const
Definition: date.cpp:82
Year year() const
Definition: date.cpp:93
Day dayOfMonth() const
Definition: date.hpp:400
Weekday weekday() const
Definition: date.hpp:395
bool isBusinessDay(const Date &) const override
Definition: taiwan.cpp:35
bool isWeekend(Weekday) const override
Definition: taiwan.cpp:31
Taiwan(Market m=TSEC)
Definition: taiwan.cpp:25
Integer Year
Year number.
Definition: date.hpp:87
Integer Day
Day number.
Definition: date.hpp:53
Month
Month names.
Definition: date.hpp:57
@ December
Definition: date.hpp:68
@ January
Definition: date.hpp:57
@ May
Definition: date.hpp:61
@ March
Definition: date.hpp:59
@ February
Definition: date.hpp:58
@ April
Definition: date.hpp:60
@ October
Definition: date.hpp:66
@ June
Definition: date.hpp:62
@ September
Definition: date.hpp:65
@ Sunday
Definition: weekday.hpp:41
@ Saturday
Definition: weekday.hpp:47
Definition: any.hpp:35