저번 챕터에서는 로그인부터 계좌 정보를 가져오는 과정까지를 진행하였다.
이번 챕터에서는 종목을 분석하는 과정을 살펴본다.
이 책에서 다루는 분석법은 그랜빌의 매수신호 제4법칙이다. 나도 우선 이 분석법을 배우고, 내가 하고 싶던 방법으로 응용할 수 있도록 해야겠다.
먼저 코스닥 종목을 가져오는 과정을 진행하도록 하자.
get_code_list_by_market 함수와 calculator_fnc 함수를 만든다.
주식 시장 조목을 가져올 때는 GetCodeListByMarket 요청 함수를 사용한다. GetCodeListByMarket 함수의 자세한 설명은 다음과 같다.
이 책에서는 코스닥 종목만 보기 위해 sMarket 값은 10을 사용한다. 또한 종목간 구분이 ';' 이기 때문에 .split(';')으로 구분하여 리스트를 만들고, 마지막에도 ';'이 붙어있고, 세미콜론 오른쪽에는 빈 값이 나오기 때문에 마지막 요소를 제거하기 위해 [:-1]을 붙여준다.
get_code_list_by_market() 함수를 호출하는 코드는 종목 분석과 관련된 코드를 모아놓을 calculator_fnc() 함수에 추가한다.
가져온 각 종목을 분석하기 위해 해당 종목의 전체 정보가 필요하다.
우선 __init__ 함수에서 이벤트루프와 스크린 번호를 추가해준다.
한동안 강조하고 싶은 곳에 밑줄을 그었는데 캡처 도구로는 직선이 예쁘지 못해서 여러 번 그어서 직선 나오면 올리고 했지만 그냥 옆에 점을 찍기로 했다. 훨씬 깔끔하고 훨씬 보기 좋다. 빨간 점을 찾기가 힘들 순 있지만 그래도 코드를 보는데 어려움은 줄었다.
아직 저 스크린 번호가 무엇을 의미하는지는 모르겠다. 책에서는 7절에서 배운다고 하니 조금 더 기다려봐야겠다.
코스닥 종목은 리스트로 반환되기 때문에 for 문으로 반복하면서 각 종목의 정보를 가져온다.
스크린 번호는 하나당 할당되는 공간에 요청할 수 있는 양이 정해져 있기 때문에 요청이 완료되면 연결을 끊어서 박스에 공간을 남기는 게 좋다고 한다.
day_kiwoom_db 함수는 각 종목에 대한 정보를 요청하는 함수다. 필요한 정보들은 일봉차트에 표시된 현재가, 시가, 고가, 저가, 거래량이다. 해당 정보는 KOA Studio - TR조회의 'opt10081'에 있다. 따라서 SetInputValue 함수에 요청사항을 입력하고, 수정주가구분은 1로 설정해서 종목의 수정된 가격과 주식 수를 가져온다. 0은 변동되기 전의 가격 정보를 가져온다.
여기서 수정주가구분은 회사가 발행된 주식의 수와 가격을 변경하는 경우를 의미한다.
또한 기준일자를 빈 값으로 요청하면 오늘 날짜부터 조회하고, 특정 날짜를 기준으로 과거 데이터를 가져올 때는 YYYYMMDD 형식으로 요청하라고 KOA Studio에 명시되어 있다. 책에서는 date인자를 사용하지는 않지만 언제든 사용할 수 있도록 추가하였다고 한다.
QTest.qWait(3600)은 3.6초마다 딜레이를 주기 위해 삽입된 코드다. 저번 게시글에서 이야기하였듯이 짧은 순간에 너무 많은 TR을 요청하면 연결이 끊길 수 있으니 기다리는 코드이다. 다만 QTimer.singleShot은 동시성을 처리하기 때문에 3.6초를 기다리는 동안 다음 코드를 진행하지만 QTest.qWait 함수는 다음 줄의 코드가 실행되지 않게 막으면서 증권 서버에 요청 중인 이벤트 처리는 유지하고 안전하게 타이머를 실행한다.
책에서 파이썬 기본 함수인 sleep() 함수나 timer() 함수는 이벤트 실행을 중지하기 때문에 QTest.qWait() 함수가 가장 적합하다고 설명하고 있다.
이젠 일봉차트를 조회하는 TR 요청의 결괏값을 받는 슬롯 영역 코드를 추가한다.
과거 데이터가 존재하면 sPrevNext가 "2"로 반환된다. 과거 데이터가 없다면 이벤트 루프를 종료한다.
종목코드의 데이터를 가져올 때는 세 번째 인자에 0을 넣어서 오늘 자의 싱글 데이터만 가져온다. 만약 과거 데이터도 필요하다면 반복적으로 dynamicCall을 실행하면 된다. 만약 600일 치 이상의 데이터가 필요하다면 GetCommData를, 600일 치를 넘어가는 과거 데이터가 필요하지 않다면 그냥 GetCommDataEx 함수를 사용한다.
GetCommDataEx 함수는 한 번의 조회로 600일 치의 데이터를 이중 리스트로 반환해준다.
상세하게 보면
[['', '현재가', '거래량', '거래대금', '날짜', '시가', '고가', '저가', ''], ['', '현재가', '거래량', '거래대금', '날짜', '시가', '고가', '저가', '']]
대충 이런 형태이며 최신 날짜순으로 나열된다고 한다.
이번 게시글은 여기까지 하고 다음 게시글에서 받아온 데이터를 기반으로 분석하는 내용을 배워보자. 나도 아직 안 읽어본 부분이니까 배워보자는 말이 좋을 것 같다.
오늘은 여기까지.
이 카테고리 게시글들은 아래 책을 따라하는 후기로, 자세한 내용은 아래 책과 저자의 유튜브를 참고하시고, 예제소스는 저자의 깃헙에서 확인하실 수 있습니다.
책 정보 : https://book.naver.com/bookdb/book_detail.nhn?bid=16330702
손가락 하나 까딱하지 않는 주식 거래 시스템 구축(위키북스 프로그래밍 & 프랙티스 시리즈 23)
매일 주식만 바라보던 일상에서 해방되어 가족 또는 친구들과 행복한 시간을 보내길 바랍니다!24시간 자동으로 주식을 분석하고 거래하는 시스템을 구축하는 방법을 배우고 나머지 시간은 더 ��
book.naver.com
저자 유튜브 : www.youtube.com/watch?v=1lHzaihEb48&list=PLDtzZPtOGenaSknTbsb6x6L39V0VPz_rS&index=2&t=0s
( 위 유튜브는 이 책을 설명해주는 재생목록의 첫 번째 영상입니다.)
저자 Github : https://github.com/programgarden
programgarden - Overview
책 : 24시간 운영 가능한 주식투자 시스템 구축하기[파이썬으로 만드는 자동 트레이딩 시스템] 유튜브: 프로그램 동산 학습코드 자료입니다. - programgarden
github.com
예제 소스는 저자의 깃허브에서 확인하실 수 있습니다.
위 3개의 링크는 매 게시글마다 올라갈 예정입니다.
'파이썬으로 주식 거래 시스템 구축' 카테고리의 다른 글
CHAPTER 6. 보유한 종목, 미체결 종목, 분석된 종목 합치기 (0) | 2020.07.23 |
---|---|
CHAPTER 5. API를 이용해 투자 방식에 맞는 종목 분석하기 두 번째 이야기 (0) | 2020.07.21 |
CHAPTER 4. 계좌 정보 가져오기 다섯 번째 이야기 (0) | 2020.07.14 |
CHAPTER 4. 계좌 정보 가져오기 네 번째 이야기 (0) | 2020.07.13 |
CHAPTER 4. 계좌 정보 가져오기 세 번째 이야기 (0) | 2020.07.09 |