본문 바로가기
무모한 도전-주식 인공지능 만들기

pytrader로 일봉차트(캔들차트) 가지고 오기

by 인터넷떠돌이 2018. 12. 10.
반응형

안녕하세요?


슬슬 따라하기를 그만하고, 한번 이래저래 조합해서 기능을 추가하는 단계로 가려고 하니, 많이 힘이 들기는 합니다만, 그래도 어떻게 성과가 나왔기에, 이렇게 포스팅을 올려 보고자 합니다. 이번 포스팅에서는 기존의 pytrader의 인터페이스에 버튼하나를 추가해서, 이 버튼만 누르면 일봉차트를 지정한 데이터 베이스에 가지고 오도록 만들어 보고자 합니다.



먼저 Qt Designer를 실행해서, 여기다가 새로운 버튼을 하나 만들어 준 다음에, 일봉차트 가져오기라고 이름을 붙여 보도록 합니다. 



일단 기존에 이야기를 했는 것처럼, self.위젯의 이름.이벤트.connect(self.메서드의 이름) 이라는 형식으로 새로 추가한 버튼-pushButton_3를 누르면(clicked 이벤트 발생), 연결된 메서드인 candle_data_acquire라는 것을 실행시키라는 것으로 명령을 주었습니다.



당연하지만 당연하게도 공짜로 candel_data_acquire() 메소드가 생성될 리가 없으니, 이전에 kiwoom.py에서 실습을 하면서 만들어 보았던 코드를 가지고 오도록 합니다. 일단 기존의 kiwoom이 여기서는 대문자 K로 대체된 것이라는 것을 빼면 그렇게 큰 차이는 없습니다.



그런데 항상 같은 데이터 베이스 파일명을 사용해서 할 수는 없고, 그럴때 마다 코드를 수정하는 것도 귀찮기는 귀찮은 일이기는 하기에, 일단 위 스크린샷처럼 먼저 datetime이라고 하는 라이브러리를 가지고 오도록 합니다. 파이썬 내부 라이브러리 이기 때문에 따로 아나콘다 프롬프트로 설치할 필요는 없었습니다.




다음으로는 종목코드를 기존에는 수동으로 문자열 형식으로 입력해야 했는데, 변수 = self.위젯이름.text()라는 형식으로 텍스트 형식의 변수에 종목코드를 가지고 오고, 기존의 문자열 "" 이 입력되어 있던 자리에는 변수를 집어 넣는 식으로 해결을 했습니다.



다음으로는 기준일자 역시 일일히 입력하는 것이 귀찮아서, 일단 현재의 날짜를 입력하는 방식으로 만들어 보았습니다. 다만 여기서 하나 중요한 것은 바로 달과 날짜를 입력하는 부분이 일단 한자리 수 이면, 앞에 자동으로 0이 붙지 않는 다는 것 입니다. 그래서 다음과 같은 방법을 써야만 했스니다.


변수 = " %s 문자열" % 변수2


위와 같은 방식으로 하면, %s에 들어가 있는 문자열은 % 뒤에 있는 변수2의 값으로 바뀌게 됩니다. 즉, 이렇게 하는 식으로 변수2의 값이 바뀌는 때마다 따로 문자열을 일일히 바꾸지 않고, 도치해 주는 것이 가능합니다. 이렇게 하는 식으로 20181210과 같은 형식으로 날짜 데이터를 바꾸어 줄수 있었습니다. 당연 %를 이용한 문자열 도치는 아래와 같은 형식도 가능합니다.


변수 = "%s%s%s" % (변수2, 변수3, 변수4)

>>> "변수2변수3변수4" 


이런 형식의 결과도 얻을 수 있는 것 입니다.



그리고 당연히 남아 있는 데이터가 있으면 다시 요청하는 것도 잊으면 안되는데, 여기서도 당연히 기존의 문자열로 되어 있는 부분을 그냥 변수로 처리를 하였습니다.



이제 일봉차트의 데이터를 가지고 오기는 했지만, 이건 어디까지나 컴퓨터의 메모리 상에서만 있습니다. 이래서야 사용을 하기도 오래 저장을 할 수도 없으니, 하는 수 없이 일단 pandas와 aqlite3를 가지고 오도록 합니다.




그 다음에는 위 스크린샷처럼 먼저 가지고 왔는 딕셔너리 형태의 자료구조를 pandas의 DataFrame형태로 바꾸어 주도록 합니다. 그리고 나서 저장하는 것 까지는 기존의 방식과 같이 만들어 주도록 합니다.



일단 프로그램을 실행시켰을 때, 위 스크린샷처럼 제대로 나오는 것은 확인할 수 있었습니다.



먼저 AJ렌터카의 주식종목코드인 068400을 입력해 주도록 합니다.



버튼을 누르고 나서 잠시 시간이 흐르자, 위 스크린샷처럼 kospi3.db라는 데이터 베이스가 생성이 되어 있는 것을 확인할 수 있었습니다.



그리고 나서 데이터 구조가 제대로 저장이 되어 있는 것은 좋은데, 뭐라고 해야 할까요? 일단 제가 원하는 식으로 내림차순 식으로 정렬이 되지 않은 것을 볼 수 있었습니다. 그래서 이 문제를 해결해 볼까 하고 건드렸는데, 이후의 일련의 포스팅은 이 정렬 문제를 가지고서 해결하기 위한 좌우충돌이 되었습니다. 물론 지금 이 포스팅을 쓰는 시점에서는 다 해결이 되기는 했지만, 이렇게 사소해 보이는 것을 하나 해결하기에도 상당히 힘든 상황이기는 합니다.

반응형