일간변동률은 주식간의 주가변화를 상대적으로 비교하기 용이한 척도다. 국내 주식과 해외 주식간에 주식변화 추이를 비교하는 경우 통화에 차이가 있기 때문에 단순 종가로는 비교하는 것은 무의미하다. 변동률을 구한 뒤 누적합계를 구하여 비교하면 유의미한 결과를 얻을 수 있다.
본 블로그에서는 샘플DataFrame을 사용하여 일간변동률, 누적합계를 쉽게 이해해보고 뒤에서 삼성전자와 애플의 일간변동율 변화를 시각화하여 비교해 보도록 한다.
일간변동률
-
주가의 변화를 상대적으로 비교하기 위해 일간변동률을 사용한다.
-
식은 아래와 같다.
Python 예제 ( python version 3.9 )
가상의 주식데이터 생성
import pandas as pd
# 가상의 주식 데이터 10일치 생성
close_data = [1000, 1010, 1050, 1100, 1080, 1090, 1130, 1150, 1200, 1220]
t = pd.DataFrame(index=pd.date_range(start='20210101', periods=10), data=close_data, columns=['close'])
t['cs'] = t.dpc.cumsum()
print(t)
일간변동률 계산
t['dpc'] = (t.close - t.close.shift(1)) / t.close.shift(1) * 100
shift함수는 데이터를 주어진 인자 수 만큼 이동시킨다.
누적합계 계산
t['cs'] = t.dpc.cumsum()
Series의 cumsum() 함수를 사용하여 누적합계를 구한다.
결과
삼성전자 vs 애플 변동률 비교
스크래핑, 시각화 라이브러리 import
import pandas_datareader as web
import plotly.graph_objects as go
Source code
#1
samsung_df = web.get_data_yahoo('005930.KS', start='2020-01-01')
apple_df = web.get_data_yahoo('AAPL', start='2020-01-01')
samsung_df['dpc'] = ( samsung_df['Close'] - samsung_df['Close'].shift(1) ) / samsung_df['Close'] * 100 #2
samsung_df['cs'] = samsung_df['dpc'].cumsum() #3
apple_df['dpc'] = ( apple_df['Close'] - apple_df['Close'].shift(1) ) / apple_df['Close'] * 100 #2
apple_df['cs'] = apple_df['dpc'].cumsum() #3
#4
fig = go.Figure(
data = [
go.Scatter(x=samsung_df.index, y=samsung_df['cs'], name='삼성전자'),
go.Scatter(x=apple_df.index, y=apple_df['cs'], name='애플')
]
)
fig.show() #5
-
#1: 야후금융 api를 사용하여 삼성전자, 애플의 주식데이터를 스크래핑 한다.
-
#2: 일간변동률을 구한다.
-
#3: 누적합계를 구한다.
- #4: Figure 객체에 누적합계 데이타를 붙인다.
-
#5: 그래프를 출력한다.
결과
반응형
'python > 주식' 카테고리의 다른 글
Python - 상장법인 종목코드 초간단 스크래핑(코스피, 코스닥 구분) (0) | 2021.02.19 |
---|---|
Backtrader - ImportError: cannot import name 'warnings' from 'matplotlib.dates' 오류 처리 방법 (0) | 2021.02.17 |
3. Python - Plotly 캔들차트 + 이동평균선 ( feat. rolling API 사용법 ) (4) | 2021.01.27 |
2. Python - Plotly 캔들 + 거래량 차트 만들기 ( 복수 차트 생성 ) (1) | 2021.01.26 |
1. Python - 캔들차트(candlestick) + 스타일링 ( mplfinance, Plotly ) (4) | 2021.01.20 |