안녕하세요?
이래저래 새로운 것-정확히 말하면 1번 로그인을 하고 나서, 다음으로 여러개의 종목을 스크린닝하는 것으로 프로그램을 변경하려고 이런 저런 시도를 한다고 포스팅이 많이 늦어졌습니다. 아무튼 간에 늦은 것은 늦은 것이고, 이제까지 했는 것을 올려 볼까 합니다.
일단 새로운 작업을 위해서 먼저 로그인만을 담당하는 py파일을 생성하도록 합니다. 이 파일의 이름은 Login_Machine이라고 지었습니다.
그리고 나서 위 스크린샷처럼 코딩을 하였는데, 일단 키움증권의 OpenAPI와 접촉하는 모든 것을 다 가지고 오도록 코딩을 하기는 하였습니다. 그리고 나서 해야 할 일은, 일단 app.exec_()를 두어서 계속해서 로그인이 된 다음에 종료가 되지 않도록 하는 것 입니다.
그 다음은 주식을 거래하기 위한 Trade_Machine을 만들어 주도록 합니다. 여기서 핵심은 이 py파일에는 로그인을 하라는 명령이 없습니다.
실재로 Kiwoom이라는 kiwoom.py에 있는 클래스를 가지고 와서 객체화 라고 해야 할까요? 이런 작업을 하기는 했습니다만, 여기에는 로그인에 관한 어떤 정보도 없습니다.
그리고 나서 실행을 시켜보니, 어떻게 된 것인지 로그인을 한 다음인데도 전혀 아무것도 되지 않은 것을 확인할 수 있었습니다. 이렇게 된 이상 하는 수 없이 다음의 작업에 들어가 보도록 합니다.
그래서 다음으로 생각한 것이 위 스크린샷처럼 싱글톤으로 만들기 위한 작업이었습니다. 왜 이런 작업을 하였냐 하면, 일단 Kiwoom이라는 클래스가 2번이나 불리니까 이게 서로 다른 Object이기 때문에 생기는 문제였습니다.
그런데 위 스크린샷처럼 그냥 이렇게 싱글톤으로 만드는 방식-메타 클래스를 이용한 방식으로 만드니까, 위 스크린샷처럼 일단 에러가 나는 것을 확인할 수 있었습니다.
그래서 자료를 검색하다 보니, 위 스크린샷처럼 PyQt5Singleton이라는 것이 있다는 것을 확인할 수 있었습니다. 그래서 일단 이걸 pip를 이용해서 아나콘다 프롬프트에서 설치해 보도록 합니다.
처음에는 진짜로 되는 것인지 의심을 했었는데, 진짜로 되는 것을 확인할 수 있었습니다. 이렇게 해서 제가 사용하는 가상환경에 무사히 PyQt5Singleton을 설치할 수 있었습니다.
다음으로는 Kiwoom이라는 클래스를 위 스크린샷처럼 PyQt5Singleton을 이용해서 싱글톤으로 만드는 작업을 하도록 합니다.
그렇게 해서 일단 접속이 된 다음에 로그인 정보까지 가지고 오는 것에는 문제가 없이 진행이 되는 것을 확인할 수 있었습니다. 문제는 이렇게 하니까 로그인을 2번 - 정확히는 Trade_Machine.py가 실행이 될때 마다 로그인이 되어서 상당히 곤란한 상황이 되었습니다.
그래서 이번에는 위에서 Login_Macine을 상속받지 말도록 만들어 놓도록 했습니다. 이렇게 하는 것으로 다음의 작업에 들어가 도록 합니다.
이렇게 해서 Trade_Machine을 실행했을 때는 전혀 반응이 없는 것을 확인했지만, 문제는 도로 처음으로 돌아왔다는 것 입니다. 이렇게 하니 로그인 정보도 가지고 오지 못합니다.
그래서 이게 어떻게 된 일인지 알아보기 위해서 self.K = Kiwoom()이라고 하고서 여기서 나오는 self.K를 일단 위 스크린샷에서 나오는 것처럼 print()함수를 사용해서 출력해 보도록 했습니다.
그리고 나서 Trade_Macine에 있는 self.K를 출력하게 했더니, 위 스크린샷처럼 나오는 것을 확인할 수 있었습니다. 이렇게 해서 일단 하나 알 수 있는 것은 두개의 py파일에서 서로 호출하는 Kiwoom()은 싱글톤을 적용했음에도 전혀 다른 Object가 되었다는 것 입니다.
'무모한 도전-주식 인공지능 만들기' 카테고리의 다른 글
새로운 방식의 시도-벽에 부딪친 아이디어 구현 (0) | 2019.07.24 |
---|---|
새로운 방식의 시도-아이디어 구현-2- (0) | 2019.07.23 |
2019년 7월 3주차 평균회귀 테스트 & 종목선정 결과 (0) | 2019.07.21 |
2019년 7월 19일 주식 모의투자에 들어가 본 결과 (0) | 2019.07.20 |
주문취소가 되지 않은 이유의 탐구 (0) | 2019.07.19 |