본문 바로가기
미래걱정/주식

파이썬으로 배우는 포트폴리오 (책 리뷰 및 실습 기록)

by JHistory_ 2023. 1. 29.
반응형

● 현자는 자문자답한다고 했던가

 나는 아직 현자가 아니었다. 이게 맨땅에 chatgpt형님에게 질문을 너무 크게 갖다 박으니까 코딩 수정도 힘들고 뭔가 빛인 것 같았는데, 약간 그래도 답답한게 많았다. 뭘 물어봐야하는지 모르니까 

 내 스스로 코딩 처음 시작한 코린이라는 사실을 다시 자각하고 책 한개의 커리큘럼을 따라가보기로 하였다. 파이썬 생 기초부터 하면 재미없으니까 최종 목적인 백테스팅, 포트폴리오, 퀀트에 부합하는 책을 가지고 이것 저것 따라가보자! 선택한 책은 일단 이거다.

 
파이썬으로 배우는 포트폴리오
이 책은 주식 투자에서 위험을 줄이고 투자 수익을 극대화하기 위한 일환으로 여러 종목에 분산 투자하는 방법인 포트폴리오에 초점을 맞추고 있다. 재무 기초, 포트폴리오 이론, 투자 모델을 수학과 그림, 파이썬 코드를 사용해 명확히 이해시키고자 했다. 파이썬의 기초는 물론 NumPy, Matplotlib, Pandas의 핵심 내용을 살펴보고, 실제 코드로 구현할 때는 주석으로 한줄한줄 자세히 코드를 설명해 이해를 높였다. 또한, 실제 주식시장 데이터를 사용하는 방법, Yahoo_fin 패키지를 사용해 재무 데이터를 가져오는 방법도 함께 소개한다.
저자
곽승주
출판
길벗
출판일
2021.03.15

● 일단 구글 코랩에 들어가보자.

 구글 코랩은 웹에서 파이썬을 동작시킬 수 있는 서비스라고 한다. 

 

https://colab.research.google.com/

 

Google Colaboratory

 

colab.research.google.com

 

 설명 영상을 보니 data 정렬에 대한 자체적인 UI도 제공하고, RUN했던 이력에 대ㅇ해 저장도 되고, google drive에 넣어놓고 공간제약 상관없이 내ㅑ가 작성한 코드에 대해 접근할 수 있고, UI메뉴에 대한 옵션이 Command Palette로 검색해서 찾을 수도 있고 사용자 친화적인 코딩 편집기 인 것 같다.

 

https://www.youtube.com/watch?v=rNgswRZ2C1Y 

 

● 기초 다뤄보기

UI는 이렇게 생겼다. MS visual studio와는 다르게 한 가지 창으로 구성되어 있으며 만약에 quandl같은 패키지를 설치하려면 !를 치고 명령어를 입력하면된다. 

!pip install quandl

그러면 이런식으로 내 컴퓨터에는 깔려있다고 표시가 된다. 책에있는 거의 모든 내용은 아래 깃허브에 수록되어 있으며, 책을 보면서 몰랐던 기본적인 내용을 한 두개씩 적어보자.

 

 

GitHub - gilbutITbook/080227: 파이썬으로 배우는 포트폴리오 소스 코드

파이썬으로 배우는 포트폴리오 소스 코드. Contribute to gilbutITbook/080227 development by creating an account on GitHub.

github.com

 - 데이터 객체

몰랐던 내용이 있었다. Matlab을 사용했었다 보니 배열에서 파이썬과 약간 다른점이 있었따. a=[] 를 리스트라고 통칭하는 것 같다. 이때, a=[1,2,3,4,5] 라고 하면 a라는 방에다가 1,2,3,4,5 를 나열해서 저장하는 것은 똑같지만,

 

a=[1,2,3]  + [6,5,4] 라고 하면 매트랩은 각 성분끼리 더하게 되는데, 파이썬은 [1,2,3,6,5,4]라는 배열이 만들어 진다고 한다.

a=[1,2,3] * 2 도 마찬가지로 [1,2,3,1,2,3] 이렇게 만들어진다고 한다.

- 튜플과 딕셔너리

 리스트는 [ ] , 튜플은 ( ), 딕셔너리는 { } 를 사용한다. 튜플은 변경이 불가능하다. 딕셔너리는 key와  value값 2개를 매칭해서 사용한다. 

 

 프로그램이 실행되는 동안 배열이 깨지지 않아야 하는 목록이 있으면 튜플을 사용하고, 인덱스가 아닌 a[1], a[3] 이런식으로 주소를 호출하는게 아닌, key로서 값을 제어할 때 유리하다고 한다.  a = { 'one':1, 'two':2 } 이런식으로 구성되면 딕셔너리다.  

- 들여쓰기

 파이썬에서는 들여쓰기를 하지 않으면, 오류로 인식된다. 피보나치 수열을 만든다고 했을때, def 밑에 몇 줄 들여서 시작하고 while을치고도 그 밑에 while문에서는 몇 개 들여서 시작이 된다. 저걸 무시하면 에러가 뜬다.

def fib(n):
   a,b = 0,1
   while a<n:
     print(a,end='')
     a,b=b,a+b
     print()

fib(10)

 - NPV와 IRR 

 NPV는 Net present Value, IRR은 Internal Rate of Return의 약자로써 각각 순현재가치와 내부수익률을 의미한다. 둘다 모두 현금흐름을 할인하는 방법이다.

 

 1) NPV = Sum ( 현금흐름 / (1+할인율)^기간) 

 

  현재의 액면가를 나타내는 현금흐름의 순 가치이다. 돈의 시간 가치로 인해 오늘 돈을 받는 것이 내일 돈을 받는 것 보다 가치가 높다. NPV는 미래에 발생할 일련의 현금흐름을 현재가치로 계산한 것이다.

 

 예를 들어 -70,000만원을 사용해야하는데, 1년부터 5년까지 들어오는 현금흐름이 12,000 / 15,000 / 18,000 / 21,000 / 26,000 만원이다. 그랬을 때, 이걸 다 합쳤는데 0 이하면 사업해도 손해인 것이다.

cashflows = [12000,15000,18000,21000,26000]
i=0
r=0.015

npv=-70000

for c in cashflows:
  i=i+1
  npv = npv + c/(1+r)**i

print(npv)

 출력된 값은 17516.929512135568으로 타장한 사업이라고 할 수 있다. n년차 현금 / (1+이율)^n년 으로 나누어 이 현금을 지금의 가치로 환산하는 할인율 개념이다. 

 

 금리가 오르면 분모가 커지기 때문에, 미래에 벌어들일 돈은 같아도 그 돈을 현재로 환산했을 때 가치가 떨어진다. 그래서 금리가 오르면 PER가 높은, 아직 돈을 많이 벌지 못하는 미래에 돈을 많이 벌 것으로 예상되는 성장기술주들의 주가가 곤두박질 치는 것이다. 왜냐면 그 미래에 벌 일정한 액수의 돈을 현재가치로 환산하면 그 가치가 금리가 오를 수록 떨어지기 때문이다.

 

 2) IRR 

 현재 시점의 가치를 미래시점의 가치로 환산하면 이를 '수익률' 위에 설명한 것과 관계있는 것처럼 미래시점의 가치를 현재 시점의 가치로 환산하면 '할인율'이다. IRR은 NPV를 0으로 만드는 값이다. IRR이 시장이자율보다 높으면 그 사업을 채택하고 IRR이 시장이자율보다 낮으면 그냥 그 돈 쓰지말고 은행에 넣어두면 그게 더 이득인 셈이 된다. (이것만 가지고 결정하지는 않지만..)

 

 이 IRR을 실제로 구한다면 수치해석을 해야한다. 왜냐면 지수 함수가 있으니까.. ^^;; 근데 우리는 뭐가 있다? 모듈이 있다. 

import scipy as sp

# 현금흐름을 cashflows 리스트에 저장
cashflows = [ -70000, 12000 , 15000 , 18000 , 21000 , 26000 ]

# scipy 라이브러리의 irr함수를 사용하여 내부수익률을 계산
irr = sp.irr(cashflows)

# 구한 IRR을 npv의 할인율로 사용하여 NPV를 구한다. 정확하다면 NPV는 0이다
npv = sp.npv(irr, cashflows)

# 결과를 출력한다. 결과는 문자열의 서식기능을 이용한다
print('IRR {0:.1%} makes NPV {1:.2f} '.format(irr,npv))

근데, irr함수가 에러가 나네? 뭔가 .. 잘못된 것 같지만 일단 넘어간다. 나머지는 대학교때 배운 통계지식들 이므로 Pass하도록 하겠다! 2장에서 보자 ~


여기서 책 내용의 거의 대다수를 확인할 수 있다.

 

https://www.gilbut.co.kr/main/index

 

길벗, 이지톡

IT, 어학, 자기계발, 재테크, 인문, 여행 등 학습과 실용 분야 출판

www.gilbut.co.kr

출판사 길벗 사이트

https://github.com/gilbutITbook/080227

 

GitHub - gilbutITbook/080227: 파이썬으로 배우는 포트폴리오 소스 코드

파이썬으로 배우는 포트폴리오 소스 코드. Contribute to gilbutITbook/080227 development by creating an account on GitHub.

github.com

책 소스 예제

https://github.com/jimsjoo

 

jimsjoo - Overview

A professional MS-Office developer(VBA, VSTO, Office.js) and a quantitative developer(VBA, Python and R). And Google App Scripter for RPA - jimsjoo

github.com

저자 깃허브

https://thebook.io/080227/ch01/03/

 

파이썬으로 배우는 포트폴리오: 1.3 NPV와 IRR

더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.

thebook.io

 

반응형

댓글