본문으로 이동
주 메뉴
주 메뉴
사이드바로 이동
숨기기
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
Coffee Wiki
검색
검색
한국어
보이기
계정 만들기
로그인
개인 도구
계정 만들기
로그인
로그아웃한 편집자를 위한 문서
더 알아보기
기여
토론
디지털금융 문서 원본 보기
문서
토론
한국어
읽기
원본 보기
역사 보기
도구
도구
사이드바로 이동
숨기기
동작
읽기
원본 보기
역사 보기
일반
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
보이기
사이드바로 이동
숨기기
←
디지털금융
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
문서를 고치려면 이메일 인증 절차가 필요합니다.
사용자 환경 설정
에서 이메일 주소를 입력하고 이메일 주소 인증을 해주시기 바랍니다.
문서의 원본을 보거나 복사할 수 있습니다.
'''디지털금융([[Digital Finance]])'''은 경영학전공 4학년을 대상으로 재무관리, 투자론 및 기업재무 등 재무금융 분야 교과목에서 배운 이론을 기초적인 [[파이썬|파이썬(Python)]] 프로그래밍 언어를 활용하여 실무적으로 숙달, 응용하는 강좌이다. = 파이썬 기초 = * while 반복문 def savings_fixed(cf, r, t): total = 0.0 i = 1 while(i <= t): total += cf * (1 + r) ** i i += 1 return total 초기값을 0.0으로 하고 (0.0으로 해야 정수로 인식할 수 있다.) whlie 반복문을 이용해서 현금흐름(cf)이 같은 경우에 사용할 수 있다. i값을 t보다 작거나 같은 값을 넣어주면서 fv 미래가치의 합을 구하는 코드이다. * for 반복문 def savings_free(cfs, r): total = 0.0 for cf in cfs: total = (total + cf) * (1 + r) return total 초기값을 0.0으로 하고 for 반복문을 이용해서 현금흐름이 각 연도마다 다른 경우에 사용할 수 있다. cf 변수에 cfs 값을 넣어주면서 반복적으로 계산을 하여 fv 미래가치의 합을 구하는 코드이다. by 60180852 = 화폐의 시간가치 = * [[현재가치]] * 연금 def annuity(cf, r, t): return cf * (1 - 1 / (1 + r) ** t) / r def annuity2(cf, r, t): return cf/r - cf/r /(1+r) ** t 두 연금 코드는 같은 답을 도출하는데 밑에 코드를 먼저 이해하면 쉽게 이해할 수 있다. cf/r 는 영구연금을 구하는 방식이고 cf/r /(1+r) ** t 해당 부분은 t년후에 영구연금을 구하는 방식이다. 예를 들어 3년 연금을 구하는 방법은 영구연금에서 x4년차부터 시작하는 영구연금을 (1+r)**t로 할인하고 차감하는 방식이다. * 실습 def pv(cf, r,t): return cf / (1+r) ** t def npv(r, cfs): total = 0.0 for i, cf in enumerate(cfs): total += pv(cf,r,i) return total def irr(cfs): rate = 0.0 while(rate < 1.0): rate += 0.0001 value = npv(rate, cfs) if(abs(value) <= 0.0001): print(rate) rate = [] value = [] cfs = [-59, 155, -100] for i in range(1, 100): rate.append(i / 100) value.append(npv(i / 100, cfs)) print(rate) print(value) 간단하게 설명해보면 해당 코드를 이용해서 npv값이 0이되는 rate를 찾는 과정을 나타내고 이를 그래프로 보여 주기 위해 rate와 vlaue를 찾아가는 과정이다. pv , npv, irr 코드를 저장하고 for 반복문에 append를 사용했는데 append()는 리스트에 새로운 값을 하나씩 추가할 때 사용하는 코드입니다. append를 이용해서 0.01~0.99 까지 값을 반복적으로 넣어주면서 해당 값을 찾아주는 코드입니다. by 60180852 = 채권 = *채권의 가격 def bondprice(ytm, face, maturity, coupon, freq = 'annual'): if freq == 'annual': m = 1 elif freq == 'semi-annual': m = 2 elif freq == 'quarterly': m = 4 elif freq == 'monthly': m = 12 elif freq == 'daily': m = 365 else: m = 0 try: return face * coupon * (1 - 1 / (1 + ytm / m) ** (maturity * m)) / ytm + face / (1 + ytm / m) ** (maturity * m) except ZeroDivisionError: return print("Error: freq should be either 'annual', 'semi-annual', 'quarterly', 'monthly', or 'daily'.") 일단 m을 구하는 과정을 코드로 작성해야 하는데 coupon*face (표시이자)를 1년마다 주는지 반년마다 주는지 분기마다 주는지를 if 함수를 통해 구하는 과정이다. 이렇게 구해진 m을 가져와서 채권의 가격을 구한다. 변수가 많아서 헷갈릴 수 있지만 결국에는 연금공식을 이용한 풀이이다. 거기에 만기에 받을 face를 pv화 하는 코드를 더해주면 된다. 마지막에 예외처리를 이용해서 m = 0 이 된 경우에는 원하는 print를 표시해주면 된다. * 가중평균만기 (duration) def pv(r, cf, t): return cf / (1 + r) ** t def duration(ytm, face, maturity, coupon, freq = 'annual'): if freq == 'annual': m = 1 elif freq == 'semi-annual': m = 2 elif freq == 'quarterly': m = 4 elif freq == 'monthly': m = 12 elif freq == 'daily': m = 365 else: m = 0 try: n = maturity * m val = pv(ytm / m, face, n) * maturity total = pv(ytm / m, face, n) for i in range(1, n + 1): val += pv(ytm / m, face * coupon / m, i) * (i / m) total += pv(ytm / m, face * coupon / m, i) except ZeroDivisionError: return print("Error: freq should be either 'annual', 'semi-annual', 'quarterly', 'monthly', or 'daily'.") return val / total 듀레이션을 구하는 과정은 분수 부분은 각 pv현금흐름을 * 해당 t를 곱합 값이다. 일단 val변수를 설정을 하고 for 반복문을 통해 각 사업년도에 현금흐름 * t를 더해주는 반복문을 설정하면 된다. 분모 부분은 tatal 변수를 설정하고 채권의 가격을 구하는 과정이라고 생각하면 된다. val/tatal를 마지막에 작성해주면서 가중평균만기를 구해주는 코드를 작성하면 된다. by 60180852
디지털금융
문서로 돌아갑니다.
검색
검색
디지털금융 문서 원본 보기
언어 추가
새 주제