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

첫번째 장애물을 극복하기 위한 시도-3-

by 인터넷떠돌이 2019. 1. 15.
반응형

안녕하세요?


지난번 포스팅에서 이제서야 어디가 문제가 되어서 프로그램이 의도하지 않게 멈추어 버린 것인지 알아차렸습니다. 그래서 이번에는 이 문제를 해결하기 위해서 기존에는 10초마다 타이머를 걸어서 계속 실행하게 만들어 준 방식이 문제를 일으켰다는 것을 알았습니다. 그래서 이번 포스팅에서는 이 구조를 어떻게 손 봐야 하는데, 가지가지 시도를 하였으며, 그 내용을 포스팅에 올려보고자 합니다.



먼저 위 스크린샷에 보이는 것처럼, if not문을 and라는 조건을 써서, searching이라고 하는 타이머가 종료가 되었으며, 동시에 Requirement_of_current라는 메소드도 동시에 종료가 되었으면 Requirement_of_current라는 메서드가 작동이 되라는 식으로 바꾸어 주었습니다.



일단 지난번 처럼 실행을 시키자, 이번에도 역시 시작하자 마자 실시간 주식 투자를 하는 메서드가 실행이 되었다는 마커가 뜨는 것을 볼 수 있습니다.



그런데 이번에는 기존처럼 또 다른 마커가 뜨지 않고, RLTrader에서 적어 놓은 그대로 작동이 되는 것을 확인할 수 있었습니다.



그러면서 load_buy_sell_list라는 메서드에 찍어놓은 마커가 뜨는 것을 볼 수 있었습니다. 이렇게 되는 것으로 보아서, 제대로 매수/매도 처리를 하는 메서드까지 넘어갔다는 것은 알 수 있었습니다.




그런데 여기서도 무슨 이유인지 모르지만, 또 프로그램이 중간에 끊어져 버린 것을 볼 수 있습니다. 이래가지고서는 실시간으로 주식을 감시하면서 매수/매도를 할 수 없다는 생각이 듭니다.



일단 기존에 있는 매수 리스트는 제대로 정리가 된 것이 맞는지 확인을 해 보아야 하는데, 여기서는 제대로 주문완료 처리가 된 것을 확인할 수 있었습니다.



그래서 어디가 에러인지 모르다가, Pycharm에 있는 기능인 디버그 기능을 이용하니, 어디서 작동하다가 걸려서 작동이 정지가 되는지가 나오는 것을 볼 수 있었습니다.



바로 이 부분에서 걸린다는 것을 알 수 있었습니다. 아마 10초마다 계속 실행이 되라고 만들어 놓아서, 이런 에러가 발생하는 것이 아닌가 하는 생각이 듭니다.




그래서 이번에는 어떻게 하였냐 하면, 기존처럼 타이머를 가지고서 하는 것이 아니라, 아예 실시간 주식 투자 버튼을 누르면 searching이라는 변수가 True로 바뀌고, 이게 True인 경우에만 Requirement_of_current()메서드가 작동하도록 만들어 주도록 합니다.



그리고 중지하라는 명령을 내리면, 위 스크린샷과 같이 searching이라는 변수를 False라고 바꾸어 주어서 더 이상은 작동을 못하도록 만들어 주면 됩니다.



그리고 기존에는 그냥 return이라고 하고서 끝을 냈는데, 이번에는 위 스크린샷처럼 delay_of_pytrader라는 식으로 메서드를 만들어서 sleep()명령어를 줍니다. 이 함수가 있으면 1초간 잠시 정지를 하는데, 이 이후에 다시 RLTrader를 시작하기 위한 메서드로 돌아가서 중지 명령이 내려진 것이 아닌지 확인을 하게 됩니다.



이렇게 해서 일단 주문이 제대로 나오는지 확인을 해 봤는데, 우선 실시간으로 계속 쉼없이 작동을 하는 것 까지는 확인을 할 수 있었습니다.



다만 문제가 GUI 인터페이스 상에서는 정지를 시킬 수 없는 문제점이 발견되기는 했습니다만, 그래도 어떻게 정지를 억지로 시켜서 이렇게 마지막은 매수전으로 나오는 것을 볼 수 있었습니다.



이로서 어느정도는 중간에 프로그램이 정지-프리징이 되어서 연속으로 조회가 되지 않는 문제까지는 해결을 하는 데 성공했습니다만, 문제는 이제 어떻게 해서 RLTrader와 pytrader를 연결할 수 있는지에 대해서는 아직 모르는 것이 많다는 생각이 듭니다. 아무튼 이 서로간에 데이터를 주고받는 문제까지 해결하고 나서 나중에 지금까지 했는 포스팅의 내용을 차근차근 정리해 보겠습니다.

반응형