-
Notifications
You must be signed in to change notification settings - Fork 0
/
frequency.jl
126 lines (97 loc) · 1.94 KB
/
frequency.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# supertype
abstract type Frequency end
"""
NoFrequency
Null frequency.
"""
struct NoFrequency <: Frequency end
"""
Once
Only once, e.g., a zero-coupon.
"""
struct Once <: Frequency end
"""
Annual
Once a year.
"""
struct Annual <: Frequency end
"""
Semiannual
Twice a year.
"""
struct Semiannual <: Frequency end
"""
EveryFourthMonth
Every four months.
"""
struct EveryFourthMonth <: Frequency end
"""
Quarterly
Every three months.
"""
struct Quarterly <: Frequency end
"""
Bimonthly
Every two months.
"""
struct Bimonthly <: Frequency end
"""
Monthly
Once a month.
"""
struct Monthly <: Frequency end
"""
EveryFourthWeek
Every four weeks.
"""
struct EveryFourthWeek <: Frequency end
"""
Biweekly
Every two weeks.
"""
struct Biweekly <: Frequency end
"""
Weekly
Once a week.
"""
struct Weekly <: Frequency end
"""
Daily
Once a day.
"""
struct Daily <: Frequency end
# FIXME: yo a esta la llamaria UnknowFrequency
"""
OtherFrequency
Some other unknown frequency.
"""
struct OtherFrequency <: Frequency end
# struct OtherFrequency <: Frequency
# value::Int64
# OtherFrequency(value = 999) = new(value)
# end
# struct OtherFrequency{T<:DatePeriod} <: Frequency
# period::T
# end
# OtherFrequency(period::T = Day(999)) where {T<:DatePeriod} = OtherFrequency{T}(period)
const frequencies = (
(:NoFrequency, "No-Frequency", -1),
(:Once, "Once", 0),
(:Annual, "Annual", 1),
(:Semiannual, "Semiannual", 2),
(:EveryFourthMonth, "Every-fourth-month", 3),
(:Quarterly, "Quarterly", 4),
(:Bimonthly, "Bimonthly", 6),
(:Monthly, "Monthly", 12),
(:EveryFourthWeek, "Every-fourth-week", 13),
(:Biweekly, "Biweekly", 26),
(:Weekly, "Weekly", 52),
(:Daily, "Daily", 365),
(:OtherFrequency, "Other-frequency", 999)
)
for (x, y, z) in frequencies
@eval Base.show(io::IO, ::$x) = print($y)
@eval value(::$x) = $z
end
# default value as -1
value(::Frequency) = -1