디지털금융: 두 판 사이의 차이
편집 요약 없음 |
|||
| 28번째 줄: | 28번째 줄: | ||
= 화폐의 시간가치 = | = 화폐의 시간가치 = | ||
* [[현재가치]] | * [[현재가치]] | ||
* 연금 | |||
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 | |||
= 채권 = | = 채권 = | ||