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

자동으로 현재가를 얻어오기 위한 작업

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

안녕하세요?


지난번 시간에 버튼을 누르면 현재가를 가지고 오는 것을 보여 드렸습니다. 그런데 문제는 일일히 버튼을 눌러야 해서 불편하기 때문에 이번에는 10초 정도의 시간마다 현재가를 가지고 오도록 만들고자 합니다.



먼저 Qt Designer를 열었습니다. 여기서 버튼은 버튼대로 놔두도록 하고, 다음으로는 투자중이라는 표시를 만들어 주고자 합니다. 원래는 LED램프를 만들어야 했는데, 너무 어렵고 해야 할 일이 많기에, 하는 수 없이 이렇게 텍스트로 표시를 하였습니다.



다음으로 이 텍스트박스의 텍스트는 프로그램을 시작하는 것과 동시에 중지라는 글씨를 보이도록 만들어 주고자 합니다.



이제 본격적으로 프로그램을 실행하면, 위 스크린샷과 같은 화면이 나오는 것을 볼 수 있습니다.



그리고 버튼에 따라서는 위 스크린샷과 같이 버튼을 누르면 새로운 메서드를 작동시키도록 만들어 줍니다.



그리고 나서 __init__()에서 위 스크린샷에 나오는 것처럼 Timer(초 단위 시간, 실행할 메소드) 라는 식으로 타이머를 짜 주도록 합니다.



그리고 나서 타이머가 시작하면 위 스크린샷과 같이 타이머를 가르키는 변수를 start()라고 타이머를 시작 시키도록 합니다. 그리고 투자중지를 누르면, stop이 아니라 cancel()이라는 함수로 멈추도록 합니다.




그리고 나서 위 스크린샷처럼 RLTrader를 돌리기 위한 여건이 되지 않았다고 하면, 위 스크린샷처럼 타이머를 언제든지 cancel시키도록 만들어 줘야 합니다.



다음으로는 투자에 들어갔다면 언제든지 레이블의 텍스트를 투 자 중이라고 하면, 아니면 중지라는 텍스트만 나오도록 코드를 짜 주도록 합니다.



그런데 한번 실행시키고 나서는, 위 스크린샷처럼 한번은 현재가 정보를 얻고나서, 에러가 나오는 것을 볼 수 있었습니다.



그래서 일단 왜 이리도 에러가 나오는 가 했더니, 프로세스가 실행중일 때 = 아직 타이머 searching이 작동중일 때는 타이머를 시작하는 조건문을 붙여 주도록 합니다.



일단 10초 단위로 한번은 연달아서 나오기는 했는데, 문제는 그게 끝이라는 것 입니다. 어떻게 된 것인지 이런 결과가 나오는 것을 볼 수 있었는데, 어찌 도히었건 간에 제대로 이 에러를 해결하러 가야 합니다.



그래서 이번에는 위 스크린샷과 같이 타이머가 살아 있는 동안에는 RLTrader를 작동시키라는 명령어를 작동시키지 않도록 만들어 주도록 합니다.




그런데 위 스크린샷과 같은 에러가 또 생기는 것을 볼 수 있었는데, 무슨 에러이냐 하면, 너무 많은 메서드를 한꺼번에 호출을 하였다고 하는 것 입니다. 즉, 메서드를 타이머가 작동되지 않는 동안에 너무 많이 작동을 하였다고 해서 발생한 에러인데, 이 빈도를 줄이면 해결이 되리라 생각합니다.



그래서 위 스크린샷과 같이 sleep(1)이라고 해서 1초간 쉬어가게 만들어 주도록 합니다.



그런데 이번에는 한번만 현재가의 정보를 얻어오기만 할 뿐, 계속해서 얻어오지 않았습니다.



결국 타이머를 위 스크린샷과 같이 만들고 말았는데, 아무튼 간에 Start_of_RLTrader()메소드가 실행이 될때마다 RLTrader를 실행시키라는 메서드를 작동합니다. 하지만, 타이머의 시작은 타이머가 죽어 있다=타이머가 꺼져 있을 때만 실행이 되는 것 입니다.



이제서야 겨우겨우 10초마다 현재가를 비롯해서 시가, 고가, 저가, 거래량을 얻어오는 데 성공했습니다. 물론 지난번 포스팅에서 설명했다 시피, 일단 이 날짜는 컴퓨터에 찍히는 실시간이기는 하지만, 그래도 필요한 정보를 얻어오는 데는 성공했다는 생각이 듭니다.

반응형