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

1월 마지막주 화요일 모의투자에 들어가기-3-

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

안녕하세요?


지난번 포스팅에서 새로운 에러가 발생하는 바람에, 이를 해결하기 위해서 동분서주했고, 문제는 이러고도 새로운 에러가 계속해서 생긴느 것을 볼 수 있었을 것 입니다. 계속해서 이 에러들을 해결하기 위해서 일단 작업을 하고 또 했으며, 그 관련된 내용을 이번 포스팅에서 올려 보겠습니다.



그래서 다시 한번 -200이 되었다고 해서 다시 시작을 하지 말고, 이번에는 다시 요청을 하는 것으로 방향을 바꾸어서 다시 시도를 하도록 했습니다.



그런데 이렇게 했더니, 이번에는 -211이 호출이 되고 나서, 새로 시작한 다음에 다시 RLTrader까지 성공적으로 부르는 것을 볼 수 있었습니다.



하지만 그것도 좋아할 것이 아닌게, 어디서 또 막혀서 게속 pytrader가 멈추어 있는 것을 볼 수있었습니다. 그래서 이 문제를 해결하기 위해서 다른 방법을 사용해야 하는게 아닌가 했습니다.



그 해결책으로 생각해 보니, return값을 if문 마지막에 붙여 주는 것 이었습니다. 생각해 보면, 이렇게 해 주지 않으면 comm_rq_data는 끝나기 전까지 절대로 self.resultOfComm을 반환하지 않을 것이고, 이러면 계속해서 기다리는 결과만을 초래할 것 입니다.



그런데 문제는 이렇게 했는 것은 좋은데, -200이후에 계속해서 새로 요청만 무한으로 하기만 하지, 다시 시작하는 것을 못하는 것도 발견할 수 있었습니다.




그래서 이번에는 이런 요청도 한도를 정해서, 지정된 횟수를 넘기면 자동으로 다시 시작하도록 만들기 위해서 카운터를 제작하도록 합니다. 여기서 이 변수는 pytrader에서도 사용이 되어야 하기 때문에, 이렇게 클래스 변수로 만들어 줍니다.



그리고 나서 이 변수를 지정해서, -200일때 다시 기다렸다가 요청을 해도 되는데, 문제는 이 횟수가 3을 초과하게 되면, 바로 다시 시작하라는 메서드를 작동시키도록 만들어 줍니다.



그리고 나서 다시 pytrader.py로 돌아와서, 이 다시 시작하기 위한 메서드에서 기존의 receive_tr_code를 위한 메서드의 플래그만이 아니라, 이렇게 요청횟수를 측정하는 카운터까지 초기화를 시키는 것을 잊지 말도록 합니다.



이렇게 해서 일단 잘 가는가 싶더니, 위 스크린샷처럼 나오는 것을 볼 수 있었습니다. 즉, 어떤 종류의 에러에 대처한다고 해도 위 스크린샷처럼 어느 시점에서 계속해서 pytrader가 정지되어 버리는 것을 볼 수 있었습니다.



그래서 이번에는 pytrader내에서 타이머를 만들어서 3~5분 사이의 시간동안 pytrader가 소위 아무것도 안하는 현상을 벌이고 있으면, 리셋해서 다시 처음부터 시작하도록 만들어 보고자 합니다.




그리고 나서 실시간으로 주식을 투자하는 메서드가 시작하자 마자, 여기서 타이머를 5분에 해당하는 300000밀리초로 만들어서 지정을 해 주도록 합니다.



다음으로 RLTrader가 계산을 끝 마지면 그 즉시 타이머는 멈추도록 만들어 주도록 합니다. 왜냐하면 이 상태에서 까지 계속해서 타이머가 돌아갈 필요는 없기 때문입니다.



그리고 나서 다시 시작하도록 만드는 메서드인 Wrong_Trun_Season_1이 시작이 되면, 타이머는 또 꺼지도록 설계를 하도록 합니다.



그런데 이 상태에서 처음 pytrader를 실행시켰을 때, 위 스크린샷처럼 에러 메세지가 뜨면서 제대로 가동이 되지 않는 것을 발견할 수 있었습니다.



이유는 바로 Wrong_Turn_Season_1을 같이 쓰고 있어서 발생한 에러였기 때문에, 위 스크린샷처럼 새로운 메소드를 만들어 준 다음에, 여기다가 한번이라도 제대로 pytrader가 작동을 한 적이 있으면 가동을 하라는 의미에서 위 스크린샷처럼 조건문을 만들어서 통과하도록 해 줍니다.




그런데 이번에는 위 스크린샷처럼 특정한 에러 메세지가 뜨는 것을 볼 수 있었습니다. 그래서 이 문제에 대해서 해법을 찾아야 했습니다.



그런데 알고보니 문제는 제가 메소드를 작성하면서 ()를 친 것이 문제여서 발생을 한 것이였지, 이것만 해결하고 나니까, 이제는 발생하지 않는 문제였습니다.



그리고 나서 이제 새로운 카운터 변수를 선언한 다음에, 이 변수가 실시간으로 주식투자를 하는 메서드를 작동시키면, 한번 통과할 때 마다 1씩 증가하도록 만들어 줍니다.



그리고 시간이 초과되었을 경우에는 위 스크린샷처럼 Wrong_Turn_Season_2라는 메서드가 작동을 하는데, 문제는 여기서 한번이라도 제대로 실시간 주식 투자가 이루어 졌을 때 작동을 하라는 식으로 명령을 내려 줍니다.



그런데 시작하자 마자 또 에러가 발생하는 것을 볼 수 있었습니다.



어디가 문제였는가 했더니, 바로 오타하나에서 비롯된 문제였습니다. 그래서 이 문제를 해결하기 위한 오타교정을 다 끝내고 나서야 제대로 pytrader가 작동되는 것을 확인할 수 있었습니다. 하지만, 문제는 이 작업까지 완료했을 타이밍이 이미 오후 3시 30분을 넘어간 시점이 되었기 때문에 더는 모의 주식투자를 할 수 없었습니다. 그래서 하는 수 없이 수요일을 기약할 수 밖에 없었습니다.

반응형