본문 바로가기
언어/Julia

bond pricing with chatGPT vs claude in Adot.

by newlibra 2025. 3. 17.

 

아래는 각 기간별 스팟 금리를 이용하여 채권의 가격을 계산하는 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