istox 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/istox/quant/bond.rb +5 -5
- data/lib/istox/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3aa5c0d11cb873cfd398db44b8f4a139baf6668bf04f578db3091cb049b7d89f
|
4
|
+
data.tar.gz: '02109c5b9c3cb01c288d757cef841357f79cc36186d4245f624a619dbb984489'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdfe781debfdb6c49ab24140562b55bff2e919090fb6e46c71b6e6dfecbb9607843379e0ac97e58edc26a0426527839494294bcb94703d80fc7a0102b244333a
|
7
|
+
data.tar.gz: 88b913cbd976f4d85e2e7a140e7fd3747dd42a5c8da83b2135796b20d3121619ed54b8a1f2040179aafd13ee03cae5646fd4c6634258854e2bfb522681dc649f
|
data/lib/istox/quant/bond.rb
CHANGED
@@ -12,23 +12,23 @@ module Istox
|
|
12
12
|
|
13
13
|
DEFAULT_APPROXIMATION_ERROR = 0.00001
|
14
14
|
|
15
|
-
def initialize(coupon: nil, maturity_date: nil,
|
15
|
+
def initialize(coupon: nil, maturity_date: nil, start_date: nil, coupon_frequency: nil, coupon_payment_dates: nil, face_value: 100, days_of_year: 365)
|
16
16
|
raise "Invalid coupon #{coupon}" if (coupon.nil? || !is_number?(coupon)) || coupon < 0
|
17
17
|
raise "Invalid maturity_date #{maturity_date}" if (maturity_date.nil? || maturity_date.methods.include?("strftime"))
|
18
|
-
raise "Invalid
|
18
|
+
raise "Invalid start_date #{start_date}" if (start_date.nil? || start_date.methods.include?("strftime"))
|
19
19
|
raise "Invalid coupon_frequency #{coupon_frequency}" if (coupon_frequency.nil? || !coupon_frequency.is_a?(Integer) || coupon_frequency < 0)
|
20
20
|
raise "Invalid coupon_payment_dates #{coupon_payment_dates}" if (coupon_payment_dates.nil? || (coupon_payment_dates.count == 0 && coupon_frequency != 0) || coupon_payment_dates.any? { |date| date > maturity_date.to_date })
|
21
21
|
raise "Invalid days_of_year #{days_of_year}" if (days_of_year != 365 && days_of_year != 360)
|
22
|
+
raise "start_date is not before maturity_date" if start_date>=maturity_date
|
22
23
|
|
23
24
|
@coupon = coupon.to_d
|
24
25
|
@maturity_date = maturity_date.to_date
|
25
|
-
@years = years.to_d
|
26
26
|
@coupon_frequency = coupon_frequency.to_i # if this is 0, it means zero coupon
|
27
27
|
@days_of_year = days_of_year.to_d
|
28
28
|
@face_value = face_value.to_d
|
29
29
|
@coupon_payment_dates = coupon_payment_dates.map(&:to_date).uniq.sort
|
30
30
|
# note here we work out the start date based on maturity date and nunber of years
|
31
|
-
@start_date =
|
31
|
+
@start_date = start_date.to_date
|
32
32
|
|
33
33
|
@pay_accrued_interest = false
|
34
34
|
@coupon_payment_dates_include_accrued_interest = false
|
@@ -62,7 +62,7 @@ module Istox
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
log.info "Bond info:
|
65
|
+
log.info "Bond info: start_date=#{@start_date} maturity_date=#{@maturity_date} days_of_years=#{days_of_year} coupon=#{@coupon} coupon_frequency=#{coupon_frequency} face_value=#{@face_value} coupon_payment_dates=#{@coupon_payment_dates} pay_accrued_interest=#{@pay_accrued_interest} coupon_payment_dates_include_accrued_interest=#{@coupon_payment_dates_include_accrued_interest}"
|
66
66
|
end
|
67
67
|
|
68
68
|
def price(ytm, date, ex_coupon_date: nil, fees: 0)
|
data/lib/istox/version.rb
CHANGED