본문 바로가기

API

[FinanceDataReader] 주가 및 샤프비율 샤프지수(sharp) 계산

반응형

FinanceDataReader를 이용해서 주가를 확인하고 샤프지수를 계산해보겠습니다.

FinanceDataReader의 설치 및 기본 사용법이 필요하신 분은 1번 참조 부탁드립니다.

1. FinanceDataReader 설치 및 주가정보 확인(Skip가능)
2. 주가 수집
3. 샤프 비율 계산

4. 2022년 코스피의 샤프 지수 상위 Top 20

 

 

1. FinanceDataReader 설치(Skip가능)

https://yenpa.tistory.com/19

 

[FinanceDataReader] 설치 및 주식 주가 정보 가져오기(코스피, 코스닥)

국내 주식 정보를 가져와 보겠습니다. FinanceDataReader의 수집데이터의 변경이 있었네요. 내용 수정했습니다(2022/11/09) 1. FinanceDataReader 설치 2. 종목 정보 가져오기 3. 주가 정보 가져오기 1. FinanceDataR

yenpa.tistory.com

 

2. 주가 수집

필요 라이브러리 import 하고 거래소 전체 회사 리스트를 저장합니다.

import FinanceDataReader as fdr
from datetime import datetime, timedelta
df_list=fdr.StockListing('KRX')

삼성전자의 주가를 2010-01-01부터 불러오겠습니다.

name='삼성전자'
df_filter=df_list.loc[df_list['Name']==name]
code=df_filter['Code'].values[0]
startdate='2010-01-01'
enddate=(datetime.now() + timedelta(days=-1)).strftime('%Y-%m-%d')

samsung=fdr.DataReader(code,startdate,enddate)
samsung


삼성전자의 일별 누적 수익률을 계산하겠습니다.

samsung['누적수익률']=((samsung['Change'] + 1).cumprod()-1)
samsung


삼성전자와 마찬가지로 KOSPI 정보를 2010-01-01부터 불러오고 수익률을 계산하겠습니다.

kospi=fdr.DataReader('KS11',startdate,enddate)
kospi['Change']=kospi['Close'].pct_change()
kospi['누적수익률']=((kospi['Change'] + 1).cumprod()-1)
kospi

 

3. 샤프 비율 계산

샤프 비율은 아래와 같이 계산됩니다.(출처 : fnwiki http://fnwiki.org/sharpe_ratio/)



Rp는 오늘 예제에서는 삼성전자의 주가를 사용하고, Rf는 코스피 지수를 기준으로 계산해보겠습니다.
계산을 위해서는 Rp의 표준편차가 필요합니다.

samstd=samsung['Change'].std()

삼성전자와 코스피의 수익률을 각각 저장합니다.

sam=samsung.loc[samsung.index=='2022-12-01','누적수익률'].values[0]
kos=kospi.loc[kospi.index=='2022-12-01','누적수익률'].values[0]


마지막으로 샤프 비율을 계산하겠습니다.

(sam/100-kos/100)/samstd

1.45라는 수치가 나왔네요

 

 

4. 2022년 코스피의 샤프 지수 상위 Top 20

코스피 전체 회사 리스트를 저장합니다.

kospi_list=df_list.loc[df_list['Market']=='KOSPI']

2022-01-01~2022-12-02의 코스피 지수의 누적 수익률을 구하고

2022-12-01의 데이터를 kos에 저장합니다. 

연초 대비 -17%가 계산이 됩니다.

startdate='2022-01-01'
enddate='2022-12-02'

kospi=fdr.DataReader('KS11',startdate,enddate)
kospi['Change']=kospi['Close'].pct_change()
kospi['누적수익률']=((kospi['Change'] + 1).cumprod()-1)
kos=kospi.loc[kospi.index=='2022-12-01','누적수익률'].values[0]
kos

 

그다음으로는 코스피의 각 회사별로 2022년의 주가를 불러와서

누적 수익률 및 표준편차를 구합니다.

결과를 result_all에 저장합니다.

import pandas as pd

df=pd.DataFrame(result_all)
df

 

상위 20개 회사만 구해보겠습니다.

top20=df.loc[df['누적수익률']!=0].sort_values('샤프지수',ascending=False).iloc[:20,:]
top20

삼천리 및 대성홀딩스 금양 등의 회사의 소르티노 지수가 높은 것을 알 수 있습니다.

 

 

그래프로 확인하겠습니다.

import plotly.express as px

top20_1=top20.sort_values('샤프지수')
fig=px.bar(x=top20_1['샤프지수'], y=top20_1['name'])
fig.show()

 


이상으로 샤프지수를 계산하고 2022년 샤프지수 상위 회사를 알아봤습니다.

반응형