<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://wiki.junhopark033.synology.me/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%EA%B2%BD%EC%98%81%ED%95%99%EA%B3%BC+%EA%B9%80%EB%B0%B1%EC%A7%84</id>
	<title>Coffee Wiki - 사용자 기여 [ko]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.junhopark033.synology.me/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%EA%B2%BD%EC%98%81%ED%95%99%EA%B3%BC+%EA%B9%80%EB%B0%B1%EC%A7%84"/>
	<link rel="alternate" type="text/html" href="https://wiki.junhopark033.synology.me/index.php/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/%EA%B2%BD%EC%98%81%ED%95%99%EA%B3%BC_%EA%B9%80%EB%B0%B1%EC%A7%84"/>
	<updated>2026-04-22T10:39:50Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://wiki.junhopark033.synology.me/index.php?title=%EB%94%94%EC%A7%80%ED%84%B8%EA%B8%88%EC%9C%B5&amp;diff=192</id>
		<title>디지털금융</title>
		<link rel="alternate" type="text/html" href="https://wiki.junhopark033.synology.me/index.php?title=%EB%94%94%EC%A7%80%ED%84%B8%EA%B8%88%EC%9C%B5&amp;diff=192"/>
		<updated>2025-05-07T01:07:29Z</updated>

		<summary type="html">&lt;p&gt;경영학과 김백진: /* 채권 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;디지털금융([[Digital Finance]])&#039;&#039;&#039;은 경영학전공 4학년을 대상으로 재무관리, 투자론 및 기업재무 등 재무금융 분야 교과목에서 배운 이론을 기초적인 [[파이썬|파이썬(Python)]] 프로그래밍 언어를 활용하여 실무적으로 숙달, 응용하는 강좌이다.&lt;br /&gt;
&lt;br /&gt;
= 파이썬 기초 =&lt;br /&gt;
* while 반복문&lt;br /&gt;
&lt;br /&gt;
def savings_fixed(cf, r, t):&lt;br /&gt;
&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  i = 1&lt;br /&gt;
  while(i &amp;lt;= t):&lt;br /&gt;
    total += cf * (1 + r) ** i&lt;br /&gt;
    i += 1&lt;br /&gt;
  return total&lt;br /&gt;
초기값을 0.0으로 하고 (0.0으로 해야 정수로 인식할 수 있다.) whlie 반복문을 이용해서 현금흐름(cf)이 같은 경우에 사용할 수 있다.&lt;br /&gt;
i값을 t보다 작거나 같은 값을 넣어주면서 fv 미래가치의 합을 구하는 코드이다.&lt;br /&gt;
&lt;br /&gt;
* for 반복문&lt;br /&gt;
&lt;br /&gt;
def savings_free(cfs, r):&lt;br /&gt;
&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  for cf in cfs:&lt;br /&gt;
    total = (total + cf) * (1 + r)&lt;br /&gt;
  return total&lt;br /&gt;
초기값을 0.0으로 하고 for 반복문을 이용해서 현금흐름이 각 연도마다 다른 경우에 사용할 수 있다.&lt;br /&gt;
cf 변수에 cfs 값을 넣어주면서 반복적으로 계산을 하여 fv 미래가치의 합을 구하는 코드이다. by 60180852&lt;br /&gt;
&lt;br /&gt;
= 화폐의 시간가치 =&lt;br /&gt;
* [[현재가치]]&lt;br /&gt;
&lt;br /&gt;
* 연금&lt;br /&gt;
&lt;br /&gt;
def annuity(cf, r, t):&lt;br /&gt;
  return cf * (1 - 1 / (1 + r) ** t) / r&lt;br /&gt;
&lt;br /&gt;
def annuity2(cf, r, t):&lt;br /&gt;
  return cf/r - cf/r /(1+r) ** t&lt;br /&gt;
&lt;br /&gt;
두 연금 코드는 같은 답을 도출하는데 밑에 코드를 먼저 이해하면 쉽게 이해할 수 있다. &lt;br /&gt;
cf/r 는 영구연금을 구하는 방식이고 cf/r /(1+r) ** t 해당 부분은 t년후에 영구연금을 구하는 방식이다. &lt;br /&gt;
예를 들어 3년 연금을 구하는 방법은 영구연금에서 x4년차부터 시작하는 영구연금을 (1+r)**t로 할인하고 차감하는 방식이다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 실습&lt;br /&gt;
&lt;br /&gt;
def pv(cf, r,t):&lt;br /&gt;
  return cf / (1+r) ** t&lt;br /&gt;
def npv(r, cfs):&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  for i, cf in enumerate(cfs):&lt;br /&gt;
    total += pv(cf,r,i)&lt;br /&gt;
  return total&lt;br /&gt;
def irr(cfs):&lt;br /&gt;
  rate = 0.0&lt;br /&gt;
  while(rate &amp;lt; 1.0):&lt;br /&gt;
    rate += 0.0001&lt;br /&gt;
    value = npv(rate, cfs)&lt;br /&gt;
    if(abs(value) &amp;lt;= 0.0001):&lt;br /&gt;
      print(rate)&lt;br /&gt;
&lt;br /&gt;
 rate = [] &lt;br /&gt;
 value = [] &lt;br /&gt;
 cfs = [-59, 155, -100]&lt;br /&gt;
 for i in range(1, 100): &lt;br /&gt;
  rate.append(i / 100) &lt;br /&gt;
  value.append(npv(i / 100, cfs))&lt;br /&gt;
print(rate)&lt;br /&gt;
print(value)&lt;br /&gt;
&lt;br /&gt;
간단하게 설명해보면 해당 코드를 이용해서 npv값이 0이되는 rate를 찾는 과정을 나타내고 이를 그래프로 보여 주기 위해 rate와 vlaue를 찾아가는 과정이다. pv , npv, irr 코드를 저장하고 for 반복문에 append를 사용했는데 append()는 리스트에 새로운 값을 하나씩 추가할 때 사용하는 코드입니다. append를 이용해서 0.01~0.99 까지 값을 반복적으로 넣어주면서 해당 값을 찾아주는 코드입니다. by 60180852&lt;br /&gt;
&lt;br /&gt;
= 채권 =&lt;br /&gt;
&lt;br /&gt;
*채권의 가격&lt;br /&gt;
&lt;br /&gt;
def bondprice(ytm, face, maturity, coupon, freq = &#039;annual&#039;):&lt;br /&gt;
  if freq == &#039;annual&#039;:&lt;br /&gt;
    m = 1&lt;br /&gt;
  elif freq == &#039;semi-annual&#039;:&lt;br /&gt;
    m = 2&lt;br /&gt;
  elif freq == &#039;quarterly&#039;:&lt;br /&gt;
    m = 4&lt;br /&gt;
  elif freq == &#039;monthly&#039;:&lt;br /&gt;
    m = 12&lt;br /&gt;
  elif freq == &#039;daily&#039;:&lt;br /&gt;
    m = 365&lt;br /&gt;
  else:&lt;br /&gt;
    m = 0&lt;br /&gt;
  try:&lt;br /&gt;
    return face * coupon * (1 - 1 / (1 + ytm / m) ** (maturity * m)) / ytm + face / (1 + ytm / m) ** (maturity * m)&lt;br /&gt;
  except ZeroDivisionError:&lt;br /&gt;
    return print(&amp;quot;Error: freq should be either &#039;annual&#039;, &#039;semi-annual&#039;, &#039;quarterly&#039;, &#039;monthly&#039;, or &#039;daily&#039;.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
일단 m을 구하는 과정을 코드로 작성해야 하는데 coupon*face (표시이자)를 1년마다 주는지 반년마다 주는지 분기마다 주는지를 if 함수를 통해 구하는 과정이다. 이렇게 구해진 m을 가져와서 채권의 가격을 구한다.&lt;br /&gt;
변수가 많아서 헷갈릴 수 있지만 결국에는 연금공식을 이용한 풀이이다. 거기에 만기에 받을 face를 pv화 하는 코드를 더해주면 된다. 마지막에 예외처리를 이용해서 m = 0 이 된 경우에는 원하는 print를 표시해주면 된다.&lt;br /&gt;
&lt;br /&gt;
* 가중평균만기 (duration)&lt;br /&gt;
&lt;br /&gt;
def pv(r, cf, t):&lt;br /&gt;
&lt;br /&gt;
  return cf / (1 + r) ** t&lt;br /&gt;
&lt;br /&gt;
def duration(ytm, face, maturity, coupon, freq = &#039;annual&#039;):&lt;br /&gt;
&lt;br /&gt;
  if freq == &#039;annual&#039;:&lt;br /&gt;
    m = 1&lt;br /&gt;
  elif freq == &#039;semi-annual&#039;:&lt;br /&gt;
    m = 2&lt;br /&gt;
  elif freq == &#039;quarterly&#039;:&lt;br /&gt;
    m = 4&lt;br /&gt;
  elif freq == &#039;monthly&#039;:&lt;br /&gt;
    m = 12&lt;br /&gt;
  elif freq == &#039;daily&#039;:&lt;br /&gt;
    m = 365&lt;br /&gt;
  else:&lt;br /&gt;
    m = 0 &lt;br /&gt;
  try:&lt;br /&gt;
    n = maturity * m&lt;br /&gt;
    val = pv(ytm / m, face, n) * maturity&lt;br /&gt;
    total = pv(ytm / m, face, n)&lt;br /&gt;
    for i in range(1, n + 1): &lt;br /&gt;
      val += pv(ytm / m, face * coupon / m, i) * (i / m)&lt;br /&gt;
      total += pv(ytm / m, face * coupon / m, i)&lt;br /&gt;
  except ZeroDivisionError:&lt;br /&gt;
    return print(&amp;quot;Error: freq should be either &#039;annual&#039;, &#039;semi-annual&#039;, &#039;quarterly&#039;, &#039;monthly&#039;, or &#039;daily&#039;.&amp;quot;)&lt;br /&gt;
  return val / total&lt;br /&gt;
&lt;br /&gt;
듀레이션을 구하는 과정은 분수 부분은 각 pv현금흐름을 * 해당 t를 곱합 값이다. 일단 val변수를 설정을 하고 for 반복문을 통해 각 사업년도 현금흐름 * t를 더해주는 반복문을 설정하면 된다.&lt;br /&gt;
분모 부분은 tatal 변수를 설정하고 채권의 가격을 구하는 과정이라고 생각하면 된다. val/tatal를 마지막에 작성해주면서 가중평균만기를 구해주는 코드를 작성하면 된다.  by 60180852&lt;/div&gt;</summary>
		<author><name>경영학과 김백진</name></author>
	</entry>
	<entry>
		<id>https://wiki.junhopark033.synology.me/index.php?title=%EB%94%94%EC%A7%80%ED%84%B8%EA%B8%88%EC%9C%B5&amp;diff=191</id>
		<title>디지털금융</title>
		<link rel="alternate" type="text/html" href="https://wiki.junhopark033.synology.me/index.php?title=%EB%94%94%EC%A7%80%ED%84%B8%EA%B8%88%EC%9C%B5&amp;diff=191"/>
		<updated>2025-05-07T01:02:21Z</updated>

		<summary type="html">&lt;p&gt;경영학과 김백진: /* 채권 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;디지털금융([[Digital Finance]])&#039;&#039;&#039;은 경영학전공 4학년을 대상으로 재무관리, 투자론 및 기업재무 등 재무금융 분야 교과목에서 배운 이론을 기초적인 [[파이썬|파이썬(Python)]] 프로그래밍 언어를 활용하여 실무적으로 숙달, 응용하는 강좌이다.&lt;br /&gt;
&lt;br /&gt;
= 파이썬 기초 =&lt;br /&gt;
* while 반복문&lt;br /&gt;
&lt;br /&gt;
def savings_fixed(cf, r, t):&lt;br /&gt;
&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  i = 1&lt;br /&gt;
  while(i &amp;lt;= t):&lt;br /&gt;
    total += cf * (1 + r) ** i&lt;br /&gt;
    i += 1&lt;br /&gt;
  return total&lt;br /&gt;
초기값을 0.0으로 하고 (0.0으로 해야 정수로 인식할 수 있다.) whlie 반복문을 이용해서 현금흐름(cf)이 같은 경우에 사용할 수 있다.&lt;br /&gt;
i값을 t보다 작거나 같은 값을 넣어주면서 fv 미래가치의 합을 구하는 코드이다.&lt;br /&gt;
&lt;br /&gt;
* for 반복문&lt;br /&gt;
&lt;br /&gt;
def savings_free(cfs, r):&lt;br /&gt;
&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  for cf in cfs:&lt;br /&gt;
    total = (total + cf) * (1 + r)&lt;br /&gt;
  return total&lt;br /&gt;
초기값을 0.0으로 하고 for 반복문을 이용해서 현금흐름이 각 연도마다 다른 경우에 사용할 수 있다.&lt;br /&gt;
cf 변수에 cfs 값을 넣어주면서 반복적으로 계산을 하여 fv 미래가치의 합을 구하는 코드이다. by 60180852&lt;br /&gt;
&lt;br /&gt;
= 화폐의 시간가치 =&lt;br /&gt;
* [[현재가치]]&lt;br /&gt;
&lt;br /&gt;
* 연금&lt;br /&gt;
&lt;br /&gt;
def annuity(cf, r, t):&lt;br /&gt;
  return cf * (1 - 1 / (1 + r) ** t) / r&lt;br /&gt;
&lt;br /&gt;
def annuity2(cf, r, t):&lt;br /&gt;
  return cf/r - cf/r /(1+r) ** t&lt;br /&gt;
&lt;br /&gt;
두 연금 코드는 같은 답을 도출하는데 밑에 코드를 먼저 이해하면 쉽게 이해할 수 있다. &lt;br /&gt;
cf/r 는 영구연금을 구하는 방식이고 cf/r /(1+r) ** t 해당 부분은 t년후에 영구연금을 구하는 방식이다. &lt;br /&gt;
예를 들어 3년 연금을 구하는 방법은 영구연금에서 x4년차부터 시작하는 영구연금을 (1+r)**t로 할인하고 차감하는 방식이다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 실습&lt;br /&gt;
&lt;br /&gt;
def pv(cf, r,t):&lt;br /&gt;
  return cf / (1+r) ** t&lt;br /&gt;
def npv(r, cfs):&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  for i, cf in enumerate(cfs):&lt;br /&gt;
    total += pv(cf,r,i)&lt;br /&gt;
  return total&lt;br /&gt;
def irr(cfs):&lt;br /&gt;
  rate = 0.0&lt;br /&gt;
  while(rate &amp;lt; 1.0):&lt;br /&gt;
    rate += 0.0001&lt;br /&gt;
    value = npv(rate, cfs)&lt;br /&gt;
    if(abs(value) &amp;lt;= 0.0001):&lt;br /&gt;
      print(rate)&lt;br /&gt;
&lt;br /&gt;
 rate = [] &lt;br /&gt;
 value = [] &lt;br /&gt;
 cfs = [-59, 155, -100]&lt;br /&gt;
 for i in range(1, 100): &lt;br /&gt;
  rate.append(i / 100) &lt;br /&gt;
  value.append(npv(i / 100, cfs))&lt;br /&gt;
print(rate)&lt;br /&gt;
print(value)&lt;br /&gt;
&lt;br /&gt;
간단하게 설명해보면 해당 코드를 이용해서 npv값이 0이되는 rate를 찾는 과정을 나타내고 이를 그래프로 보여 주기 위해 rate와 vlaue를 찾아가는 과정이다. pv , npv, irr 코드를 저장하고 for 반복문에 append를 사용했는데 append()는 리스트에 새로운 값을 하나씩 추가할 때 사용하는 코드입니다. append를 이용해서 0.01~0.99 까지 값을 반복적으로 넣어주면서 해당 값을 찾아주는 코드입니다. by 60180852&lt;br /&gt;
&lt;br /&gt;
= 채권 =&lt;br /&gt;
&lt;br /&gt;
*채권의 가격&lt;br /&gt;
&lt;br /&gt;
def bondprice(ytm, face, maturity, coupon, freq = &#039;annual&#039;):&lt;br /&gt;
  if freq == &#039;annual&#039;:&lt;br /&gt;
    m = 1&lt;br /&gt;
  elif freq == &#039;semi-annual&#039;:&lt;br /&gt;
    m = 2&lt;br /&gt;
  elif freq == &#039;quarterly&#039;:&lt;br /&gt;
    m = 4&lt;br /&gt;
  elif freq == &#039;monthly&#039;:&lt;br /&gt;
    m = 12&lt;br /&gt;
  elif freq == &#039;daily&#039;:&lt;br /&gt;
    m = 365&lt;br /&gt;
  else:&lt;br /&gt;
    m = 0&lt;br /&gt;
  try:&lt;br /&gt;
    return face * coupon * (1 - 1 / (1 + ytm / m) ** (maturity * m)) / ytm + face / (1 + ytm / m) ** (maturity * m)&lt;br /&gt;
  except ZeroDivisionError:&lt;br /&gt;
    return print(&amp;quot;Error: freq should be either &#039;annual&#039;, &#039;semi-annual&#039;, &#039;quarterly&#039;, &#039;monthly&#039;, or &#039;daily&#039;.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
일단 m을 구하는 과정을 코드로 작성해야 하는데 coupon*face (표시이자)를 1년마다 주는지 반년마다 주는지 분기마다 주는지를 if 함수를 통해 구하는 과정이다. 이렇게 구해진 m을 가져와서 채권의 가격을 구한다.&lt;br /&gt;
변수가 많아서 헷갈릴 수 있지만 결국에는 연금공식을 이용한 풀이이다. 거기에 만기에 받을 face를 pv화 하는 코드를 더해주면 된다. 마지막에 예외처리를 이용해서 m = 0 이 된 경우에는 원하는 print를 표시해주면 된다.&lt;br /&gt;
&lt;br /&gt;
* 가중평균만기 (duration)&lt;br /&gt;
&lt;br /&gt;
def pv(r, cf, t):&lt;br /&gt;
&lt;br /&gt;
  return cf / (1 + r) ** t&lt;br /&gt;
&lt;br /&gt;
def duration(ytm, face, maturity, coupon, freq = &#039;annual&#039;):&lt;br /&gt;
&lt;br /&gt;
  if freq == &#039;annual&#039;:&lt;br /&gt;
    m = 1&lt;br /&gt;
  elif freq == &#039;semi-annual&#039;:&lt;br /&gt;
    m = 2&lt;br /&gt;
  elif freq == &#039;quarterly&#039;:&lt;br /&gt;
    m = 4&lt;br /&gt;
  elif freq == &#039;monthly&#039;:&lt;br /&gt;
    m = 12&lt;br /&gt;
  elif freq == &#039;daily&#039;:&lt;br /&gt;
    m = 365&lt;br /&gt;
  else:&lt;br /&gt;
    m = 0 &lt;br /&gt;
  try:&lt;br /&gt;
    n = maturity * m&lt;br /&gt;
    val = pv(ytm / m, face, n) * maturity&lt;br /&gt;
    total = pv(ytm / m, face, n)&lt;br /&gt;
    for i in range(1, n + 1): &lt;br /&gt;
      val += pv(ytm / m, face * coupon / m, i) * (i / m)&lt;br /&gt;
      total += pv(ytm / m, face * coupon / m, i)&lt;br /&gt;
  except ZeroDivisionError:&lt;br /&gt;
    return print(&amp;quot;Error: freq should be either &#039;annual&#039;, &#039;semi-annual&#039;, &#039;quarterly&#039;, &#039;monthly&#039;, or &#039;daily&#039;.&amp;quot;)&lt;br /&gt;
  return val / total&lt;br /&gt;
&lt;br /&gt;
듀레이션을 구하는 과정은 분수 부분은 각 pv현금흐름을 * 해당 t를 곱합 값이다. 일단 val변수를 설정을 하고 for 반복문을 통해 각 사업년도에 현금흐름 * t를 더해주는 반복문을 설정하면 된다.&lt;br /&gt;
분모 부분은 tatal 변수를 설정하고 채권의 가격을 구하는 과정이라고 생각하면 된다. val/tatal를 마지막에 작성해주면서 가중평균만기를 구해주는 코드를 작성하면 된다.  by 60180852&lt;/div&gt;</summary>
		<author><name>경영학과 김백진</name></author>
	</entry>
	<entry>
		<id>https://wiki.junhopark033.synology.me/index.php?title=%EB%94%94%EC%A7%80%ED%84%B8%EA%B8%88%EC%9C%B5&amp;diff=190</id>
		<title>디지털금융</title>
		<link rel="alternate" type="text/html" href="https://wiki.junhopark033.synology.me/index.php?title=%EB%94%94%EC%A7%80%ED%84%B8%EA%B8%88%EC%9C%B5&amp;diff=190"/>
		<updated>2025-05-07T01:00:08Z</updated>

		<summary type="html">&lt;p&gt;경영학과 김백진: /* 채권 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;디지털금융([[Digital Finance]])&#039;&#039;&#039;은 경영학전공 4학년을 대상으로 재무관리, 투자론 및 기업재무 등 재무금융 분야 교과목에서 배운 이론을 기초적인 [[파이썬|파이썬(Python)]] 프로그래밍 언어를 활용하여 실무적으로 숙달, 응용하는 강좌이다.&lt;br /&gt;
&lt;br /&gt;
= 파이썬 기초 =&lt;br /&gt;
* while 반복문&lt;br /&gt;
&lt;br /&gt;
def savings_fixed(cf, r, t):&lt;br /&gt;
&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  i = 1&lt;br /&gt;
  while(i &amp;lt;= t):&lt;br /&gt;
    total += cf * (1 + r) ** i&lt;br /&gt;
    i += 1&lt;br /&gt;
  return total&lt;br /&gt;
초기값을 0.0으로 하고 (0.0으로 해야 정수로 인식할 수 있다.) whlie 반복문을 이용해서 현금흐름(cf)이 같은 경우에 사용할 수 있다.&lt;br /&gt;
i값을 t보다 작거나 같은 값을 넣어주면서 fv 미래가치의 합을 구하는 코드이다.&lt;br /&gt;
&lt;br /&gt;
* for 반복문&lt;br /&gt;
&lt;br /&gt;
def savings_free(cfs, r):&lt;br /&gt;
&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  for cf in cfs:&lt;br /&gt;
    total = (total + cf) * (1 + r)&lt;br /&gt;
  return total&lt;br /&gt;
초기값을 0.0으로 하고 for 반복문을 이용해서 현금흐름이 각 연도마다 다른 경우에 사용할 수 있다.&lt;br /&gt;
cf 변수에 cfs 값을 넣어주면서 반복적으로 계산을 하여 fv 미래가치의 합을 구하는 코드이다. by 60180852&lt;br /&gt;
&lt;br /&gt;
= 화폐의 시간가치 =&lt;br /&gt;
* [[현재가치]]&lt;br /&gt;
&lt;br /&gt;
* 연금&lt;br /&gt;
&lt;br /&gt;
def annuity(cf, r, t):&lt;br /&gt;
  return cf * (1 - 1 / (1 + r) ** t) / r&lt;br /&gt;
&lt;br /&gt;
def annuity2(cf, r, t):&lt;br /&gt;
  return cf/r - cf/r /(1+r) ** t&lt;br /&gt;
&lt;br /&gt;
두 연금 코드는 같은 답을 도출하는데 밑에 코드를 먼저 이해하면 쉽게 이해할 수 있다. &lt;br /&gt;
cf/r 는 영구연금을 구하는 방식이고 cf/r /(1+r) ** t 해당 부분은 t년후에 영구연금을 구하는 방식이다. &lt;br /&gt;
예를 들어 3년 연금을 구하는 방법은 영구연금에서 x4년차부터 시작하는 영구연금을 (1+r)**t로 할인하고 차감하는 방식이다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 실습&lt;br /&gt;
&lt;br /&gt;
def pv(cf, r,t):&lt;br /&gt;
  return cf / (1+r) ** t&lt;br /&gt;
def npv(r, cfs):&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  for i, cf in enumerate(cfs):&lt;br /&gt;
    total += pv(cf,r,i)&lt;br /&gt;
  return total&lt;br /&gt;
def irr(cfs):&lt;br /&gt;
  rate = 0.0&lt;br /&gt;
  while(rate &amp;lt; 1.0):&lt;br /&gt;
    rate += 0.0001&lt;br /&gt;
    value = npv(rate, cfs)&lt;br /&gt;
    if(abs(value) &amp;lt;= 0.0001):&lt;br /&gt;
      print(rate)&lt;br /&gt;
&lt;br /&gt;
 rate = [] &lt;br /&gt;
 value = [] &lt;br /&gt;
 cfs = [-59, 155, -100]&lt;br /&gt;
 for i in range(1, 100): &lt;br /&gt;
  rate.append(i / 100) &lt;br /&gt;
  value.append(npv(i / 100, cfs))&lt;br /&gt;
print(rate)&lt;br /&gt;
print(value)&lt;br /&gt;
&lt;br /&gt;
간단하게 설명해보면 해당 코드를 이용해서 npv값이 0이되는 rate를 찾는 과정을 나타내고 이를 그래프로 보여 주기 위해 rate와 vlaue를 찾아가는 과정이다. pv , npv, irr 코드를 저장하고 for 반복문에 append를 사용했는데 append()는 리스트에 새로운 값을 하나씩 추가할 때 사용하는 코드입니다. append를 이용해서 0.01~0.99 까지 값을 반복적으로 넣어주면서 해당 값을 찾아주는 코드입니다. by 60180852&lt;br /&gt;
&lt;br /&gt;
= 채권 =&lt;br /&gt;
&lt;br /&gt;
*채권의 가격&lt;br /&gt;
&lt;br /&gt;
def bondprice(ytm, face, maturity, coupon, freq = &#039;annual&#039;):&lt;br /&gt;
  if freq == &#039;annual&#039;:&lt;br /&gt;
    m = 1&lt;br /&gt;
  elif freq == &#039;semi-annual&#039;:&lt;br /&gt;
    m = 2&lt;br /&gt;
  elif freq == &#039;quarterly&#039;:&lt;br /&gt;
    m = 4&lt;br /&gt;
  elif freq == &#039;monthly&#039;:&lt;br /&gt;
    m = 12&lt;br /&gt;
  elif freq == &#039;daily&#039;:&lt;br /&gt;
    m = 365&lt;br /&gt;
  else:&lt;br /&gt;
    m = 0&lt;br /&gt;
  try:&lt;br /&gt;
    return face * coupon * (1 - 1 / (1 + ytm / m) ** (maturity * m)) / ytm + face / (1 + ytm / m) ** (maturity * m)&lt;br /&gt;
  except ZeroDivisionError:&lt;br /&gt;
    return print(&amp;quot;Error: freq should be either &#039;annual&#039;, &#039;semi-annual&#039;, &#039;quarterly&#039;, &#039;monthly&#039;, or &#039;daily&#039;.&amp;quot;)&lt;br /&gt;
bondprice(0.1,1000,5,0.03,&#039;annual&#039;)&lt;br /&gt;
&lt;br /&gt;
일단 m을 구하는 과정을 코드로 작성해야 하는데 coupon*face (표시이자)를 1년마다 주는지 반년마다 주는지 분기마다 주는지를 if 함수를 통해 구하는 과정이다. 이렇게 구해진 m을 가져와서 채권의 가격을 구한다.&lt;br /&gt;
변수가 많아서 헷갈릴 수 있지만 결국에는 연금공식을 이용한 풀이이다. 거기에 만기에 받을 face를 pv화 하는 코드를 더해주면 된다. &lt;br /&gt;
&lt;br /&gt;
* 가중평균만기 (duration)&lt;br /&gt;
&lt;br /&gt;
def pv(r, cf, t):&lt;br /&gt;
&lt;br /&gt;
  return cf / (1 + r) ** t&lt;br /&gt;
&lt;br /&gt;
def duration(ytm, face, maturity, coupon, freq = &#039;annual&#039;):&lt;br /&gt;
&lt;br /&gt;
  if freq == &#039;annual&#039;:&lt;br /&gt;
    m = 1&lt;br /&gt;
  elif freq == &#039;semi-annual&#039;:&lt;br /&gt;
    m = 2&lt;br /&gt;
  elif freq == &#039;quarterly&#039;:&lt;br /&gt;
    m = 4&lt;br /&gt;
  elif freq == &#039;monthly&#039;:&lt;br /&gt;
    m = 12&lt;br /&gt;
  elif freq == &#039;daily&#039;:&lt;br /&gt;
    m = 365&lt;br /&gt;
  else:&lt;br /&gt;
    m = 0 &lt;br /&gt;
  try:&lt;br /&gt;
    n = maturity * m&lt;br /&gt;
    val = pv(ytm / m, face, n) * maturity&lt;br /&gt;
    total = pv(ytm / m, face, n)&lt;br /&gt;
    for i in range(1, n + 1): &lt;br /&gt;
      val += pv(ytm / m, face * coupon / m, i) * (i / m)&lt;br /&gt;
      total += pv(ytm / m, face * coupon / m, i)&lt;br /&gt;
  except ZeroDivisionError:&lt;br /&gt;
    return print(&amp;quot;Error: freq should be either &#039;annual&#039;, &#039;semi-annual&#039;, &#039;quarterly&#039;, &#039;monthly&#039;, or &#039;daily&#039;.&amp;quot;)&lt;br /&gt;
  return val / total&lt;br /&gt;
&lt;br /&gt;
듀레이션을 구하는 과정은 분수 부분은 각 pv현금흐름을 * 해당 t를 곱합 값이다. 일단 val변수를 설정을 하고 for 반복문을 통해 각 사업년도에 현금흐름 * t를 더해주는 반복문을 설정하면 된다.&lt;br /&gt;
분모 부분은 tatal 변수를 설정하고 채권의 가격을 구하는 과정이라고 생각하면 된다. val/tatal를 마지막에 작성해주면서 가중평균만기를 구해주는 코드를 작성하면 된다.  by 60180852&lt;/div&gt;</summary>
		<author><name>경영학과 김백진</name></author>
	</entry>
	<entry>
		<id>https://wiki.junhopark033.synology.me/index.php?title=%EB%94%94%EC%A7%80%ED%84%B8%EA%B8%88%EC%9C%B5&amp;diff=189</id>
		<title>디지털금융</title>
		<link rel="alternate" type="text/html" href="https://wiki.junhopark033.synology.me/index.php?title=%EB%94%94%EC%A7%80%ED%84%B8%EA%B8%88%EC%9C%B5&amp;diff=189"/>
		<updated>2025-05-07T00:47:38Z</updated>

		<summary type="html">&lt;p&gt;경영학과 김백진: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;디지털금융([[Digital Finance]])&#039;&#039;&#039;은 경영학전공 4학년을 대상으로 재무관리, 투자론 및 기업재무 등 재무금융 분야 교과목에서 배운 이론을 기초적인 [[파이썬|파이썬(Python)]] 프로그래밍 언어를 활용하여 실무적으로 숙달, 응용하는 강좌이다.&lt;br /&gt;
&lt;br /&gt;
= 파이썬 기초 =&lt;br /&gt;
* while 반복문&lt;br /&gt;
&lt;br /&gt;
def savings_fixed(cf, r, t):&lt;br /&gt;
&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  i = 1&lt;br /&gt;
  while(i &amp;lt;= t):&lt;br /&gt;
    total += cf * (1 + r) ** i&lt;br /&gt;
    i += 1&lt;br /&gt;
  return total&lt;br /&gt;
초기값을 0.0으로 하고 (0.0으로 해야 정수로 인식할 수 있다.) whlie 반복문을 이용해서 현금흐름(cf)이 같은 경우에 사용할 수 있다.&lt;br /&gt;
i값을 t보다 작거나 같은 값을 넣어주면서 fv 미래가치의 합을 구하는 코드이다.&lt;br /&gt;
&lt;br /&gt;
* for 반복문&lt;br /&gt;
&lt;br /&gt;
def savings_free(cfs, r):&lt;br /&gt;
&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  for cf in cfs:&lt;br /&gt;
    total = (total + cf) * (1 + r)&lt;br /&gt;
  return total&lt;br /&gt;
초기값을 0.0으로 하고 for 반복문을 이용해서 현금흐름이 각 연도마다 다른 경우에 사용할 수 있다.&lt;br /&gt;
cf 변수에 cfs 값을 넣어주면서 반복적으로 계산을 하여 fv 미래가치의 합을 구하는 코드이다. by 60180852&lt;br /&gt;
&lt;br /&gt;
= 화폐의 시간가치 =&lt;br /&gt;
* [[현재가치]]&lt;br /&gt;
&lt;br /&gt;
* 연금&lt;br /&gt;
&lt;br /&gt;
def annuity(cf, r, t):&lt;br /&gt;
  return cf * (1 - 1 / (1 + r) ** t) / r&lt;br /&gt;
&lt;br /&gt;
def annuity2(cf, r, t):&lt;br /&gt;
  return cf/r - cf/r /(1+r) ** t&lt;br /&gt;
&lt;br /&gt;
두 연금 코드는 같은 답을 도출하는데 밑에 코드를 먼저 이해하면 쉽게 이해할 수 있다. &lt;br /&gt;
cf/r 는 영구연금을 구하는 방식이고 cf/r /(1+r) ** t 해당 부분은 t년후에 영구연금을 구하는 방식이다. &lt;br /&gt;
예를 들어 3년 연금을 구하는 방법은 영구연금에서 x4년차부터 시작하는 영구연금을 (1+r)**t로 할인하고 차감하는 방식이다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 실습&lt;br /&gt;
&lt;br /&gt;
def pv(cf, r,t):&lt;br /&gt;
  return cf / (1+r) ** t&lt;br /&gt;
def npv(r, cfs):&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  for i, cf in enumerate(cfs):&lt;br /&gt;
    total += pv(cf,r,i)&lt;br /&gt;
  return total&lt;br /&gt;
def irr(cfs):&lt;br /&gt;
  rate = 0.0&lt;br /&gt;
  while(rate &amp;lt; 1.0):&lt;br /&gt;
    rate += 0.0001&lt;br /&gt;
    value = npv(rate, cfs)&lt;br /&gt;
    if(abs(value) &amp;lt;= 0.0001):&lt;br /&gt;
      print(rate)&lt;br /&gt;
&lt;br /&gt;
 rate = [] &lt;br /&gt;
 value = [] &lt;br /&gt;
 cfs = [-59, 155, -100]&lt;br /&gt;
 for i in range(1, 100): &lt;br /&gt;
  rate.append(i / 100) &lt;br /&gt;
  value.append(npv(i / 100, cfs))&lt;br /&gt;
print(rate)&lt;br /&gt;
print(value)&lt;br /&gt;
&lt;br /&gt;
간단하게 설명해보면 해당 코드를 이용해서 npv값이 0이되는 rate를 찾는 과정을 나타내고 이를 그래프로 보여 주기 위해 rate와 vlaue를 찾아가는 과정이다. pv , npv, irr 코드를 저장하고 for 반복문에 append를 사용했는데 append()는 리스트에 새로운 값을 하나씩 추가할 때 사용하는 코드입니다. append를 이용해서 0.01~0.99 까지 값을 반복적으로 넣어주면서 해당 값을 찾아주는 코드입니다. by 60180852&lt;br /&gt;
&lt;br /&gt;
= 채권 =&lt;/div&gt;</summary>
		<author><name>경영학과 김백진</name></author>
	</entry>
	<entry>
		<id>https://wiki.junhopark033.synology.me/index.php?title=%EB%94%94%EC%A7%80%ED%84%B8%EA%B8%88%EC%9C%B5&amp;diff=188</id>
		<title>디지털금융</title>
		<link rel="alternate" type="text/html" href="https://wiki.junhopark033.synology.me/index.php?title=%EB%94%94%EC%A7%80%ED%84%B8%EA%B8%88%EC%9C%B5&amp;diff=188"/>
		<updated>2025-05-07T00:21:27Z</updated>

		<summary type="html">&lt;p&gt;경영학과 김백진: /* 파이썬 기초 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;디지털금융([[Digital Finance]])&#039;&#039;&#039;은 경영학전공 4학년을 대상으로 재무관리, 투자론 및 기업재무 등 재무금융 분야 교과목에서 배운 이론을 기초적인 [[파이썬|파이썬(Python)]] 프로그래밍 언어를 활용하여 실무적으로 숙달, 응용하는 강좌이다.&lt;br /&gt;
&lt;br /&gt;
= 파이썬 기초 =&lt;br /&gt;
* while 반복문&lt;br /&gt;
&lt;br /&gt;
def savings_fixed(cf, r, t):&lt;br /&gt;
&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  i = 1&lt;br /&gt;
  while(i &amp;lt;= t):&lt;br /&gt;
    total += cf * (1 + r) ** i&lt;br /&gt;
    i += 1&lt;br /&gt;
  return total&lt;br /&gt;
초기값을 0.0으로 하고 (0.0으로 해야 정수로 인식할 수 있다.) whlie 반복문을 이용해서 현금흐름(cf)이 같은 경우에 사용할 수 있다.&lt;br /&gt;
i값을 t보다 작거나 같은 값을 넣어주면서 fv 미래가치의 합을 구하는 코드이다.&lt;br /&gt;
&lt;br /&gt;
* for 반복문&lt;br /&gt;
&lt;br /&gt;
def savings_free(cfs, r):&lt;br /&gt;
&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  for cf in cfs:&lt;br /&gt;
    total = (total + cf) * (1 + r)&lt;br /&gt;
  return total&lt;br /&gt;
초기값을 0.0으로 하고 for 반복문을 이용해서 현금흐름이 각 연도마다 다른 경우에 사용할 수 있다.&lt;br /&gt;
cf 변수에 cfs 값을 넣어주면서 반복적으로 계산을 하여 fv 미래가치의 합을 구하는 코드이다. by 60180852&lt;br /&gt;
&lt;br /&gt;
= 화폐의 시간가치 =&lt;br /&gt;
* [[현재가치]]&lt;br /&gt;
&lt;br /&gt;
= 채권 =&lt;/div&gt;</summary>
		<author><name>경영학과 김백진</name></author>
	</entry>
	<entry>
		<id>https://wiki.junhopark033.synology.me/index.php?title=%EB%94%94%EC%A7%80%ED%84%B8%EA%B8%88%EC%9C%B5&amp;diff=187</id>
		<title>디지털금융</title>
		<link rel="alternate" type="text/html" href="https://wiki.junhopark033.synology.me/index.php?title=%EB%94%94%EC%A7%80%ED%84%B8%EA%B8%88%EC%9C%B5&amp;diff=187"/>
		<updated>2025-05-07T00:20:32Z</updated>

		<summary type="html">&lt;p&gt;경영학과 김백진: /* 파이썬 기초 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;디지털금융([[Digital Finance]])&#039;&#039;&#039;은 경영학전공 4학년을 대상으로 재무관리, 투자론 및 기업재무 등 재무금융 분야 교과목에서 배운 이론을 기초적인 [[파이썬|파이썬(Python)]] 프로그래밍 언어를 활용하여 실무적으로 숙달, 응용하는 강좌이다.&lt;br /&gt;
&lt;br /&gt;
= 파이썬 기초 =&lt;br /&gt;
* while 반복문&lt;br /&gt;
&lt;br /&gt;
def savings_fixed(cf, r, t):&lt;br /&gt;
&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  i = 1&lt;br /&gt;
  while(i &amp;lt;= t):&lt;br /&gt;
    total += cf * (1 + r) ** i&lt;br /&gt;
    i += 1&lt;br /&gt;
  return total&lt;br /&gt;
초기값을 0.0으로 하고 (0.0으로 해야 정수로 인식할 수 있다.) whlie 반복문을 이용해서 현금흐름(cf)이 같은 경우에 사용할 수 있다.&lt;br /&gt;
i값을 t보다 작거나 같은 값을 넣어주면서 fv 미래가치의 합을 구하는 코드이다.&lt;br /&gt;
&lt;br /&gt;
* for 반복문&lt;br /&gt;
&lt;br /&gt;
def savings_free(cfs, r):&lt;br /&gt;
&lt;br /&gt;
  total = 0.0&lt;br /&gt;
  for cf in cfs:&lt;br /&gt;
    total = (total + cf) * (1 + r)&lt;br /&gt;
  return total&lt;br /&gt;
초기값을 0.0으로 하고 for 반복문을 이용해서 현금흐름이 각 연도마다 다른 경우에 사용할 수 있다.&lt;br /&gt;
cf 변수에 cfs 값을 넣어주면서 반복적으로 계산을 하여 fv 미래가치의 합을 구하는 코드이다.&lt;br /&gt;
&lt;br /&gt;
= 화폐의 시간가치 =&lt;br /&gt;
* [[현재가치]]&lt;br /&gt;
&lt;br /&gt;
= 채권 =&lt;/div&gt;</summary>
		<author><name>경영학과 김백진</name></author>
	</entry>
</feed>