Cufflinks를 이용한 주식 평가 🕯

Cufflinks는 plotly를 기반으로 한 시각화 라이브러리다.

Document는 https://github.com/santosjorge/cufflinks 를 참고할 수 있다.

Cufflinks를 사용해보자 (with SK 이노베이션)

Cufflinks를 사용하면 candle chart를 비롯해서 다양한 그래프를 쉽게 그릴 수 있다.

Cufflinks를 사용하는 방법을 coredotfinance를 이용해서 익혀보자

우선 Sk이노베이션의 데이터를 불러와서 matplotlib으로 그래프를 그려보자

[22]:
from coredotfinance.data import KrxReader
krx = KrxReader()
krx.search('sk이노')
[22]:
('SK이노베이션', 'KR7096770003', '096770')
[29]:
import matplotlib.pyplot as plt

dataframe = krx.read('096770', start='2020-01-01', end='2021-07-15')
plt.figure(figsize=(13,6))
plt.plot(dataframe['close'])
plt.show()
SK이노베이션
_images/cufflinks_3_1.png

위 그래프는 단순한 실선 그래프다. 똑같은 데이터를 이용해서 이를 캔들 차트로 그려보자

먼저 cufflinks를 선언해주고 offline=True를 넣어주자.

offline 기능만 이용하겠다는 의미이다. 그다음 그래프를 그려보자

[36]:
import cufflinks as cf
cf.set_config_file(offline=True)
qf = cf.QuantFig(dataframe, title='SK 이노베이션')
qf.iplot()
SK이노베이션
[36]:
_images/cufflinks_5_2.png

실선 대신 캔들차트가 완성되었다! 이제 여기서 불린저 밴드로 추가해보자

[38]:
qf.add_bollinger_bands(30)
qf.iplot()
[38]:
_images/cufflinks_7_1.png

불린저 밴드는 과거의 가격 값들을 이용해서 최대 변동가능폭을 그려서 적정 주가를 예측하는 기법이다.

위의 코드에서는 불린저 밴드에 30이라는 숫자를 넣었다. 이는 30일의 과거 데이터를 이용해서 밴드를 그리겠다는 의미이다.

하지만 위 그래프를 보면 이상하다. 가장 과거 데이터에는 불린저 밴드가 있고 최근 데이터에는 불린저 밴드가 없다.

이는 cufflink에 인식되는 주가 데이터 표의 최상단에는 가장 과거 데이터가 있어야 한다는 뜻이다.

하지만 coredotfinance에서 얻어지는 데이터의 최상단에는 최근 데이터가 있다. 따라서 krx.data read에 reverse=True를 사용해줘야 한다.

[43]:
import cufflinks as cf
dataframe = krx.read('096770', start='2020-01-01', end='2021-07-15', reverse=True)
qf = cf.QuantFig(dataframe, title='SK 이노베이션')
qf.add_bollinger_bands(30)
qf.iplot()
SK이노베이션
[43]:
_images/cufflinks_9_1.png

불린저 밴드가 오른쪽으로 이동된 모습을 볼 수 있다.

그 다음에는 불린저 밴드의 옵션 조정과 sma 지표, rsi 지표, macd 지표등을 추가해보자.

[47]:
qf.add_sma([20,60],width=2,color=['green','lightgreen'],legendgroup=True)
qf.add_rsi(periods=60,color='java')
qf.add_bollinger_bands(periods=60,boll_std=2,colors=['magenta','grey'],fill=True)
qf.add_macd()
qf.iplot()
[47]:
_images/cufflinks_11_0.png

삼성전자 심화 그래프

coredotfinance에서 불러온 주식 데이터와 cufflinks를 이용해 삼성전자의 현재 주식을 평가해 본다.

[16]:
df = krx.read('005930', start='2020-01-01', end='2021-07-15', revers=True)
qf=cf.QuantFig(df, title='삼성전자')
qf.add_bollinger_bands(60)
qf.iplot()
삼성전자
[16]:
_images/cufflinks_13_1.png
[17]:
qf.add_sma([20,60],width=2,color=['green','lightgreen'],legendgroup=True)
qf.add_rsi(periods=60,color='java')
qf.add_bollinger_bands(periods=60,boll_std=2,colors=['magenta','grey'],fill=True)
qf.add_macd()
qf.iplot()
[17]:
_images/cufflinks_14_0.png

카카오 심화 그래프

coredotfinance의 종목검색 기능을 사용해서 종목코드를 얻고 이를 통해서 데이터를 불러온다.

카카오의 주가같은 경우에는 2021년에 주식분할을 했기 때문에 수정주가를 적용해 주어야 한다.

[18]:
krx.search('카카오')
[18]:
('카카오', 'KR7035720002', '035720')
[19]:
from coredotfinance.data import KrxReader

krx = KrxReader()
df = krx.read('035720', start='2020-01-01', end='2021-07-15', adjust=True, reverse=True)
df.drop(df.loc[(df.index > '2021-04-11') & (df.index < '2021-04-15')].index, inplace=True)
qf=cf.QuantFig(df ,title='카카오')
qf.add_bollinger_bands(60)
qf.iplot()
카카오
[19]:
_images/cufflinks_17_1.png
[20]:
qf.add_sma([20,60],width=2,color=['green','lightgreen'],legendgroup=True)
qf.add_rsi(periods=60,color='java')
qf.add_bollinger_bands(periods=60,boll_std=2,colors=['magenta','grey'],fill=True)
qf.add_macd()
qf.iplot()
[20]:
_images/cufflinks_18_0.png