06) 수익률 계산하기 - 금융 데이터 분석을 위한 파이썬 판다스

마지막 업데이트: 2022년 6월 15일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
(b) 그림 6.6.6 분기 정보가 추가된 데이터프레임

06) 수익률 계산하기

삼성전자의 전일 종가가 10,000원이었고 오늘은 12,000 원이라고 할 때 하루 동안의 수익률을 계산해봅시다. 여러분은 간단히 수익률이 20%라는 것을 바로 알아차리셨을 겁니다. 이를 수식으로 정리하면 다음과 같습니다. 여기에 백분율로 나타내기 위해 100을 곱해주면 20%가 나옵니다.

60일 거래일 전에 매수한 후 금일 종가에 매도한 경우의 수익률 역시 다음과 같이 계산할 수 있습니다.

판다스의 데이터프레임은 수익률을 계산하는 pct_change 메서드를 제공합니다. 참고로 pct_change에서 pct는 Percent의 약어입니다. 표 6.6.1의 삼성전자와 LG전자의 최근 5일 종가 데이터로 pct_change 메서드를 사용해 보겠습니다. 데이터를 간략하게 표현하기 위해 날짜는 생략했습니다.

표 6.6.1 삼정전자와 LG전자의 최근 5일 종가

삼성전자 LG전자
52200 68200
52300 67800
52900 68800
52000 67500
51700 66300

먼저 위 데이터를 판다스의 데이터프레임으로 표현하고 pct_change 메서드를 호출해봅시다.

코드를 실행하면 그림 6.6.1의 데이터프레임을 얻을 수 있습니다. 0번 이전의 데이터가 없어서 첫 번째 인덱스의 값은 NaN으로 06) 수익률 계산하기 - 금융 데이터 분석을 위한 파이썬 판다스 표시됩니다. 1번 인덱스의 삼성전자는 다음 수식과 같이 계산되어 0.001916가 저장됐습니다.

이를 반복하여 삼성전자와 LG전자의 각 거래일에서 하루 전 종가로 수익률을 계산한 것을 알 수 있습니다. shift 메서드로 변화율을 직접 계산할 수도 있지만 pct_change 메서드를 사용하면 짧은 코드로 같은 기능을 표현할 수 있습니다.

그림 6.6.1 pct_change 메서드 적용 결과

하루 전이 아니라 2일 전에 사서 오늘 팔았을 때의 수익률을 계산할 수도 있습니다. 이 경우 2일 전 데이터와 당일 데이터를 비교해야 합니다. 다음 코드는 shift 메서드를 사용해서 수익률을 직접 계산합니다.

pct_change 메서드의 periods 파라미터를 사용해서 2일 보유 수익률을 계산할 수 있습니다. 검증된 메서드를 이용하면 의도치 않은 실수를 줄일 수 있어서 위와 같이 직접 구현하는 것보다는 pct_change 메서드를 사용하는 것이 좋습니다.

코드를 실행한 결과 그림 6.6.2의 데이터프레임을 얻을 수 있습니다. 0번과 1번 인덱스에는 이전 데이터가 존재하지 않기 때문에 수익률을 계산할 수 없어 NaN으로 표시됐습니다. 2번 인덱스에 있는 값은 0번째 인덱스의 값과 비교해서 수익률이 계산됩니다.

그림 6.6.2 periods=2를 적용한 pct_change

삼성전자와 LG전자의 데이터로 보유 후 2일 뒤 매도하는 전략의 누적 수익률을 계산해 봅시다. pct_change로 인접한 두 값의 비율(수익률)을 얻어와서 원금 1을 더한 시리즈에 cumprod 메서드로 누적수익률을 계산합니다. cumprod 메서드는 시리즈에 대해서 누적곱을 리턴합니다.

코드를 실행한 결과 그림 6.6.3의 수익률을 얻습니다. 가장 마지막 행에는 삼성전자와 LG전자의 최종 수익률이 들어 있습니다.

그림 6.6.3 이틀 보유 전략의 누적 수익률

ss_ex_1.xlsx 엑셀 파일을 사용해서 각 분기의 시가 대비 일일 상승률(종가 기준)을 계산해 보겠습니다. read_excel함수로 데이터를 읽어오며, usecols 파라미터로 일자, 시가, 종가 컬럼만을 선택합니다. 날짜 컬럼을 데이터프레임의 인덱스로 지정하고 데이터는 일자를 기준으로 오름차순 정렬합니다.

코드를 실행한 결과 그림 6.6.4와 같은 127개의 시가와 종가를 확인할 수 있습니다. 2021년 1분기의 시가는 2021-02-15의 83800입니다. 1분기에 해당하는 1월부터 3월은 83800을 기준으로 상승률을 계산해야 합니다. 뿐만 아니라 2분기, 3분기, 4분기 각각의 시가와 비교해서 종가가 얼마만큼 상승했는지를 계산해야 합니다.

그림 6.6.4 ss_ex_1 엑셀에 저장된 데이터프레임

시가 컬럼에 resample 메서드를 사용해서 분기(quarter) 별로 데이터를 샘플링합니다. 이때 샘플링된 각 그룹의 첫 번째 값을 선택하도록 first 메서드를 적용합니다. first 메서드를 호출한 결과는 시리즈인데 to_frame 메서드를 사용해서 데이터프레임으로 변경합니다.

Grouper 객체를 사용해서 분기별 데이터를 집계할 수도 있습니다.

코드를 실행하면 그림 6.6.5와 같이 분기별로 저장된 시가가 데이터프레임으로 출력됩니다. 샘플링한 데이터프레임의 인덱스(일자)는 각 분기의 마지막 날짜가 들어 있습니다. 컬럼이 하나지만 데이터 타입이 데이터프레임입니다.

그림 6.6.5 샘플링한 분기별 시가

수익률을 계산하기 위해 그림 6.6.4와 그림 6.6.5를 '분기별'로 연결해야 합니다. 따라서 단순히 이어 붙이는 concat 보다는 merge를 사용해야 하며, 데이터프레임을 병합하기 위해 기준이 되는 '분기' 컬럼을 각 데이터프레임에 추가해야 합니다.

코드를 실행한 결과 그림 6.6.6과 같이 두 개의 데이터프레임을 얻을 수 있습니다. 그림 6.6.6의 (b)는 df의 상위 5개 항목만 출력했습니다.


(a)

(b) 그림 6.6.6 분기 정보가 추가된 데이터프레임

다음 코드는 필요한 데이터만을 슬라이싱해서 두 개의 데이터프레임을 병합합니다. merge 함수는 기본적으로 인덱스를 제외한 값만을 합치기 때문에 reset_index 메서드로 인덱스를 값으로 치환한 뒤에 merge합니다.

merge 함수를 호출한 결과 그림 6.6.7의 일자, 종가, quarter, 시가가 포함된 데이터프레임을 얻을 수 있습니다. 시가 컬럼은 분기별 가격이 들어있어서 종가 컬럼과 나누기만 하면 쉽게 수익률을 계산할 수 있습니다.

구글 스프레드시트 주식 배당 관리 - 2. 수익률 계산, 색깔 넣기

주식 투자에 있어서 가장 중요한 것은 수익률이다. 그러려면 평균단가를 계산해야 하는데, 스프레드시트로 평균단가를 계산하는 것이 그리 간단치 않다. 그래서 나같은 경우 각 종목의 평균단가는 MTS에 있는 것을 옮겨 적는 식으로 한다. 귀찮기는 하지만 실시간 스프레드시트를 실시간 매매에 사용하는 것이 아니라면 나쁘지만은 않다고 생각한다.

1. 수익률 계산하기

그래서 일단 아래처럼 만들어 볼 수 있다. 평균단가는 직접 쳐넣은 것이다.

여기까지 하고 나면 수익률을 계산해볼 수 있다.

일반적으로 수익률을 계산 방법은 다음과 같다.

수익률 = 현재가 / 평균단가 - 1

그래서 계산을 해보면 다음과 같다.

수식 자체에 100을 곱해도 되지만 수익률이 들어있는 셀들을 드래그하고,

위의 툴바에서 % 아이콘을 누르면

이렇게 %로 바뀐 수익률을 볼 수 있다.

2. 손익에 따라 빨간색, 파란색으로 색깔 넣기

그런데 손익 여부를 한 눈에 파악하려면 색깔로 표시하는 것이 가장 좋은 것 같다. 그럴 때 조건부 서식을 사용한다. 조건부 서식을 적용하고 싶은 셀을 클릭하고, 메뉴바에서 "서식-조건부 서식"을 클릭한다.

그리고 서식 규칙을 예를 들어 위와 같이 설정한다. 각각 값이 0을 초과하는 경우 분홍색, 미만인 경우 파란색으로 셀을 채워넣도록 한 것이다. 그러고 나면

위의 경우처럼 셀의 색깔이 변한다. 그런데 셀 H2의 조건부 서식을 다른 셀에도 적용해야 한다. 그러러면 셀 H2를 클릭한 채로 ctrl+c, 맥북이라면 command+c를 눌러 셀을 카피한다. 그리고 속성을 붙여넣고 싶은 셀들을 드래그한 뒤 오른쪽 클릭을 한다.

그리고 "조건부 서식만" 붙여넣으면

이렇게 수익이 난 종목은 분홍색, 손실이 난 종목은 파란색으로 표시가 된다.

3. 셀 안에 수익률을 시각화하는 바 그래프 넣기

위의 경우처럼 단순하게 수익이면 분홍색, 손실이면 하늘색으로 표시하는 방법도 있다. 하지만 이 방법은 수익이나 손실이 어느 정도나 큰지, 작은지를 한 눈에 보여주기 어렵다. 그래서 셀 안에 수익률을 시각화하는 바 그래프를 넣는 방법을 정리한 포스팅을 올려두었으니 도움이 됐으면 한다.

수익률 바 그래프

위와 같이 수익률을 바 그래프로 시각화할 수 있다.

아래 링크를 참고하면 위의 이미지처럼 종목별 수익률을 바 그래프로 만들어 셀 안에 넣을 수 있다.

구글 스프레드 시트 주식 배당 관리 - 33. 셀 안에 수익률 바 그래프 넣기

구글 스프레스 시트를 이용하면 셀 안에 개별 종목, 혹은 각 섹터의 수익률을 표시하는 바 그래프를 넣을 수 있다. 이는 sparkline이라는 기능을 통해서 가능하다. 셀 안에 바 그래프를 넣으면 종목

4. 포트폴리오 전체의 총수익률 구하기

종목별 수익률을 구했으면 포트폴리오 전체의 수익률, 즉 총수익률도 구해보고 싶을 것이다. 이에 대해서 정리한 별도의 포스팅을 올려두었으니 도움이 됐으면 한다.

구글 스프레드시트 주식 배당 관리 - 11. 총수익률 표시하고 색깔 넣기

포트폴리오에 반드시 포함되어야 할 것이 총수익률이다. 개별 종목의 수익률도 중요하지만 종목마다 비중이 다르기 때문에 한 종목의 수익률에 따라 상황을 낙관하거나 비관하게 될 위험성이

한빛미디어

주식 투자자의 43%는 코로나19 이후 주식을 시작했고, 이중 92%는 주식 투자를 계속할 예정이라고 합니다. 투자한 종목과 관심 있는 종목의 데이터를 자동으로 불러와서 관리할 수 있다면 얼마나 좋을까요?

여기 국내외 주식 시세 정보를 불러오는 구글 스프레드 시트의 멋진 GOOGLEFINANCE 함수에 대해 알아보겠습니다.

일잘러의 비밀_스프레드시트_googlefinance_함수_주식 투자 손익

그림_핵심 함수 | GOOGLEFINANCE

GOOGLEFINANCE는 매우 강력한 함수입니다. Morningstar, Thomson Reuters, ICE Data Services 등으로부터 제공받는 금융 상품 데이터를 불러올 수 있습니다. 전 세계 증시에 상장된 주식들의 정보뿐 아니라 채권, 환율, 암호화폐에 관한 데이터까지 제공됩니다.

01 연두색 배경 부분을 완성해보겠습니다. [E4]셀에 수식 =GOOGLEFINANCE(JOIN( ":" , $B4 , $C4 ), E$2 ) 를 입력합니다. 인수 중 티커를 거래소와 코드를 결합한 문자열로, 속성을 [E2]셀의 값인 “PRICE”로 입력해주는 수식입니다.

01 일잘러의 비밀_스프레드시트_googlefinance_함수_예제_주식 투자 손익.PNG

02 최근 30일 그래프를 넣을 L열을 제외한 [E4:K4]까지 선택하고 06) 수익률 계산하기 - 금융 데이터 분석을 위한 파이썬 판다스 Ctrl + R 을 눌러 [E4]셀의 수식을 범위 안에 붙여넣습니다. [F2]셀부터 [K2]셀의 값이 속성 인수로 적용됩니다.

06) 수익률 계산하기 - 금융 데이터 분석을 위한 파이썬 판다스 02 일잘러의 비밀_스프레드시트_googlefinance_함수_예제_주식 투자 손익.PNG

03 일잘러의 비밀_스프레드시트_googlefinance_함수_예제_주식 투자 손익.PNG

04 [L4]셀은 SPARKLINE 함수를 써서 소형 차트를 만들 겁니다. [L4]셀에 수식 =SPARKLINE(GOOGLEFINANCE(JOIN( ":" , $B4 , $C4 ), "PRICE" ,TODAY() -30 ,TODAY())) 를 입력합니다. 30일 전부터 현재까지의 종가를 배열로 받아서 SPARKLINE 함수에 넣어주는 수식입니다. SPARKLINE 함수는 셀 안에 간단한 선, 막대 차트를 그려주는 함수로 자세한 설명은 6장의 마지막에서 알아봅니다.

04 일잘러의 비밀_스프레드시트_googlefinance_함수_예제_주식 투자 손익.PNG

05 일잘러의 비밀_스프레드시트_googlefinance_함수_예제_주식 투자 손익.PNG

06 해외 주식의 경우 소수점 둘째 자릿수까지 나오도록 [E9:F10], [H9:J10] 범위를 선택하고 [소수점 이하 자릿수 증가]를 클릭하여 숫자 서식을 바꿔줍니다. 이제 언제든 구글 스프레드시트를 열어놓고 제 잔고를 보며 뿌듯해 할 수 있습니다. 저런 수익률이면 좋겠군요

06 일잘러의 비밀_스프레드시트_googlefinance_함수_예제_주식 투자 손익.PNG

여기서 잠깐!
GOOGLEFINANCE를 쓸 때 고려할 점▶ 국내 증시는 20분 지연 시세로 표시됩니다. 현재가 부분은 실시간 주가가 표시되는 국내 포털 사이트 정보를IMPORTXML 등의 함수로 가져오면 실시간 주가로 반영할 수 있겠죠. 수식에 ARRAYFORMULA를 쓰지 않은 것은 GOOGLEFINANCE 함수가 배열 함수라서 ARRAYFORMULA와 함께 사용할 수 없기 때문입니다. B열에 사용한 거래소 코드 입력의 데이터 확인 목록은 [EXCHANGE] 시트에 체크 박스와 FILTER 함수를 이용해 만들어놓았습니다. 궁금한 분들은 참고하시기 바랍니다.

GOOGLEFINANCE 함수로 확인 가능한 정보는 https://www.google.com/finance 에서 모두 조합해서 볼 수 있기 때문에 단순히 정보를 모아서 보기 위해 스프레드시트를 쓰는 것은 좋은 생각이 아닙니다. 하지만 매일매일 갱신되는 정보를 가지고 뭔가 계산을 해야 한다면 스프레드시트에 데이터를 끌고 오는 게 필요하겠죠. 매출채권의 환산손익을 계산하는 시트를 만들어봅시다. 간편한실습을 위해 매출액, 평가액, 환산손익은 미리 수식을 입력해두었습니다.

01 [매출액(G열)은 채권발생일의 환율*외화금액으로 계산됩니다. [F9]셀에 수식
=INDEX(GOOGLEFINANCE( "CURRENCY:" & $D9 & $C$2 , "PRICE" , $C9 ), 2 , 2 ) 를 입력합니다. 환율을 조회하는 티커는 CURRENCY:from통화to통화 입니다. USD to KRW인 경우라면 CURRENCY: USDKRW 가 됩니다. 현재 환율을 조회하기 위해서는 티커만 입력해도 되지만 과거의 환율이 필요하므로 "PRICE" 속성과 과거 일자 ( $C9 ) 를 시작일로 기재했습니다.

01 일잘러의 비밀_스프레드시트_googlefinance_함수_예제_환율 조회.PNG

02 기준일의 매출채권 평가액(I열)은 기준일의 환율*외화금액으로 계산합니다. GOOGLEFINANCE함수를 과거 기간에 대해 사용하는 경우에는 항상 헤더가 함께 반환됩니다. 이를 제거하기 위해INDEX 함수로 배열의 2행 2열 위치의 환율값만 가져오겠습니다. [H9]셀에 수식 =INDEX(GOOGLEFINANCE( "CURRENCY:" & $D9 &$C$2, "PRICE" , $C$3 ), 2 , 2 ) 를 입력합니다. [F9]셀의 수식에서 날짜만 기준일이 적힌 [C3]셀로 바꿔준 것입니다.

02 일잘러의 비밀_스프레드시트_googlefinance_함수_예제_환율 조회.PNG

03 일잘러의 비밀_스프레드시트_googlefinance_함수_예제_환율 조회.PNG

04 [H9]셀을 선택하고 [H15]셀까지 자동 채우기 핸들을 드래그합니다. ARRAYFORMULA가 적용된 G, I, J열은 값이 자동으로 채워집니다. 외화 매출채권의 환산 시트가 완성되었습니다.

04 일잘러의 비밀_스프레드시트_googlefinance_함수_예제_환율 조회.PNG

GOOGLEFINANCE에서 제공하는 정보의 항목들과 관련 정보들 그리고 사용 시에 유의할 점은다음 페이지를 참조하십시오. 전 세계 증권 거래소의 주식과 주가 지수, 미국과 인도의 뮤츄얼 펀드, 미국의 채권 지수, 그리고 각국 환율(Morningstar)과 암호화폐 시세(Coinbase)를 제공합니다.

GOOGLEFINANCE 함수에서 사용 가능한 속성은 다음과 같습니다. 한국 증시는 20분 지연 시세로 표시되고 베타(β)는 서비스되지 않습니다. 시총은 우선주 시총까지 포함한 금액이 표시되므로주의해야 합니다. 참고 목적으로만 사용하는 수치입니다.

주식 일일 수익률 계산기

주식 계산기 시리즈! 이번에는 자신의 투자금으로 매일같이 수익이 발생시에 기간에 따라 얼마나 수익이 발생하는가를 계산해 보는 계산기입니다.

일종의 "복리"처럼 수익이 얼마나 발생하는지 여부를 확인해 보는 건데요, 예를 들면 하루에 1%식 매일같이 수익이 30일 동안 지속될 경우에 투자금 대비 수익이 얼마나 발생하는지 여부를 알수 있습니다.

즉 "복리의 힘"이 얼마나 수익을 발생시키는지 한눈에 파악이 가능합니다. 본 계산기는 06) 수익률 계산하기 - 금융 데이터 분석을 위한 파이썬 판다스 이 블로그에 게시된 "주식 평단가 계산기"와 마찬가지로 블로그 상에서 직접 계산을 해 볼 수 있습니다.

투자원금 : 자신이 투자하려는 금액을 입력.

계산기간 : 계산 기간을 입력하세요. 기본은 30일이고 1일부터 원하는 기간의 숫자 입력이 가능. 일별로 06) 수익률 계산하기 - 금융 데이터 분석을 위한 파이썬 판다스 계산이 가능하고 월별로 계산도 가능.

목표수익률 : 일별 혹은 월별 수익률 퍼센트를 입력. 기본값은 1 % 이고 자신이 원하는 퍼센트 값을 입력하면 된다.

보고주기 : 계산기간 단위를 입력한다. 총 계산기간 동안에 몇일 단위로 수익률 계산할지 입력하면 된다. 예를 들어 30일간 1일씩 수익률을 계산하고 싶다면 계산기간에 30을 입력하고 보고주기에 1을 입력하면 된다.


0 개 댓글

답장을 남겨주세요