아래는 각 기간별 스팟 금리를 이용하여 채권의 가격을 계산하는 Julia 프로그램 예제입니다.
이 예제에서는 각 연도의 스팟 금리를 배열로 입력받고,
각 기간별 할인요소를 적용하여 쿠폰 지급액과 만기 시 액면가의 현재가치를 계산합니다.
예제 코드:
------------------------------------------------------------
```julia
# 각 기간별 스팟 금리를 사용하여 채권가격을 계산하는 함수
function bond_price_spot(coupon::Float64, face_value::Float64, spot_rates::Vector{Float64})
maturity = length(spot_rates) # 만기는 스팟 금리 배열의 요소 수와 동일
price = 0.0
# 각 연도의 쿠폰 지급액 할인 후 누적합 계산
for t in 1:maturity
price += coupon / (1 + spot_rates[t])^t
end
# 만기 시 액면가 할인 후 추가
price += face_value / (1 + spot_rates[maturity])^maturity
return price
end
# 예제 입력 값
coupon = 5.0 # 연간 쿠폰 금액 (예: 5원)
face_value = 100.0 # 액면가 (예: 100원)
# 각 기간별 스팟 금리 (예: 만기 5년 채권의 스팟 금리)
spot_rates = [0.02, 0.025, 0.03, 0.035, 0.04] # 1년 ~ 5년 스팟 금리
# 채권 가격 계산
price = bond_price_spot(coupon, face_value, spot_rates)
println("스팟 금리를 이용한 채권 가격: $(price)")
```
------------------------------------------------------------
설명:
• bond_price_spot 함수:
입력 인자로 연간 쿠폰, 액면가, 그리고 각 연도의 스팟 금리 배열을 받습니다.
배열의 길이를 만기로 간주하고, 각 기간의 할인요소를 적용하여 채권의 가격을 계산한 후 반환합니다.
• 할인 계산 방식:
- 각 기간의 쿠폰 지급액은 해당 기간의 스팟 금리로 t제곱을 나눠 할인합니다.
- 만기 시 지급되는 액면가 역시 마지막 스팟 금리를 사용하여 할인합니다.
Spot Rate를 이용하여 채권가격을 계산하는 Julia 프로그램을 작성해 드리겠습니다. Spot Rate는 각 현금흐름 시점별로 다른 할인율을 적용하는 방식입니다.
```julia
using DataFrames
"""
spot_bond_price: Spot Rate를 이용한 채권가격 계산 함수
Parameters:
- coupon: 연간 쿠폰 지급액
- face_value: 액면가
- spot_rates: 각 기간별 spot rate 배열
- maturity: 만기 연수
"""
function spot_bond_price(coupon::Float64, face_value::Float64, spot_rates::Vector{Float64}, maturity::Int)
price = 0.0
# 각 시점별 현금흐름의 현재가치 계산
for t in 1:maturity
# 쿠폰의 현재가치
discount_factor = 1 / (1 + spot_rates[t])^t
price += coupon * discount_factor
end
# 만기시점 원금의 현재가치
price += face_value * (1 / (1 + spot_rates[maturity])^maturity)
return price
end
# 현금흐름과 가격을 보여주는 상세 함수
function display_bond_calculations(coupon::Float64, face_value::Float64, spot_rates::Vector{Float64}, maturity::Int)
# 결과를 저장할 DataFrame 생성
df = DataFrame(
Year = Int[],
CashFlow = Float64[],
SpotRate = Float64[],
DiscountFactor = Float64[],
PresentValue = Float64[]
)
# 각 연도별 계산
for t in 1:maturity
cf = (t == maturity) ? coupon + face_value : coupon
discount_factor = 1 / (1 + spot_rates[t])^t
pv = cf * discount_factor
push!(df, [t, cf, spot_rates[t], discount_factor, pv])
end
# 전체 채권가격 계산
total_price = sum(df.PresentValue)
# 결과 출력
println("\n[채권 가격 계산 상세내역]")
println(df)
println("\n총 채권가격: ", round(total_price, digits=4))
return total_price
end
# 예제 실행
function main()
# 입력 파라미터
coupon = 5.0 # 연간 쿠폰 지급액
face_value = 100.0 # 액면가
maturity = 3 # 만기
spot_rates = [0.03, 0.035, 0.04] # 각 기간별 spot rate
println("입력값:")
println("쿠폰: ", coupon)
println("액면가: ", face_value)
println("만기: ", maturity, "년")
println("Spot Rates: ", spot_rates)
# 상세 계산 결과 출력
price = display_bond_calculations(coupon, face_value, spot_rates, maturity)
end
# 프로그램 실행
main()
```
이 프로그램의 주요 특징은 다음과 같습니다:
1. **기본 구조**
- spot_bond_price 함수: 기본적인 채권가격 계산
- display_bond_calculations 함수: 상세한 계산 과정을 보여주는 함수
- main 함수: 실제 실행을 위한 예제 데이터 설정
2. **주요 계산 방식**
- 각 시점별로 다른 spot rate를 적용
- 현금흐름 = 쿠폰 (매년) + 액면가 (만기시점)
- 할인계수 = 1 / (1 + spot_rate)^t
- 현재가치 = 현금흐름 × 할인계수
3. **출력 정보**
- 연도별 현금흐름
- 적용된 spot rate
- 할인계수
- 현재가치
- 최종 채권가격
사용 예시:
```julia
# 실행 결과 예시
입력값:
쿠폰: 5.0
액면가: 100.0
만기: 3년
Spot Rates: [0.03, 0.035, 0.04]
[채권 가격 계산 상세내역]
3×5 DataFrame
Row │ Year CashFlow SpotRate DiscountFactor PresentValue
│ Int Float64 Float64 Float64 Float64
─────┼──────────────────────────────────────────────────────
1 │ 1 5.0 0.03 0.970874 4.85437
2 │ 2 5.0 0.035 0.931834 4.65917
3 │ 3 105.0 0.04 0.888996 93.3446
총 채권가격: 102.8582
```
이 프로그램은 다음과 같이 확장/수정할 수 있습니다:
1. 다양한 쿠폰 지급 주기 지원 (반기, 분기 등)
2. 다양한 day count convention 적용
3. 오류 처리 추가 (입력값 검증 등)
4. 그래프 시각화 기능 추가
'언어 > Julia' 카테고리의 다른 글
machine learning using chatGPT in adot. (0) | 2025.03.17 |
---|---|
julia vs c (0) | 2024.05.19 |
괜찮은 자료 (0) | 2024.05.05 |
basic (0) | 2024.02.13 |
ref (0) | 2024.02.13 |