|
|
| (같은 사용자의 중간 판 9개는 보이지 않습니다) |
| 1번째 줄: |
1번째 줄: |
| '''디지털금융([[Digital Finance]])'''은 경영학전공 4학년을 대상으로 재무관리, 투자론 및 기업재무 등 재무금융 분야 교과목에서 배운 이론을 기초적인 [[파이썬|파이썬(Python)]] 프로그래밍 언어를 활용하여 실무적으로 숙달, 응용하는 강좌이다. | | ''이 문서는 명지대학교 경영학전공 강좌 '디지털금융'에 관한 것이다. 정보통신기술을 활용하여 금융서비스를 제공하거나 금융시장의 작동방식을 혁신하는 분야 일반에 대해서는 [[핀테크]] 문서를 참조한다.'' |
|
| |
|
| = 파이썬 기초 =
| | '''디지털금융'''(digital finance)은 명지대학교 경영학전공 4학년을 대상으로 개설되는 전공 심화 강좌이다. 재무관리·기업재무론·투자론 I 등 기존 재무금융 교과목에서 학습한 이론을 바탕으로, 기초적인 파이썬(Python) 프로그래밍을 도구로 활용하여 재무금융 이론을 실무적으로 구현·응용하고 실제 데이터를 활용한 분석 역량을 배양하는 것을 목표로 한다. |
| * while 반복문
| |
|
| |
|
| def savings_fixed(cf, r, t):
| | == 강의개요 == |
|
| |
|
| total = 0.0
| | 디지털금융은 재무금융 이론을 데이터 분석의 관점에서 심화·확장하는 전공 심화 강좌이다. 파이썬 실습을 기반으로 금융 이론과 실무를 연결하며, 실제 데이터를 활용하여 분석 역량을 키운다. 주요 주제로는 화폐의 시간가치, [[채권]] 및 [[주식]]의 가치평가, 포트폴리오 이론, [[자본자산가격결정모형|CAPM]], 텍스트 분석 등이 있다. |
| 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
| |
|
| |
|
| = 화폐의 시간가치 =
| | 디지털금융을 수강하기 위해서는 다음 교과목을 이수하는 것이 바람직하며, 이들 과목의 핵심 개념과 분석 틀을 전제로 진행된다. |
| * [[현재가치]]
| |
|
| |
|
| * 연금 | | * [[재무관리]] |
| | * [[기업재무|기업재무론]] |
| | * 투자론 I |
|
| |
|
| 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
| |