FinanceDataReader를 이용해서 주가를 확인하고 소르티노 지수를 계산해보겠습니다.
FinanceDataReader의 설치 및 기본 사용법이 필요하신 분은 1번 참조 부탁드립니다.
1. FinanceDataReader 설치 및 주가정보 확인(Skip가능)
2. 주가 수집
3. 소르티노 비율 계산
4. 2022년 코스피의 소르티노 지수 상위 Top20
1. FinanceDataReader 설치(Skip가능)
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
3. 소르티노 비율 계산
샤프 비율은 아래와 같이 계산됩니다
Rp : 연간 투자수익률
rf : 무위험수익률
σd : 표준편차(마이너스 수익률)
Rp는 오늘 예제에서는 삼성전자의 주가를 사용하고, rf는 코스피 지수를 기준으로 계산해보겠습니다.
계산을 위해서는 rp의 표준편차(마이너스 수익률)가 필요합니다.
삼성전자의 전체 기간 중 수익률이 마이너스인 날들로 표준편차를 구합니다.
samstd=samsung.loc[samsung['Change']<0,'Change'].std()
samstd
삼성전자와 코스피의 수익률을 각각 저장합니다.
sam=samsung.loc[samsung.index=='2022-12-01','누적수익률'].values[0]
kos=kospi.loc[kospi.index=='2022-12-01','누적수익률'].values[0]
마지막으로 소르티노 비율을 계산하겠습니다.
2.36이라는 수치가 나왔습니다.
(sam/100-kos/100)/samstd
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에 저장합니다.
result_all=[]
for i,r in kospi_list.iterrows():
code=r['Code']
stock=fdr.DataReader(code,startdate,enddate)
stock['누적수익률']=((stock['Change'] + 1).cumprod()-1)
sto=stock.loc[stock.index=='2022-12-01','누적수익률'].values[0]
std=stock.loc[stock['Change']<0,'Change'].std()
result={}
result['date'] = enddate
result['name'] = r['Name']
result['누적수익률'] = sto
result['소르티노지수']=(sto/100-kos/100)/std
result_all.append(result)
result_all을 DataFrame으로 변환합니다.
import pandas as pd
df=pd.DataFrame(result_all)
df
2022-12-02일 기준으로 아래의 데이터의 수집 및 계산이 되었습니다.
상위 20개 회사만 구해보겠습니다.
top20=df.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()
이상으로 소르티노 지수를 계산하고 그래프로 확인해봤습니다.
'API' 카테고리의 다른 글
[한국은행 API] 인증키 신청 및 100대 통계 지표 수집 (8) | 2022.12.09 |
---|---|
[FinanceDataReader] CAGR, MDD, 샤프지수,소르티노지수 계산 및 코스피 회사에 대한 결과 시각화 (4) | 2022.12.09 |
[FinanceDataReader] 주가 및 샤프비율 샤프지수(sharp) 계산 (9) | 2022.12.06 |
[Fred API] 달러 인덱스와 금, 은, 구리 비교 그래프 (11) | 2022.12.05 |
[Fred API] 원달러 환율, 달러 인덱스 비교 그래프 (4) | 2022.12.02 |