달력

9

« 2021/9 »

728x90
반응형

오늘도 난 전혀 감도 없는 인사이트를 얻기 위해.... 삽질중..^^;;

 

오늘도 주중에 키움API 실시간 체결창 정보를 MySQL로 저장한뒤

그 정보를 가지고 몇 시간을 요리조리 해보다가..갑자기 드는 자괴감..

이런다고 돈 많이 버나? ㅎ

 

그래서...

그냥 천천히 하기로 하고 파이썬을 이용해서 간단하게 시각화 해보는 것에 대해서 작성해 본다.

엄청 다양하게 시도해봤지만..딱히 떠오르는 것이 없다.

 

우선은 내가 좋아하는 Interactive Chart 인 plotly 를 이용하기로 했다.

아! 들어가기전에 키움 API를 이용한 데이터 수집에 대해서는 pass~

간단히 시각화 코드만 만들어봤다.

 

import plotly.express as px
import plotly.graph_objs as go
import pandas as pd

라이브러리는 저정도만 입력해보 작동 가능 할 것이다.

나의 코드에는 그 외에도 DB를 이용하기 위한 라이브러리, os 등등 너무 잡다하게 있어서 pass

 

stock_code = '064550'
_dt = '2021-09-10'
day_list = _dt.split('-')

dt_y = day_list[0]
dt_m = day_list[1]
dt_d = day_list[2]
print('검색날짜 :', dt_y, dt_m, dt_d)    

df_stocks_info = stocks_info()
df_tick = tick(dt_y, dt_m, dt_d, stock_code)

위와 같이 정보를 입력하고,

각각 필요한 데이터를 함수를 호출하여 Dataframe 형태로 저장한다..

 

그 형태는 아래와 같다.

df_stocks_info

stocks_info 는 키움의 종목에 대한 정보들을 담기 위한 것이다. 아직은 코스피, 코스닥 구분 및 종목명만 있다.

추후에 필요하다면 시가총액, 등등 정보 다양한 정보를 받을 것이다.

 

df_tick

예전과 다르게 키움에서 조금 업그레이드를 했는지 전일동시거래량도 추가된 것을 볼 수 있다.

여기서 잠깐 사족을 좀 달자면..

체결시간의 경우 키움 API 는 HHMMSS 형태의 string 형태인데. MS(밀리세컨드) 시간이 없다.

그래서 상기 표에서도 나와있지만. 단순히 데이터들 정보가 들어오는 순서 그대로 놔뒀다.

키움 API 게시판에 찾아보니

저 체결량 순서는 체결되는 순서 그대로라고 하니.. 뭐 맞겠지???(추후에 확인해봐야지.ㅋ)

 

우선 간단하게 시간순에 따라서 체결량을 시각화 해봤다.

px 를 이용하여 상단 및 우측에 histogram도 함께 추가하였다.

stock_name = df_stocks_info.loc[stock_code]['NAME']

fig = px.scatter(df_tick, x=df_tick.index, y="VOLUME", color="VOLUME", marginal_x='histogram', 
                 marginal_y="histogram", width=1500, height=1000, title='{} {} 체결창 분석'.format(_dt, stock_name))

fig.show()

바이오니아_체결창.html
6.78MB

 

위에서 보면 9시 10시 2시 정도에 체결량이 증가 한 것을 알 수 있다.

그리고........음....... 뭐냐? 뭐가 있냐!! 제발 보여달라!!! 나에게 인사이트를 내어달라!!!! ㅠ.ㅠ

반응형

이번에는 모든 데이터를 같은 차트에 넣고 볼려고 한다.

자세한 내용은 구글등에서 plotly multipule axes 등 으로 검색하면 관련 자료들이 많다.

한참 구글링 한 다음 만든 차트

fig = go.Figure()
go.Scatter
fig.add_trace(go.Scatter(x=df_tick.index, y=df_tick['VOLUME'], name="체결량", mode='markers', 
                         marker=dict(size=5, color=df_tick['VOLUME'], line_width=1)))
fig.add_trace(go.Line(x=df_tick.index, y=df_tick['PRICE'], name="체결가", yaxis="y2", line=dict(color='#9467bd')))
fig.add_trace(go.Line(x=df_tick.index, y=df_tick['TURNOVER_RATE'], name="회전율", yaxis="y3", line=dict(color='#d62728')))
fig.add_trace(go.Line(x=df_tick.index, y=df_tick['TRANS_STR'], name="체결강도", yaxis="y4", line=dict(color='#ff7f0e')))
fig.add_trace(go.Line(x=df_tick.index, y=df_tick['PAST_STIME_RATE'], name="전동거", yaxis="y5", line=dict(color='#1f77b4')))

fig.update_layout(xaxis=dict(domain=[0.1, 0.8]),
                  yaxis=dict(title='체결량'), 
                  yaxis2=dict(title='체결가', titlefont=dict(color='#9467bd'), tickfont=dict(color='#9467bd'), anchor='free', overlaying='y', side='left', position=0.05),
                  yaxis3=dict(title='회전율',titlefont=dict(color='#d62728'), tickfont=dict(color='#d62728'), anchor='free', overlaying='y', side='left', position=0.01),
                  yaxis4=dict(title='체결강도',titlefont=dict(color='#ff7f0e'), tickfont=dict(color='#ff7f0e'), anchor='x', overlaying='y', side='right'),
                  yaxis5=dict(title='전동거',titlefont=dict(color='#1f77b4'), tickfont=dict(color='#1f77b4'), anchor='free', overlaying='y', side='right', position=0.85))

fig.update_layout(title_text='{} {} 종합분석'.format(_dt, stock_name), width=1500, height=1200)

fig.show()

xaxis 축의 domain 의 경우 표의 구역을 정의 한다고 보면 될 듯한다.

그리고 거기에 맞춰서 position 을 이용하여 원하는 위치에 넣어주면 된다.

 

위와 같이 작성하면 아래와 같은 결과를 얻을 수 있다.

이날 바이오니아 종목의 체결량이 많았는지 꽤 무겁다. 용량도 크고..

 

다른 분들은 저와 같이 삽질하질 마시길...

프로그래밍 공부를 위한 분석인가? 투자를 잘 해서 돈을 벌기 위함 인가???

오늘도 난 고민에 빠진다.... 시간 로스가 너무 많다. 쳇.

 

728x90
반응형
:
Posted by 패치#노트