안녕하세요?


지난번 노트북의 고장으로 인해서 PyQt를 연습해 보는 것이 많이 늦어졌습니다. 그래도 어떻게 수리를 다 받은 다음에, 이에 대해서 한번 마지막 실습에 들어가 보았고, 관련된 내용을 한번 포스팅 해 보고자 합니다.



먼저 계좌정보를 얻어오기 위한 코드입니다. 여기서는 일단 다른 특별한 것은 없고, QPushButton()메소드로 누를수 있는 버튼을 만듭니다. 그리고 나서 QTextEdit()으로 수정을 할 수 없는 텍스트 상자를 만들어 주도록 합니다.



그렇게 해서 버튼을 누르면, dynamicCall()메소드를 써서, 로그인 정보중에 "ACCNO"라고 해서 계좌번호를 가지고 오도록 합니다.  그리고 나서 event_connect()라는 메소드를 사용해서 err_code를 가지고 와서, 로그인에 제대로 성공했다면, err_code가 0이기 때문에 if문에서 err_code가 0일 경우에는 "로그인 성공"이라는 메세지가 뜨도록 합니다.



일단 한번 프로그램을 실행시켜 보니, 제대로 제 모의투자의 계좌를 가지고 오는 것을 확인할 수 있었습니다. 이렇게 해서 계좌정보를 가지고 오는 실습은 성공했습니다.




다음으로는 종목 코드를 가지고 오는 코드를 실습해 보도록 합니다. 여기서는 리스트로 나오기 때문에, QListWidget()이라는 메소드를 사용했으며, 그 외에는 누를 수 있는 버튼을 만드는 것 까지는 똑같습니다.



그리고 나서 버튼이 눌러지면 dynamicCall()메소드에서 "GetCodeListByMarkert(QString)"이라고 코드를 가지고 오는 키움증권 Open API+의 C#으로 씌여진 메소드를 가지고 오도록 합니다.



이렇게 하는 것으로 제대로 리스트를 가지고 오는 것에 성공하기는 했습니다. 여기까지만 보면, 이 작업들이 무슨 의미가 있느냐는 생각이 들 수는 있습니다. 하지만, 제가 PyQt를 실습하면서 한번 키움증권 Open API+를 사용해 보는 시도를 해 보았고, 덕분에 Anaconda3를 32비트용으로 다운로드해서 설치하는 일을 할 수 있었습니다. 좀더 [파이썬으로 배우는 알고리즘 주식투자]라는 책에서 관련된 정보를 얻은 다음, 계속해서 제가 사용하고 있는 RLTrader와 연동시키는 방법에 대해서 한번 시도해 보겠습니다.

  1. 데이비드 2018.11.19 08:16

    안녕하세요 매번 올라오는 글을 보며 감탄하고 있습니다. 시행착오도 다 공유해주시니 그런 부분까지 배울게 참 많습니다. 저도 해보고 있는데 궁금한게 많아서 시간 괜찮으시면 질문도 하고 싶네요. 응원합니다 앞으로도 좋은글 많이 부탁드려요.

  2. 데이비드 2018.11.20 00:54

    제가 감사합니다. 한가지 여쭙고 싶은게 있습니다.

    언젠가부터 loss값이 nan으로 나오는데 policy_network 내 train_on_batch 메소드가 문제가 있는거 같다는 생각이 듭니다
    print로 찍어보니
    loss += self.policy_network.train_on_batch(x,y) 이후로 'nan'이 출력되네요

    저만 그런가요...?
    (참고로 문제가 되는건 policy_learner 162번줄입니다)

    추가로 loss의 기능이 무엇인지 설명해주실수 있나요? nan이 출력되도 학습은 계속 진행되더라구요. 두서 없이 질문드리지만 답변 부탁드립니다.

    • 안녕하세요?

      저도 그 문제를 해결하지 못했는데, 일단 책에서 설명을 하기로는 '학습 데이터와의 차이'라고 합니다. 이 값이 작으면 작을 수록 학습데이터와 더 일치한다는 것인데, 제 직감입니다만, 이 값이 0.0미만인가 내려가면 '과적합'이 되는 듯 합니다.
      다만, 이게 아마 '분단위 단타 자료'를 가지고서 하니까 저는 loss항목에 nan이라고 나오는데, 저 역시 지금은 이걸 어떻게 해야 할지 모르겠습니다.

  3. 데이비드 2018.11.22 20:56

    안녕하세요
    저는 진도 나가기를 잠시 멈추고 loss에 nan이 발생하는 문제를 들여다봤습니다. 예상되는 원인이 있었는데 어젠 일이 바빠서 못해보고 오늘 해봤는데 해결이되어 공유드립니다.
    원인은 train_on_batch의 input data인 array x내에 nan이 있기 때문이였는데 아마도 이동평균 계산하다 생긴것 같고 loss 계산하는 코드 앞에 x를 다시 정의해주고나니 해결되었습니다. 도움이 되었으면 좋겠네요
    x = np.where(np.isnan(x), 0 , x)

    • 아이쿠 감사합니다.
      저야 사실은 전공이 컴퓨터와는 거리가 있는 곳에서 오다보니, 이런건 정말 안되는데, 데이비드님의 도움을 잊지 않겠습니다.

  4. 데이비드 2018.11.23 12:12

    저도 컴퓨터 전공은 아니긴한데 코딩에 관심이 많아서 여기저기서 틈날때마다 보고 있어요. 글보면서 많이 배워요. 제가 도움이 되었다니 감사하네요. 해보다가 좋은 정보 있으면 공유할게요

+ Recent posts