@bilig/formula 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +16 -0
  3. package/dist/addressing.d.ts +66 -0
  4. package/dist/addressing.js +179 -0
  5. package/dist/addressing.js.map +1 -0
  6. package/dist/ast.d.ts +74 -0
  7. package/dist/ast.js +2 -0
  8. package/dist/ast.js.map +1 -0
  9. package/dist/binder.d.ts +13 -0
  10. package/dist/binder.js +1700 -0
  11. package/dist/binder.js.map +1 -0
  12. package/dist/builtin-capabilities.d.ts +19 -0
  13. package/dist/builtin-capabilities.js +861 -0
  14. package/dist/builtin-capabilities.js.map +1 -0
  15. package/dist/builtins/complex.d.ts +10 -0
  16. package/dist/builtins/complex.js +407 -0
  17. package/dist/builtins/complex.js.map +1 -0
  18. package/dist/builtins/convert.d.ts +3 -0
  19. package/dist/builtins/convert.js +362 -0
  20. package/dist/builtins/convert.js.map +1 -0
  21. package/dist/builtins/datetime.d.ts +23 -0
  22. package/dist/builtins/datetime.js +1096 -0
  23. package/dist/builtins/datetime.js.map +1 -0
  24. package/dist/builtins/distribution-builtins.d.ts +16 -0
  25. package/dist/builtins/distribution-builtins.js +517 -0
  26. package/dist/builtins/distribution-builtins.js.map +1 -0
  27. package/dist/builtins/distributions.d.ts +34 -0
  28. package/dist/builtins/distributions.js +722 -0
  29. package/dist/builtins/distributions.js.map +1 -0
  30. package/dist/builtins/financial-builtins.d.ts +16 -0
  31. package/dist/builtins/financial-builtins.js +324 -0
  32. package/dist/builtins/financial-builtins.js.map +1 -0
  33. package/dist/builtins/financial.d.ts +11 -0
  34. package/dist/builtins/financial.js +241 -0
  35. package/dist/builtins/financial.js.map +1 -0
  36. package/dist/builtins/fixed-income-builtins.d.ts +14 -0
  37. package/dist/builtins/fixed-income-builtins.js +598 -0
  38. package/dist/builtins/fixed-income-builtins.js.map +1 -0
  39. package/dist/builtins/fixed-income.d.ts +42 -0
  40. package/dist/builtins/fixed-income.js +668 -0
  41. package/dist/builtins/fixed-income.js.map +1 -0
  42. package/dist/builtins/formatting.d.ts +8 -0
  43. package/dist/builtins/formatting.js +53 -0
  44. package/dist/builtins/formatting.js.map +1 -0
  45. package/dist/builtins/logical.d.ts +4 -0
  46. package/dist/builtins/logical.js +258 -0
  47. package/dist/builtins/logical.js.map +1 -0
  48. package/dist/builtins/lookup-array-shape-builtins.d.ts +21 -0
  49. package/dist/builtins/lookup-array-shape-builtins.js +517 -0
  50. package/dist/builtins/lookup-array-shape-builtins.js.map +1 -0
  51. package/dist/builtins/lookup-criteria-builtins.d.ts +16 -0
  52. package/dist/builtins/lookup-criteria-builtins.js +216 -0
  53. package/dist/builtins/lookup-criteria-builtins.js.map +1 -0
  54. package/dist/builtins/lookup-database-builtins.d.ts +17 -0
  55. package/dist/builtins/lookup-database-builtins.js +294 -0
  56. package/dist/builtins/lookup-database-builtins.js.map +1 -0
  57. package/dist/builtins/lookup-financial-builtins.d.ts +11 -0
  58. package/dist/builtins/lookup-financial-builtins.js +291 -0
  59. package/dist/builtins/lookup-financial-builtins.js.map +1 -0
  60. package/dist/builtins/lookup-hypothesis-builtins.d.ts +11 -0
  61. package/dist/builtins/lookup-hypothesis-builtins.js +57 -0
  62. package/dist/builtins/lookup-hypothesis-builtins.js.map +1 -0
  63. package/dist/builtins/lookup-matrix-builtins.d.ts +17 -0
  64. package/dist/builtins/lookup-matrix-builtins.js +218 -0
  65. package/dist/builtins/lookup-matrix-builtins.js.map +1 -0
  66. package/dist/builtins/lookup-order-statistics-builtins.d.ts +18 -0
  67. package/dist/builtins/lookup-order-statistics-builtins.js +575 -0
  68. package/dist/builtins/lookup-order-statistics-builtins.js.map +1 -0
  69. package/dist/builtins/lookup-reference-builtins.d.ts +18 -0
  70. package/dist/builtins/lookup-reference-builtins.js +300 -0
  71. package/dist/builtins/lookup-reference-builtins.js.map +1 -0
  72. package/dist/builtins/lookup-regression-builtins.d.ts +12 -0
  73. package/dist/builtins/lookup-regression-builtins.js +511 -0
  74. package/dist/builtins/lookup-regression-builtins.js.map +1 -0
  75. package/dist/builtins/lookup-sort-filter-builtins.d.ts +20 -0
  76. package/dist/builtins/lookup-sort-filter-builtins.js +382 -0
  77. package/dist/builtins/lookup-sort-filter-builtins.js.map +1 -0
  78. package/dist/builtins/lookup.d.ts +13 -0
  79. package/dist/builtins/lookup.js +867 -0
  80. package/dist/builtins/lookup.js.map +1 -0
  81. package/dist/builtins/math-builtins.d.ts +31 -0
  82. package/dist/builtins/math-builtins.js +420 -0
  83. package/dist/builtins/math-builtins.js.map +1 -0
  84. package/dist/builtins/numeric.d.ts +30 -0
  85. package/dist/builtins/numeric.js +150 -0
  86. package/dist/builtins/numeric.js.map +1 -0
  87. package/dist/builtins/placeholder.d.ts +9 -0
  88. package/dist/builtins/placeholder.js +540 -0
  89. package/dist/builtins/placeholder.js.map +1 -0
  90. package/dist/builtins/radix.d.ts +12 -0
  91. package/dist/builtins/radix.js +220 -0
  92. package/dist/builtins/radix.js.map +1 -0
  93. package/dist/builtins/statistical-builtins.d.ts +13 -0
  94. package/dist/builtins/statistical-builtins.js +240 -0
  95. package/dist/builtins/statistical-builtins.js.map +1 -0
  96. package/dist/builtins/statistics.d.ts +8 -0
  97. package/dist/builtins/statistics.js +74 -0
  98. package/dist/builtins/statistics.js.map +1 -0
  99. package/dist/builtins/text.d.ts +5 -0
  100. package/dist/builtins/text.js +1879 -0
  101. package/dist/builtins/text.js.map +1 -0
  102. package/dist/builtins.d.ts +8 -0
  103. package/dist/builtins.js +695 -0
  104. package/dist/builtins.js.map +1 -0
  105. package/dist/compatibility.d.ts +25 -0
  106. package/dist/compatibility.js +498 -0
  107. package/dist/compatibility.js.map +1 -0
  108. package/dist/compiler.d.ts +29 -0
  109. package/dist/compiler.js +474 -0
  110. package/dist/compiler.js.map +1 -0
  111. package/dist/external-function-adapter.d.ts +32 -0
  112. package/dist/external-function-adapter.js +42 -0
  113. package/dist/external-function-adapter.js.map +1 -0
  114. package/dist/generated/formula-inventory.d.ts +6839 -0
  115. package/dist/generated/formula-inventory.js +7368 -0
  116. package/dist/generated/formula-inventory.js.map +1 -0
  117. package/dist/group-pivot-evaluator.d.ts +28 -0
  118. package/dist/group-pivot-evaluator.js +435 -0
  119. package/dist/group-pivot-evaluator.js.map +1 -0
  120. package/dist/index.d.ts +16 -0
  121. package/dist/index.js +17 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/js-evaluator.d.ts +107 -0
  124. package/dist/js-evaluator.js +1651 -0
  125. package/dist/js-evaluator.js.map +1 -0
  126. package/dist/lexer.d.ts +6 -0
  127. package/dist/lexer.js +115 -0
  128. package/dist/lexer.js.map +1 -0
  129. package/dist/optimizer.d.ts +2 -0
  130. package/dist/optimizer.js +353 -0
  131. package/dist/optimizer.js.map +1 -0
  132. package/dist/parser.d.ts +2 -0
  133. package/dist/parser.js +352 -0
  134. package/dist/parser.js.map +1 -0
  135. package/dist/program-arena.d.ts +22 -0
  136. package/dist/program-arena.js +67 -0
  137. package/dist/program-arena.js.map +1 -0
  138. package/dist/runtime-values.d.ts +17 -0
  139. package/dist/runtime-values.js +11 -0
  140. package/dist/runtime-values.js.map +1 -0
  141. package/dist/special-call-rewrites.d.ts +2 -0
  142. package/dist/special-call-rewrites.js +74 -0
  143. package/dist/special-call-rewrites.js.map +1 -0
  144. package/dist/translation.d.ts +28 -0
  145. package/dist/translation.js +569 -0
  146. package/dist/translation.js.map +1 -0
  147. package/package.json +53 -0
@@ -0,0 +1,598 @@
1
+ import { couponMetrics, couponSchedule, getAmordegrc, getAmorlinc, isValidBasis, isValidFrequency, macaulayDuration, maturityAtIssueFractions, oddFirstPriceValue, oddLastCouponFractions, pricePeriodicSecurity, securityAnnualizedYearFraction, solveOddFirstYield, solvePeriodicSecurityYield, treasuryBillDays, yearFracByBasis, } from "./fixed-income.js";
2
+ function isValidBasisValue(basis) {
3
+ return basis !== undefined && isValidBasis(basis);
4
+ }
5
+ function isValidFrequencyValue(frequency) {
6
+ return frequency !== undefined && isValidFrequency(frequency);
7
+ }
8
+ export function createFixedIncomeBuiltins({ toNumber, coerceBoolean, coerceDateSerial, coerceNumber, integerValue, numberResult, valueError, }) {
9
+ return {
10
+ ACCRINT: (issueArg, firstInterestArg, settlementArg, rateArg, parArg, frequencyArg, basisArg, calcMethodArg) => {
11
+ const issue = coerceDateSerial(issueArg);
12
+ const firstInterest = coerceDateSerial(firstInterestArg);
13
+ const settlement = coerceDateSerial(settlementArg);
14
+ const rate = toNumber(rateArg);
15
+ const par = coerceNumber(parArg, 1000);
16
+ const frequency = integerValue(frequencyArg);
17
+ const basis = integerValue(basisArg, 0);
18
+ const calcMethod = coerceBoolean(calcMethodArg, true);
19
+ if (issue === undefined ||
20
+ firstInterest === undefined ||
21
+ settlement === undefined ||
22
+ rate === undefined ||
23
+ calcMethod === undefined ||
24
+ par === undefined ||
25
+ rate <= 0 ||
26
+ par <= 0 ||
27
+ issue >= settlement ||
28
+ firstInterest <= issue ||
29
+ firstInterest >= settlement ||
30
+ !isValidFrequencyValue(frequency) ||
31
+ !isValidBasisValue(basis)) {
32
+ return valueError();
33
+ }
34
+ const accrualStart = settlement > firstInterest && !calcMethod ? firstInterest : issue;
35
+ const years = yearFracByBasis(accrualStart, settlement, basis);
36
+ return years === undefined ? valueError() : numberResult(par * rate * years);
37
+ },
38
+ ACCRINTM: (issueArg, settlementArg, rateArg, parArg, basisArg) => {
39
+ const issue = coerceDateSerial(issueArg);
40
+ const settlement = coerceDateSerial(settlementArg);
41
+ const rate = toNumber(rateArg);
42
+ const par = coerceNumber(parArg, 1000);
43
+ const basis = integerValue(basisArg, 0);
44
+ if (issue === undefined ||
45
+ settlement === undefined ||
46
+ rate === undefined ||
47
+ par === undefined ||
48
+ rate <= 0 ||
49
+ par <= 0 ||
50
+ issue >= settlement ||
51
+ !isValidBasisValue(basis)) {
52
+ return valueError();
53
+ }
54
+ const years = yearFracByBasis(issue, settlement, basis);
55
+ return years === undefined ? valueError() : numberResult(par * rate * years);
56
+ },
57
+ COUPDAYBS: (settlementArg, maturityArg, frequencyArg, basisArg) => {
58
+ const settlement = coerceDateSerial(settlementArg);
59
+ const maturity = coerceDateSerial(maturityArg);
60
+ const frequency = integerValue(frequencyArg);
61
+ const basis = integerValue(basisArg, 0);
62
+ if (settlement === undefined ||
63
+ maturity === undefined ||
64
+ !isValidFrequencyValue(frequency) ||
65
+ !isValidBasisValue(basis)) {
66
+ return valueError();
67
+ }
68
+ const metrics = couponMetrics(settlement, maturity, frequency, basis);
69
+ return metrics === undefined ? valueError() : numberResult(metrics.accruedDays);
70
+ },
71
+ COUPDAYS: (settlementArg, maturityArg, frequencyArg, basisArg) => {
72
+ const settlement = coerceDateSerial(settlementArg);
73
+ const maturity = coerceDateSerial(maturityArg);
74
+ const frequency = integerValue(frequencyArg);
75
+ const basis = integerValue(basisArg, 0);
76
+ if (settlement === undefined ||
77
+ maturity === undefined ||
78
+ !isValidFrequencyValue(frequency) ||
79
+ !isValidBasisValue(basis)) {
80
+ return valueError();
81
+ }
82
+ const metrics = couponMetrics(settlement, maturity, frequency, basis);
83
+ return metrics === undefined ? valueError() : numberResult(metrics.daysInPeriod);
84
+ },
85
+ COUPDAYSNC: (settlementArg, maturityArg, frequencyArg, basisArg) => {
86
+ const settlement = coerceDateSerial(settlementArg);
87
+ const maturity = coerceDateSerial(maturityArg);
88
+ const frequency = integerValue(frequencyArg);
89
+ const basis = integerValue(basisArg, 0);
90
+ if (settlement === undefined ||
91
+ maturity === undefined ||
92
+ !isValidFrequencyValue(frequency) ||
93
+ !isValidBasisValue(basis)) {
94
+ return valueError();
95
+ }
96
+ const metrics = couponMetrics(settlement, maturity, frequency, basis);
97
+ return metrics === undefined ? valueError() : numberResult(metrics.daysToNextCoupon);
98
+ },
99
+ COUPNCD: (settlementArg, maturityArg, frequencyArg, basisArg) => {
100
+ const settlement = coerceDateSerial(settlementArg);
101
+ const maturity = coerceDateSerial(maturityArg);
102
+ const frequency = integerValue(frequencyArg);
103
+ const basis = integerValue(basisArg, 0);
104
+ if (settlement === undefined ||
105
+ maturity === undefined ||
106
+ !isValidFrequencyValue(frequency) ||
107
+ !isValidBasisValue(basis)) {
108
+ return valueError();
109
+ }
110
+ const schedule = couponSchedule(settlement, maturity, frequency);
111
+ return schedule === undefined ? valueError() : numberResult(schedule.nextCoupon);
112
+ },
113
+ COUPNUM: (settlementArg, maturityArg, frequencyArg, basisArg) => {
114
+ const settlement = coerceDateSerial(settlementArg);
115
+ const maturity = coerceDateSerial(maturityArg);
116
+ const frequency = integerValue(frequencyArg);
117
+ const basis = integerValue(basisArg, 0);
118
+ if (settlement === undefined ||
119
+ maturity === undefined ||
120
+ !isValidFrequencyValue(frequency) ||
121
+ !isValidBasisValue(basis)) {
122
+ return valueError();
123
+ }
124
+ const schedule = couponSchedule(settlement, maturity, frequency);
125
+ return schedule === undefined ? valueError() : numberResult(schedule.periodsRemaining);
126
+ },
127
+ COUPPCD: (settlementArg, maturityArg, frequencyArg, basisArg) => {
128
+ const settlement = coerceDateSerial(settlementArg);
129
+ const maturity = coerceDateSerial(maturityArg);
130
+ const frequency = integerValue(frequencyArg);
131
+ const basis = integerValue(basisArg, 0);
132
+ if (settlement === undefined ||
133
+ maturity === undefined ||
134
+ !isValidFrequencyValue(frequency) ||
135
+ !isValidBasisValue(basis)) {
136
+ return valueError();
137
+ }
138
+ const schedule = couponSchedule(settlement, maturity, frequency);
139
+ return schedule === undefined ? valueError() : numberResult(schedule.previousCoupon);
140
+ },
141
+ DISC: (settlementArg, maturityArg, priceArg, redemptionArg, basisArg) => {
142
+ const settlement = coerceDateSerial(settlementArg);
143
+ const maturity = coerceDateSerial(maturityArg);
144
+ const price = toNumber(priceArg);
145
+ const redemption = toNumber(redemptionArg);
146
+ const basis = integerValue(basisArg, 0);
147
+ if (settlement === undefined ||
148
+ maturity === undefined ||
149
+ price === undefined ||
150
+ redemption === undefined ||
151
+ price <= 0 ||
152
+ redemption <= 0 ||
153
+ !isValidBasisValue(basis)) {
154
+ return valueError();
155
+ }
156
+ const years = securityAnnualizedYearFraction(settlement, maturity, basis);
157
+ return years === undefined
158
+ ? valueError()
159
+ : numberResult((redemption - price) / redemption / years);
160
+ },
161
+ INTRATE: (settlementArg, maturityArg, investmentArg, redemptionArg, basisArg) => {
162
+ const settlement = coerceDateSerial(settlementArg);
163
+ const maturity = coerceDateSerial(maturityArg);
164
+ const investment = toNumber(investmentArg);
165
+ const redemption = toNumber(redemptionArg);
166
+ const basis = integerValue(basisArg, 0);
167
+ if (settlement === undefined ||
168
+ maturity === undefined ||
169
+ investment === undefined ||
170
+ redemption === undefined ||
171
+ investment <= 0 ||
172
+ redemption <= 0 ||
173
+ !isValidBasisValue(basis)) {
174
+ return valueError();
175
+ }
176
+ const years = securityAnnualizedYearFraction(settlement, maturity, basis);
177
+ return years === undefined
178
+ ? valueError()
179
+ : numberResult((redemption - investment) / investment / years);
180
+ },
181
+ RECEIVED: (settlementArg, maturityArg, investmentArg, discountArg, basisArg) => {
182
+ const settlement = coerceDateSerial(settlementArg);
183
+ const maturity = coerceDateSerial(maturityArg);
184
+ const investment = toNumber(investmentArg);
185
+ const discount = toNumber(discountArg);
186
+ const basis = integerValue(basisArg, 0);
187
+ if (settlement === undefined ||
188
+ maturity === undefined ||
189
+ investment === undefined ||
190
+ discount === undefined ||
191
+ investment <= 0 ||
192
+ discount <= 0 ||
193
+ !isValidBasisValue(basis)) {
194
+ return valueError();
195
+ }
196
+ const years = securityAnnualizedYearFraction(settlement, maturity, basis);
197
+ if (years === undefined) {
198
+ return valueError();
199
+ }
200
+ const denominator = 1 - discount * years;
201
+ return denominator <= 0 ? valueError() : numberResult(investment / denominator);
202
+ },
203
+ PRICEDISC: (settlementArg, maturityArg, discountArg, redemptionArg, basisArg) => {
204
+ const settlement = coerceDateSerial(settlementArg);
205
+ const maturity = coerceDateSerial(maturityArg);
206
+ const discount = toNumber(discountArg);
207
+ const redemption = toNumber(redemptionArg);
208
+ const basis = integerValue(basisArg, 0);
209
+ if (settlement === undefined ||
210
+ maturity === undefined ||
211
+ discount === undefined ||
212
+ redemption === undefined ||
213
+ discount <= 0 ||
214
+ redemption <= 0 ||
215
+ !isValidBasisValue(basis)) {
216
+ return valueError();
217
+ }
218
+ const years = securityAnnualizedYearFraction(settlement, maturity, basis);
219
+ return years === undefined ? valueError() : numberResult(redemption * (1 - discount * years));
220
+ },
221
+ YIELDDISC: (settlementArg, maturityArg, priceArg, redemptionArg, basisArg) => {
222
+ const settlement = coerceDateSerial(settlementArg);
223
+ const maturity = coerceDateSerial(maturityArg);
224
+ const price = toNumber(priceArg);
225
+ const redemption = toNumber(redemptionArg);
226
+ const basis = integerValue(basisArg, 0);
227
+ if (settlement === undefined ||
228
+ maturity === undefined ||
229
+ price === undefined ||
230
+ redemption === undefined ||
231
+ price <= 0 ||
232
+ redemption <= 0 ||
233
+ !isValidBasisValue(basis)) {
234
+ return valueError();
235
+ }
236
+ const years = securityAnnualizedYearFraction(settlement, maturity, basis);
237
+ return years === undefined
238
+ ? valueError()
239
+ : numberResult((redemption - price) / price / years);
240
+ },
241
+ TBILLPRICE: (settlementArg, maturityArg, discountArg) => {
242
+ const settlement = coerceDateSerial(settlementArg);
243
+ const maturity = coerceDateSerial(maturityArg);
244
+ const discount = toNumber(discountArg);
245
+ if (settlement === undefined ||
246
+ maturity === undefined ||
247
+ discount === undefined ||
248
+ discount <= 0) {
249
+ return valueError();
250
+ }
251
+ const days = treasuryBillDays(settlement, maturity);
252
+ return days === undefined ? valueError() : numberResult(100 * (1 - (discount * days) / 360));
253
+ },
254
+ TBILLYIELD: (settlementArg, maturityArg, priceArg) => {
255
+ const settlement = coerceDateSerial(settlementArg);
256
+ const maturity = coerceDateSerial(maturityArg);
257
+ const price = toNumber(priceArg);
258
+ if (settlement === undefined || maturity === undefined || price === undefined || price <= 0) {
259
+ return valueError();
260
+ }
261
+ const days = treasuryBillDays(settlement, maturity);
262
+ return days === undefined
263
+ ? valueError()
264
+ : numberResult(((100 - price) * 360) / (price * days));
265
+ },
266
+ TBILLEQ: (settlementArg, maturityArg, discountArg) => {
267
+ const settlement = coerceDateSerial(settlementArg);
268
+ const maturity = coerceDateSerial(maturityArg);
269
+ const discount = toNumber(discountArg);
270
+ if (settlement === undefined ||
271
+ maturity === undefined ||
272
+ discount === undefined ||
273
+ discount <= 0) {
274
+ return valueError();
275
+ }
276
+ const days = treasuryBillDays(settlement, maturity);
277
+ if (days === undefined) {
278
+ return valueError();
279
+ }
280
+ const denominator = 360 - discount * days;
281
+ return denominator === 0 ? valueError() : numberResult((365 * discount) / denominator);
282
+ },
283
+ PRICEMAT: (settlementArg, maturityArg, issueArg, rateArg, yieldArg, basisArg) => {
284
+ const settlement = coerceDateSerial(settlementArg);
285
+ const maturity = coerceDateSerial(maturityArg);
286
+ const issue = coerceDateSerial(issueArg);
287
+ const rate = toNumber(rateArg);
288
+ const yieldRate = toNumber(yieldArg);
289
+ const basis = integerValue(basisArg, 0);
290
+ if (settlement === undefined ||
291
+ maturity === undefined ||
292
+ issue === undefined ||
293
+ rate === undefined ||
294
+ yieldRate === undefined ||
295
+ rate < 0 ||
296
+ yieldRate < 0 ||
297
+ !isValidBasisValue(basis)) {
298
+ return valueError();
299
+ }
300
+ const fractions = maturityAtIssueFractions(settlement, maturity, issue, basis);
301
+ if (fractions === undefined) {
302
+ return valueError();
303
+ }
304
+ const maturityValue = 100 * (1 + rate * fractions.issueToMaturity);
305
+ const accruedInterest = 100 * rate * fractions.issueToSettlement;
306
+ const denominator = 1 + yieldRate * fractions.settlementToMaturity;
307
+ return numberResult(maturityValue / denominator - accruedInterest);
308
+ },
309
+ YIELDMAT: (settlementArg, maturityArg, issueArg, rateArg, priceArg, basisArg) => {
310
+ const settlement = coerceDateSerial(settlementArg);
311
+ const maturity = coerceDateSerial(maturityArg);
312
+ const issue = coerceDateSerial(issueArg);
313
+ const rate = toNumber(rateArg);
314
+ const price = toNumber(priceArg);
315
+ const basis = integerValue(basisArg, 0);
316
+ if (settlement === undefined ||
317
+ maturity === undefined ||
318
+ issue === undefined ||
319
+ rate === undefined ||
320
+ price === undefined ||
321
+ rate < 0 ||
322
+ price <= 0 ||
323
+ !isValidBasisValue(basis)) {
324
+ return valueError();
325
+ }
326
+ const fractions = maturityAtIssueFractions(settlement, maturity, issue, basis);
327
+ if (fractions === undefined) {
328
+ return valueError();
329
+ }
330
+ const settlementValue = price + 100 * rate * fractions.issueToSettlement;
331
+ const maturityValue = 100 * (1 + rate * fractions.issueToMaturity);
332
+ return numberResult((maturityValue / settlementValue - 1) / fractions.settlementToMaturity);
333
+ },
334
+ ODDFPRICE: (settlementArg, maturityArg, issueArg, firstCouponArg, rateArg, yieldArg, redemptionArg, frequencyArg, basisArg) => {
335
+ const settlement = coerceDateSerial(settlementArg);
336
+ const maturity = coerceDateSerial(maturityArg);
337
+ const issue = coerceDateSerial(issueArg);
338
+ const firstCoupon = coerceDateSerial(firstCouponArg);
339
+ const rate = toNumber(rateArg);
340
+ const yieldRate = toNumber(yieldArg);
341
+ const redemption = toNumber(redemptionArg);
342
+ const frequency = integerValue(frequencyArg);
343
+ const basis = integerValue(basisArg, 0);
344
+ if (settlement === undefined ||
345
+ maturity === undefined ||
346
+ issue === undefined ||
347
+ firstCoupon === undefined ||
348
+ rate === undefined ||
349
+ yieldRate === undefined ||
350
+ redemption === undefined ||
351
+ rate < 0 ||
352
+ yieldRate < 0 ||
353
+ redemption <= 0 ||
354
+ !isValidFrequencyValue(frequency) ||
355
+ !isValidBasisValue(basis)) {
356
+ return valueError();
357
+ }
358
+ const price = oddFirstPriceValue(settlement, maturity, issue, firstCoupon, rate, yieldRate, redemption, frequency, basis);
359
+ return price === undefined ? valueError() : numberResult(price);
360
+ },
361
+ ODDFYIELD: (settlementArg, maturityArg, issueArg, firstCouponArg, rateArg, priceArg, redemptionArg, frequencyArg, basisArg) => {
362
+ const settlement = coerceDateSerial(settlementArg);
363
+ const maturity = coerceDateSerial(maturityArg);
364
+ const issue = coerceDateSerial(issueArg);
365
+ const firstCoupon = coerceDateSerial(firstCouponArg);
366
+ const rate = toNumber(rateArg);
367
+ const price = toNumber(priceArg);
368
+ const redemption = toNumber(redemptionArg);
369
+ const frequency = integerValue(frequencyArg);
370
+ const basis = integerValue(basisArg, 0);
371
+ if (settlement === undefined ||
372
+ maturity === undefined ||
373
+ issue === undefined ||
374
+ firstCoupon === undefined ||
375
+ rate === undefined ||
376
+ price === undefined ||
377
+ redemption === undefined ||
378
+ rate < 0 ||
379
+ price <= 0 ||
380
+ redemption <= 0 ||
381
+ !isValidFrequencyValue(frequency) ||
382
+ !isValidBasisValue(basis)) {
383
+ return valueError();
384
+ }
385
+ const yieldRate = solveOddFirstYield(settlement, maturity, issue, firstCoupon, rate, price, redemption, frequency, basis);
386
+ return yieldRate === undefined ? valueError() : numberResult(yieldRate);
387
+ },
388
+ ODDLPRICE: (settlementArg, maturityArg, lastInterestArg, rateArg, yieldArg, redemptionArg, frequencyArg, basisArg) => {
389
+ const settlement = coerceDateSerial(settlementArg);
390
+ const maturity = coerceDateSerial(maturityArg);
391
+ const lastInterest = coerceDateSerial(lastInterestArg);
392
+ const rate = toNumber(rateArg);
393
+ const yieldRate = toNumber(yieldArg);
394
+ const redemption = toNumber(redemptionArg);
395
+ const frequency = integerValue(frequencyArg);
396
+ const basis = integerValue(basisArg, 0);
397
+ if (settlement === undefined ||
398
+ maturity === undefined ||
399
+ lastInterest === undefined ||
400
+ rate === undefined ||
401
+ yieldRate === undefined ||
402
+ redemption === undefined ||
403
+ rate < 0 ||
404
+ yieldRate < 0 ||
405
+ redemption <= 0 ||
406
+ !isValidFrequencyValue(frequency) ||
407
+ !isValidBasisValue(basis)) {
408
+ return valueError();
409
+ }
410
+ const fractions = oddLastCouponFractions(settlement, maturity, lastInterest, frequency, basis);
411
+ if (fractions === undefined) {
412
+ return valueError();
413
+ }
414
+ const coupon = (100 * rate) / frequency;
415
+ const maturityValue = redemption + coupon * fractions.totalFraction;
416
+ const denominator = 1 + (yieldRate * fractions.remainingFraction) / frequency;
417
+ if (denominator <= 0) {
418
+ return valueError();
419
+ }
420
+ return numberResult(maturityValue / denominator - coupon * fractions.accruedFraction);
421
+ },
422
+ ODDLYIELD: (settlementArg, maturityArg, lastInterestArg, rateArg, priceArg, redemptionArg, frequencyArg, basisArg) => {
423
+ const settlement = coerceDateSerial(settlementArg);
424
+ const maturity = coerceDateSerial(maturityArg);
425
+ const lastInterest = coerceDateSerial(lastInterestArg);
426
+ const rate = toNumber(rateArg);
427
+ const price = toNumber(priceArg);
428
+ const redemption = toNumber(redemptionArg);
429
+ const frequency = integerValue(frequencyArg);
430
+ const basis = integerValue(basisArg, 0);
431
+ if (settlement === undefined ||
432
+ maturity === undefined ||
433
+ lastInterest === undefined ||
434
+ rate === undefined ||
435
+ price === undefined ||
436
+ redemption === undefined ||
437
+ rate < 0 ||
438
+ price <= 0 ||
439
+ redemption <= 0 ||
440
+ !isValidFrequencyValue(frequency) ||
441
+ !isValidBasisValue(basis)) {
442
+ return valueError();
443
+ }
444
+ const fractions = oddLastCouponFractions(settlement, maturity, lastInterest, frequency, basis);
445
+ if (fractions === undefined) {
446
+ return valueError();
447
+ }
448
+ const coupon = (100 * rate) / frequency;
449
+ const dirtyPrice = price + coupon * fractions.accruedFraction;
450
+ if (dirtyPrice <= 0 || fractions.remainingFraction <= 0) {
451
+ return valueError();
452
+ }
453
+ const maturityValue = redemption + coupon * fractions.totalFraction;
454
+ return numberResult(((maturityValue - dirtyPrice) / dirtyPrice) * (frequency / fractions.remainingFraction));
455
+ },
456
+ PRICE: (settlementArg, maturityArg, rateArg, yieldArg, redemptionArg, frequencyArg, basisArg) => {
457
+ const settlement = coerceDateSerial(settlementArg);
458
+ const maturity = coerceDateSerial(maturityArg);
459
+ const rate = toNumber(rateArg);
460
+ const yieldRate = toNumber(yieldArg);
461
+ const redemption = toNumber(redemptionArg);
462
+ const frequency = integerValue(frequencyArg);
463
+ const basis = integerValue(basisArg, 0);
464
+ if (settlement === undefined ||
465
+ maturity === undefined ||
466
+ rate === undefined ||
467
+ yieldRate === undefined ||
468
+ redemption === undefined ||
469
+ rate < 0 ||
470
+ yieldRate < 0 ||
471
+ redemption <= 0 ||
472
+ !isValidFrequencyValue(frequency) ||
473
+ !isValidBasisValue(basis)) {
474
+ return valueError();
475
+ }
476
+ const metrics = couponMetrics(settlement, maturity, frequency, basis);
477
+ const price = metrics
478
+ ? pricePeriodicSecurity(metrics, rate, yieldRate, redemption, frequency)
479
+ : undefined;
480
+ return price === undefined ? valueError() : numberResult(price);
481
+ },
482
+ YIELD: (settlementArg, maturityArg, rateArg, priceArg, redemptionArg, frequencyArg, basisArg) => {
483
+ const settlement = coerceDateSerial(settlementArg);
484
+ const maturity = coerceDateSerial(maturityArg);
485
+ const rate = toNumber(rateArg);
486
+ const price = toNumber(priceArg);
487
+ const redemption = toNumber(redemptionArg);
488
+ const frequency = integerValue(frequencyArg);
489
+ const basis = integerValue(basisArg, 0);
490
+ if (settlement === undefined ||
491
+ maturity === undefined ||
492
+ rate === undefined ||
493
+ price === undefined ||
494
+ redemption === undefined ||
495
+ rate < 0 ||
496
+ price <= 0 ||
497
+ redemption <= 0 ||
498
+ !isValidFrequencyValue(frequency) ||
499
+ !isValidBasisValue(basis)) {
500
+ return valueError();
501
+ }
502
+ const metrics = couponMetrics(settlement, maturity, frequency, basis);
503
+ const yieldRate = metrics
504
+ ? solvePeriodicSecurityYield(metrics, rate, price, redemption, frequency)
505
+ : undefined;
506
+ return yieldRate === undefined ? valueError() : numberResult(yieldRate);
507
+ },
508
+ DURATION: (settlementArg, maturityArg, couponArg, yieldArg, frequencyArg, basisArg) => {
509
+ const settlement = coerceDateSerial(settlementArg);
510
+ const maturity = coerceDateSerial(maturityArg);
511
+ const coupon = toNumber(couponArg);
512
+ const yieldRate = toNumber(yieldArg);
513
+ const frequency = integerValue(frequencyArg);
514
+ const basis = integerValue(basisArg, 0);
515
+ if (settlement === undefined ||
516
+ maturity === undefined ||
517
+ coupon === undefined ||
518
+ yieldRate === undefined ||
519
+ coupon < 0 ||
520
+ yieldRate < 0 ||
521
+ !isValidFrequencyValue(frequency) ||
522
+ !isValidBasisValue(basis)) {
523
+ return valueError();
524
+ }
525
+ const metrics = couponMetrics(settlement, maturity, frequency, basis);
526
+ const duration = metrics
527
+ ? macaulayDuration(metrics, coupon, yieldRate, frequency)
528
+ : undefined;
529
+ return duration === undefined ? valueError() : numberResult(duration);
530
+ },
531
+ MDURATION: (settlementArg, maturityArg, couponArg, yieldArg, frequencyArg, basisArg) => {
532
+ const settlement = coerceDateSerial(settlementArg);
533
+ const maturity = coerceDateSerial(maturityArg);
534
+ const coupon = toNumber(couponArg);
535
+ const yieldRate = toNumber(yieldArg);
536
+ const frequency = integerValue(frequencyArg);
537
+ const basis = integerValue(basisArg, 0);
538
+ if (settlement === undefined ||
539
+ maturity === undefined ||
540
+ coupon === undefined ||
541
+ yieldRate === undefined ||
542
+ coupon < 0 ||
543
+ yieldRate < 0 ||
544
+ !isValidFrequencyValue(frequency) ||
545
+ !isValidBasisValue(basis)) {
546
+ return valueError();
547
+ }
548
+ const metrics = couponMetrics(settlement, maturity, frequency, basis);
549
+ const duration = metrics
550
+ ? macaulayDuration(metrics, coupon, yieldRate, frequency)
551
+ : undefined;
552
+ return duration === undefined
553
+ ? valueError()
554
+ : numberResult(duration / (1 + yieldRate / frequency));
555
+ },
556
+ AMORDEGRC: (costArg, datePurchasedArg, firstPeriodArg, salvageArg, periodArg, rateArg, basisArg) => {
557
+ const cost = toNumber(costArg);
558
+ const datePurchased = coerceDateSerial(datePurchasedArg);
559
+ const firstPeriod = coerceDateSerial(firstPeriodArg);
560
+ const salvage = toNumber(salvageArg);
561
+ const period = toNumber(periodArg);
562
+ const rate = toNumber(rateArg);
563
+ const basis = integerValue(basisArg, 0);
564
+ if (cost === undefined ||
565
+ datePurchased === undefined ||
566
+ firstPeriod === undefined ||
567
+ salvage === undefined ||
568
+ period === undefined ||
569
+ rate === undefined ||
570
+ !isValidBasisValue(basis)) {
571
+ return valueError();
572
+ }
573
+ const depreciation = getAmordegrc(cost, datePurchased, firstPeriod, salvage, period, rate, basis);
574
+ return depreciation === undefined ? valueError() : numberResult(depreciation);
575
+ },
576
+ AMORLINC: (costArg, datePurchasedArg, firstPeriodArg, salvageArg, periodArg, rateArg, basisArg) => {
577
+ const cost = toNumber(costArg);
578
+ const datePurchased = coerceDateSerial(datePurchasedArg);
579
+ const firstPeriod = coerceDateSerial(firstPeriodArg);
580
+ const salvage = toNumber(salvageArg);
581
+ const period = toNumber(periodArg);
582
+ const rate = toNumber(rateArg);
583
+ const basis = integerValue(basisArg, 0);
584
+ if (cost === undefined ||
585
+ datePurchased === undefined ||
586
+ firstPeriod === undefined ||
587
+ salvage === undefined ||
588
+ period === undefined ||
589
+ rate === undefined ||
590
+ !isValidBasisValue(basis)) {
591
+ return valueError();
592
+ }
593
+ const depreciation = getAmorlinc(cost, datePurchased, firstPeriod, salvage, period, rate, basis);
594
+ return depreciation === undefined ? valueError() : numberResult(depreciation);
595
+ },
596
+ };
597
+ }
598
+ //# sourceMappingURL=fixed-income-builtins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixed-income-builtins.js","sourceRoot":"","sources":["../../src/builtins/fixed-income-builtins.ts"],"names":[],"mappings":"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"}