주식 호가 자동 캡쳐 프로그램📊

Devyan·2021년 2월 27일
3

프로젝트

목록 보기
1/1
post-thumbnail

🌈 개발 개요

주식시장이 변화함에 따라 단타 매매를 한다면 호가 흐름을 정검할 필요가 있다. 바뀌는 것들 사이에서 바뀌지 않는 것을 원칙 삼는 것만이 수익의 지름길이라 생각하기 때문이다.

호가 캡쳐 프로그램은 키움증권에서 관심 종목이나, 성과 검증, 혹은 조건 검색식의 종목들을 엑셀로 내보낸 것을 기준으로 해당 종목들의 호가를 png 파일로 캡쳐한다(이게 api 이용 없이 데이터 받기가 더 쉽다!).

프로그램은 날짜, 시간, 분, 그리고 초를 선택해서 엑셀파일에 있는 많은 종목들의, 해당 시각 호가 잔량을 캡쳐한다.

특별한 기능이 아니고, 실질적으로 도움이 되지 않을 지 모르나 손으로 확인해 보는 것보다 개발하는 것이 시간을 아끼는 길이라 판단해 빠르게 결과물을 얻는 것을 목표로 개발했다.


🌈 결과물

기본 폴더

기본 폴더에는 설명서와 실행파일, 캡쳐 사이트 로그인을 위한 네이버 정보 저장 파일, 키움증권에서 클릭 두 번으로 받을 수 있는 종목 파일(2월23일 관종.xlsx, 실시간검색.xlsx) 등이 있다. 88은 chromedriver 관련 파일이다(뒤에 간단 설명 있음!).


실행 파일

호가캡쳐.exe 파일을 실행하면 날짜와, 엑셀파일을 선택할 수 있다😎.


실행 결과


데이터 수집이 끝나면 엑셀 파일의 이름과 동일한 이름을 가진 폴더가 생성되며, 안에는 날짜, 시간을 이름으로하는 새로운 폴더가 생성된다.


결과물

폴더를 들어가면 다음과 같이 종목명을 제목으로 하는 호가 png 파일들이 있음을 볼 수 있다.

대략 100 종목 데이터를 수집할 경우 1~2분이 소요됨을 확인했다. 충분히 만족스럽다.


🌈 개발 과정

예전에 자동매매 프로그램을 개발하면서 pyqt5를 다뤘는데, 시간이 몇 달 지나다 보니 관련 내용을 다 잊었다(이래서 기록을 해야해 ... ). 그래도 공부하면서 작성했던 코드와 주석을 토대로 제작에 성공하긴 했다.

최근에 출판된 괜찮은 pyqt5 관련 서적이 있어서 읽어보고 싶었는데, 짬이 나면 날잡고 공부해서 여기다가 정리하는 시간을 가져야겠다.

프로그램 작동을 위한 고려사항은 다음과 같다.

  • ui 제작
  • 엑셀 데이터 handling
  • chrome 자동 제어
  • 실행파일로 제작

실로 간단하다!

ui & data

ui 는 전적으로 pyqt5를 이용했다. 실행파일과 같은 디렉터리에 엑셀파일이 있으면 combobox에 파일들의 이름을 출력해 선택할 수 있게 했다. 다만 네이버 정보 저장 파일과, 현재 작업중인 파일(~로 이름이 시작)은 선택하지 않게 예외처리했다.

    def mk_QComboBox(self):
        combobox = qtw.QComboBox()

        cd = pathlib.Path(__file__).parent
        for filename in [x.name for x in cd.glob('*.xlsx')]:
            # 네이버 정보 저장 파일 패스
            if filename == '네이버 정보 저장.xlsx':
                continue
            # 열려있는 세이브 파일 패스
            if filename[0] == '~':
                continue
            combobox.addItem(filename)

        return combobox

엑셀 데이터는 pandas의 read_excel 을 이용한 후 dataframe을 처리하는 방식을 택했다.

네이버 로그인의 경우 파일이 있으면 받아서 자동으로 입력해주도록 기능을 추가했다.

        try:
            if len(list(cd.glob('*네이버 정보 저장.xlsx'))) == 1:
                naver_info = pd.read_excel('네이버 정보 저장.xlsx', converters={'네이버 아이디': str, '네이버 비밀번호': str})
                saved_naver_id = naver_info['네이버 아이디'][0]
                saved_naver_pw = naver_info['네이버 비밀번호'][0]

        except:
            print('no naver id or pw saved')

chrome driver

chrome 제어를 위해서는 selenium을 이용했다. 네이버 로그인, 페이지 이동 및 작동 제어를 위해 언급할 게 너무 많아서 패스. 다만, 자동으로 크롬 드라이버를 업데이트하는 좋은 library가 있는데 이건 알아두면 좋을 것 같다.

import chromedriver_autoinstaller

# chrome driver update
chromedriver_autoinstaller.install(cwd=True)

굉장히 직관적이다!

프로그램 설명할 때 등장했던 88 폴더의 정체도 이것인데, 88은 현재 작업 환경의 크롬 브라우저 버젼인 듯하고, 이 chromedriver_autoinstaller은 자동으로 크롬 브라우저의 버젼과 크롬 드라이버의 버젼을 맞춰 업데이트해 주는 듯하다.

크롬 브라우저 87에서 실행시 87폴더가 만들어지고, 정상 작동하는 것을 확인했다.

exe 파일 제작

정말 어이없게 여기서 몇 시간을 헤맸다. 권한 부족 로그를 남기고, scrip를 실행할 수 없다는 창만 등장했다.
구글링 결과 폴더 생성과 관련해서 권한 문제가 발생할 수 있다는 글을 발견했으나, 결론적으로는 pyqt5 오류였다.

exe 파일로 변환한다고 하지만, 사실상 개발 환경을 그대로 옮기는 것이기 때문에 library를 적절히 받아와야 하는데 그 과정에서 문제가 생긴 것이다. 구글링 결과 많은 사람들이 이런 비슷한 문제를 겪고 비슷한 과정으로 극복했다.

내가 어이없었던 부분은 내 개발 환경이 가상환경이고, pyinstaller은 window command에서 실행했던 것... 그냥 가상 환경에서 설치했던 python library들은 cmd에서 똑같이 설치하니 모든 문제가 해결되었다.

이런 실수를 하는 사람이 없으니 구글신도 답을 못 해줬던걸까 ...

이외에는 놀랍게도(?) 오류가 없어서 반나절만에 개발을 끝낼 수 있었다!


🌈 정리

사이드 프로젝트를 꽤나 많이 했는데, 기록을 남기는 건 귀찮아서 항상 미뤄왔다. 이번 개발은 간단하기도 했고, 설명할 기능도 없어서 간단히 메모를 남겼는데, 기회가 되면 전부 글로 남기는 게 좋은 것 같다!

내가 돈 벌려고 주식을 하는지 개발 하려고 주식을 하는 지 모르지만, 개발은 참 재밌고 신기한 거 같다!

(현실은 다음 주 개강)

profile
건망증 처방전

0개의 댓글