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

파이썬으로 배우는 포트폴리오 2장 (투자와 자산배분)

by JHistory_ 2023. 2. 6.
반응형

 

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

https://jhhistory.tistory.com/19

 

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

● 현자는 자문자답한다고 했던가 나는 아직 현자가 아니었다. 이게 맨땅에 chatgpt형님에게 질문을 너무 크게 갖다 박으니까 코딩 수정도 힘들고 뭔가 빛인 것 같았는데, 약간 그래도 답답한게

jhhistory.tistory.com

이어서 작성해본다.

 

● 자산배분과 포트폴리오

 1974년에서 1983년까지의 91개 미국 대형연기금 데이터를 분석한 결과에 따르면, 자산배분이 투자전략 보다 중요하며 총 수익률 변동성의 95.6%를 설명한다고 한다. (브린슨, 후드, 비보어의 포트폴리오 성과의 결정요인들)

 

 어떤 한 자산에 몰빵했을 때, 그 자산이 폭락하면 마음고생만 할 뿐이다. 돈을 버는 첫 번째 원칙은 돈을 잃지 않는 것이고 변동성을 제어해야 하는 것이 가장 중요하다는 것을 2022년 하락장을 겪으면서 배웠다.

● 포트폴리오 성과 측정 삼총사

 포트폴리오를 평가하는 지표에는 여러가지가 있으나, 수익률의 표준편차는 총 위험이나 변동성을 나타낸다. 펀드의 베타는 시장 대비 민감도를 나타낸다. 이외에도 샤프지수 트레이너지수, 젠센알파지수가 있다.

 - 샤프지수

 강환국 작가님이 거인의 포트폴리오에서도 제일 처음에 소개하는 지수이다.  

더보기

샤프지수 = (수익률 - 무위험 수익률 ) / 수익률의 표준편차

 분모는 리스크가 된다. 그리고 분자는 수익률이 된다. 즉, 동일한 수익률에서는 낮은 변동성을 가진 포트폴리오가 좋은 포트폴리오 이고, 동일한 변동셍어세는 높은 수익률을 가진 포트폴리오가 우수한 것이다. 즉, 어떤 변동성 단위에 대해 수익률을 얼마나 얻는 것인가? 니까 수익률이 크면 클 수록 좋으니까 샤프지수는 크면 좋은 것이다.

 - 젠센알파지수

더보기

 젠센의 알파 = 포트폴리오 수익률 - 기대(적정)수익률

 보통 알파가 클 수록 포트폴리오의 성과가 우수하며, 종목의 선택이 옳았다 라고 판단한다. S&P500 보다 수익률을 못냈다는 펀드매니저가 정말 많은데, 이를 두고 알파를 충족하지 못했다. 라고 하는 것이 이것이다. 

 

 예를들면 어떤 포트폴리오의 수익률이 15%이고, 어떤 포트폴리오의 수익률이 6%이다. 근데, S&P500수익률이 10%였으면, 전자의 포트폴리오는 5%의 초과 성과를 달성한 것이고 후자의 포트폴리오는 -4%의 성과를 달성했다고 할 수 있다는 것이다.

 - 트레이너지수

 트레이너 지수는 위험보상비율이다. 샤프지수와 비슷한 개념인데, 분모에 표준편차가 아니라 포트폴리오 베타가 들어간다. (시장 기대수익률)

더보기

트레이너지수(T) = (포트폴리오 수익률(R_p) - 무위험수익률(R_f) / 포트폴리오 베타)

 역시 값이 클 수록 우월한 포트폴리오다.

 

- MDD (maximum Drawdown)

 최대 낙폭이라고 하여 고점에서 저점까지의 최대 누적 손실을 의미한다.

더보기

MDD = (기간 중 최저 가치 - 최고 가치 ) / 최고가치

파이썬으로 간단히 든 예제를 가져오면

import numpy as np
a=np.maximum.accumulate(np.array([11,12,13,20,19,18,17,18,23,21]))
print(a)

 

np.maximum accmulate라는 함수는 maximum값을 계속 갱신해서 축적하여 리스트에 대신 채워주는 개념이다. 위와 같이 코딩하면 아래와 같은 결과를 얻을 수 있다.

[11 12 13 20 20 20 20 20 23 23]

이걸 이용하여 어떤 array의 MDD를 계산해보자.

import numpy as np

values=[100,120,130,100,65,80,100,120,140,160]

def mdd(x):
    arr=np.array(x)
    idx_lower=np.argmin(arr-np.maximum.accumulate(arr))
    idx_upper=np.argmax(arr[:idx_lower])
    return (arr[idx_lower]-arr[idx_upper])/arr[idx_upper]
 

print(mdd(values))

이러면 -0.5라는 값을 얻을 수 있다. 130에서 65로 떨어진 구간에서 최대 낙폭이 50%인 것이다.

 


https://www.portfoliovisualizer.com/

 

Portfolio Visualizer

Portfolio Visualizer is an online software platform for portfolio and investment analytics to help you make informed decisions when comparing and analyzing portfolios and investment products. Our suite of quantitative tools covers portfolio modeling and ba

www.portfoliovisualizer.com

여기서 자산배분을 백테스트해볼 수 있는 플랫폼이 있다. 리벨런싱이 없다고 하면, Chat GPT가 만든 프로그램과 유사한 방식으로 돌아가는 것 같다. gpt가 만든 백테스팅 프로그램에 리벨런싱을 넣고, 자산군을 동시에 넣을 수 있는 기능을 추가하면 비슷한 기능이 구현되지 않을까 싶다. 이런거 보면 굳이 내가 뭘 만들려고 노력해야되나 싶긴 하다..

 

https://jhhistory.tistory.com/21

 

Python의 Quandl을 사용하여 간단한 백 테스팅 프로그램 의뢰하기, 50일 이동평균선 200일 이동평균선

* 뭔가 원하는대로 나온 것 같지는 않지만, 일단 진행하면서 글을 써서 아까워서 발행해봅니다. 마지막에 모르는 것이 있어서 발행을 머뭇거렸습니다. 다른 함수 기능에 대해 공부할 수 있어서

jhhistory.tistory.com

 

반응형

댓글