안녕하세요?


지난번 포스팅에서 어떻게 해서 예수금과 보유한 주식의 양을 가지고 오는 것을 보여주었습니다. 그런데 아직은 이 값들을 RLTrader에 전달해서 반영이 되지 았기 때문에, 이번 포스팅에서 이를 구현하고자했으며, 관련된 내용을 포스팅 하고자 합니다.



먼저 예수금과 주식의 보유량을 가지고 왔는 코드의 다음에, txtFile4와 5라는 변수를 만들고, RLTrader의 폴더에다가 한번 txt파일을 만들어 보도록 합니다.



다음으로는 이전에 처럼 RLTrader를 작동시키기 전에 생성된 txt파일에다가 내용을 적어 두도록 하는 것 입니다. 이렇게 해서 관련된 정보는 보내질 것으로 예상이 됩니다/



실제로 pytrader를 실행시킨 다음에, 위 스크린샷처럼, 이전에는 없었는 txt파일이 생성이 되어 있는 것을 볼 수 있었습니다. 그리고 내용이 제대로 와 있는 것을 스크린샷으로 보여주지 않았지만 확인 했습니다.



먼저 RLTrader에 가서는 위 스크린샷처럼 이전에는 없던 클래스 변수를 선언해 주도록 합니다. 그리고 나서, 다음의 작업에 들어가도록 합니다.




그리고 프로그램이 시작되는 부분에는 위 스크린샷과 같은 부분에서 txt파일을 열고, 이 그 내용을 읽어오는데, 관련된 내용을 문자열이 아닌 숫자로 입력해야 하기 때문에, 지정해 주도록 합니다.



그래서 기존에 최대한 거래를 할 유닛에는 위 스크린샷처럼 현재 보유량을 집어 넣어 주도록 하며, 다음으로는 balance항목에는 이전에 pytrader에서 보내온 예수금 정보를 집어 넣도록 합니다.



그런데 예수금 항목에 있는 쉼표 때문에 이런 문제가 발생하는 것을 볼 수 있습니다. 이게 예수금만이 아니라, 혹시라도 모르지만, 주식 보유량이 3자리를 넘어가면 발생할 수도 있는 문제라는 생각이 들었습니다.



그래서 하는 수 없이, replace()라는 함수를 사용했는데, 여기서 중요한 것은 쉼표인 ','를 대체하는 것이 ''라고 스페이스바를 누르지 않은 것이지, 공백이 들어가면 에러가 뜹니다.




그런데 readline()이라고 해서, 파일과 관련된 함수에는 전혀 이런 replace라는 함수가 적용이 되지 않기 때문에, 에러가 뜨는 것을 확인할 수 있었습니다.



그래서 한번 또 위 스크린샷처럼 바꾸어서 시도를 해 보았습니다만, 문제는 이러고도 에러가 뜨는 것을 볼 수 있었습니다. 다시 코딩을 해야 했습니다.



먼저 읽어온 내용을 str() 함수를 이용해서 먼저 문자열로 만든 다음에, replace()함수로 쉼표를 제거하였으며, 다음으로는 float()함수를 써서 실수로 만들고, 다음에 int함수를 써서 정수로 만듧니다. 마지막으로 이 함수는 클래스 함수로 쓰고 싶기 때문에, 미리 선언을 해둔 클래스 함수에 넣도록 합니다.



이렇게 하고 RLTrader만을 실행시켰을 때, 위 스크린샷처럼 예수금은 적용이 된 것을 확인을 할 수 있었습니다. 그런데 문제가 발생했습니다. 바로 이미 보유하고 있는 주식인 51주가 전혀 반영이 되지 않은 것을 확인할 수 있었습니다. 이게 사소해 보일 수도 있지만, 앞으로 주식을 중간에 처분해서 현금화 할 것을 생각하면, 이 문제는 그냥 넘길 수 없으리라 생각이 됩니다.

  1. PROFIT 2020.04.23 22:10

    한단계 한단계 넘어갈때마다 오류가 발생하는게 이제는 오류가 스트레스가 아닌 저를 흥미롭게 만드네요 ㅎㅎ

    이번에 발생한 에러는 모든 경로 지정이라던지 데이터 가져오는건 완벽하게 되었는데 비학습 투자 시뮬레이션부분에서

    ValueError: Shapes (256, 2) and (256, 3) are incompatible

    이러한 에러가 발생합니다. 그렇다고 루프가 끊어지는건 아니고 계속 현재가격을 가져오는데 저런 오류가 발생하네요... 혹시 방법이 있을까요?

    • 안녕하세요?

      이게 제가 했던 실수를 그대로 해서 나온 것 같은데, 제가 실수로 하다보니 그만 취할 수 있는 형태라고 해야 할까, 기계학습을 하는 부분에 Buy나 Sell외에 Hold라고 추가로 집어넣은 것 때문에 이러는 것 입니다. 이게 안 맞아서 그런데, 이걸 어떻게 설명해야 할지....... 일단 관련된 코드가 하드 디스크의 오류로 복구해야 볼 수 있지만, 지금 이야기 할 수 있는 부분은 그렇습니다.
      그렇다고 제가 코드를 볼 수 없으니......

    • PROFIT 2020.05.04 15:50

      그렇다면 hold 의 모든 코드들을 주석처리해버리면 될 가능성이 있을수도 있겠네요? 근데 그렇게 되면 제가 보유하고있는 갯수가 포함이 되지않아서 오차가 많이 생길거같네요... 아무리 수정을 해봐도 제 지식으로는 수정이 안되네요 ㅎㅎ

      그리고 또 다른 오류를 하나 발견했습니다.
      보유중이지 않은 종목을 실시간투자를 해보니 보유수량을 0이아닌 공백을 가져와서 그런거같다는 생각이 드는오류입니다.

      File "E:\SystemTrading\main.py", line 44, in __init__
      stock_quantity_1 = int(float(stock_quantity_1))
      ValueError: could not convert string to float:
      이러한 오류가발생하는데 같은 문제가 있으셨는지 궁금합니다

    • 안녕하세요?

      일단 제 경우에는 이 오류가 생기지 않았는데, 이 에러가 공백 때문이라면........ 일단 에러 메세지에서는 문자열 변수를 숫자로 바꿀 수 없다고 하는데, 아마 이 부분은 정보를 기록하고 있는 txt파일에서 문제가 생긴 것으로 보입니다. 진짜로 0이 아닌 공백이 들어와서 생긴 문제로 보입니다.

+ Recent posts