안녕하세요?


드디어 이사가 거의 다 끝났고, 이제는 주식 인공지능을 만드는 작업에 대해서 본격적으로 포스팅을 다시 시작해 보아야 겠다는 생각이 듭니다. 그럼 이번 포스팅에서는 pytrader2를 만들어서 먼저 부모 프로세스에서 자식 프로세스를 작동 시켜서 어떻게 모의 투자에 들어는 가는 것을 확인할 수 있었습니다. 그런데 문제는 제 의도는 분명히 pytrader2의 gui가 떠야 하는데, 정작 gui는 뜨지 않는 것을 확인해서 문제가 되었습니다.



먼저 이 작업을 위해서 우선 버튼을 일일히 클릭해야 하는 일이 없도록 만들어 줍니다. 그래서 주석처리를 해서 버튼을 눌러도 반응이 없도록 만들어 봅니다.



그 다음으로는 pytrader2가 시작하자 마자 시작을 하기 위해서 __init__()에다가 RLTrader를 시작하는 메서드를 작동되도록 만들어 주도록 합니다.



그리고 나서 위 스크린샷ㅇ레 보이는 것처럼 RLTrader를 시작하면 동시에 gui에서 중지라고 나오는 부분을 투자중이라는 부분으로 바꿀 수 있도록 만들어 줍니다. 물론 이 글자는 데이터 베이스와 RLTrader, 그리고 종목코드 등이 모두 지정이 되었을 때에만 바뀔 수 있도록 if문ㅇ를 사용하도록 합니다.



그런데 GUI는 뜨지 않고 pytrader2가 작동이 되는 것을 확인할 수 있었는데 정작 pytrader2의 GUI는 뜨지 않는 것입니다. 위 스크린샷처럼 __init__()에 있는 메서드를 주석처리 하면.....



이제서야 제대로 gui가 뜨는 것을 확인할 수 있기는 있었습니다. 그래서 이 문제를 해결하기는 해야 하는데, 정작 gui가 나타나면 메서드를 pytrader2가 시작하자 마자 실행시킬 방법이 없는 겁니다.



그래서 위 스크린샷처럼 단 한번만 스위치가 올라가는 타이머를 지정해 주도록 합니다. 이 타이머는 singleShot()이라는 함수를 사용하는데, 옆에 int형식의 숫자는 바로 밀리초인 시간이고, 뒤에 오는 메서드의 이름은 한번 타이머가 치면 연결이 될 메소드의 이름입니다.





그래서 이번엔느 위 스크린샷처럼 QtWidgets를 pyqt5로 부터 import해서 오도록 합니다.



그리고 나서 qApp.processEvents()라는 메서드를 사용해 보도록 합니다. 이 함수는 이전에 있던 작업이 완료가 될 때까지 기다리라는 의미가 있습니다.



그런데 이렇게 processEvents()함수를 사용했음에도 여전히 pytrader2에서 RLTrader를 작동시키면, gui는 제대로 나오지 않는 것을 확인할 수 있었습니다.



다음으로는 위  스크린샷처럼 한번 __init__(self): 메서드에서 처음 시작하는 형식을 바꾸어서 한번 작업을 해 보고자 색다른 것을 시도해 봅니다.



그러나 이렇게 했음에도 위 스크린샷처럼 메서드가 먼저 나오는데, 여기서 저는 위 스크린샷처럼 connected가 뜨는 것으로 보아서 로그인을 하는 메서드가 먼저 작동하는 것이 첫번째 문제가 아닌가 합니다.



그래서 먼저 로그인을 담당하는 메서드를 주석처리해서 불능화 시키도록 합니다.




그리고 나서 RLTrader를 작동시키기 위한 시작점이 되는 메서드에 이렇게 로그인을 담당하는 메서드를 집어 넣어서 실행을 담당시켜 주도록 합니다.



그런데 위 스크린샷처럼 에러가 뜨는 것을 확인할 수 있었습니다.



그래서 에러를 일으킨 __init__(self)에 있는 코드를 주석처리를 해서 불능화 시켜 주도록 합니다.



다음으로는 해당하는 코드를 일단 가지고 와서, Start_of_RLTrader에 넣어 주도록 바꾸어 주도록 합니다.



하지만 이렇게 했음에도 불구하고 상황은 좀처럼 나아지지 않았습니다. 일단 pytrader2를 작동 시키는 데는 성공했지만, pytrader2의 gui는 등장하기도 전에 메소드가 실행을 하고, 이 상태가 지속이 되면서 gui는 계속해서 등장을 하지 않는 현상이 이어집니다. 그래서 다음 포스팅에서는 이 문제를 계속해서 해결하기 위한 시행착오를 계속해서 이어서 올리겠습니다.


+ Recent posts