주식 자동 거래 시스템 구축을 시작하며

공대생 디자이너

·

2021. 1. 7. 06:37

 

들어가기 전, 주식에 대해 사소하고 잡다한 지식은 알고 있으나 직접 투자해보지는 않은! 일명 주린이라고 합니다. 개인적으로 금융 시스템과 전반적인 플랫폼에 관심이 많고, 파이썬을 연습해보자고 다짐하며 위키북스에서 출판한 "파이썬과 리액트를 활용한 주식 자동 거래 시스템 구축" 책을 사서 시작해봤습니다. 이 프로젝트를 통해 얻고자하는건 군대를 다녀온 후 잊어버린 언어에 대한 기억들을 조각모음해보며, 나의 자그마한 수익머신이 되길 소망입니다. 하지만, 첫 시작부터 순탄치는 않았고 시작하며 느낀 아주 기초적이고 사소하지만 어려웠던점을 간단히 적어보았습니다.

 

1. 주식 거래 프로그램은 32bit가 "필수"라는 것

기본적으로 무엇을 배우고 시작할 때 자신에게 맞는 운영체제와 프로그램을 가지고 시작하는데, 증권사 API들은 32bit만을 지원한다고합니다. COM과 같은 모듈API를 사용하게 되면서 32bit를 사용하지 않으면 오류가 난다고합니다만 현재는 64bit를 지원하는 win32com이 나온것으로 확인은 하였지만 일단 책대로 32bit python을 따로 설치하고 path도 바꾸고 virtualenv도 설정하여 진행하게 되었습니다.

 

2. 상위폴더에서 import하기

간단하게 생각해봤을 때 파이썬에서 모듈을 불러온다는 것은 import module로 모두 끝나는 줄 알았습니다. 하지만 테스트를 하기위한 파일을 만들면서 이런 경로에서 모듈을 불러올때 문제가 발생했습니다.

 

test_에서 ebest를 import하시오(10점)

일단 정해진 코드는 from stcoklab.agent.ebest import EBest 라고 합니다. 단순히 상위 폴더명에서 하위폴더로 진입 후 ebest.py를 불러오면 된다 라고 하는것 같습니다. 하지만 잘 생각해보면 test_파일에 그 어떤 곳에도 상위폴더가 stocklab이라는 명시가 되어있지 않았습니다. 조금 공부해본 결과 여러 방법이 있지만 프로그램을 실행시킬때만 임시방편으로 변수를 설정해주는 것이 제일 좋은 방법 같았습니다.

import os, sys
sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))
from stocklab.agent.ebest import EBest

시스템 함수에 임의로 폴더경로를 추가해주는 것이죠. 사실 정확히 이해한 것인지는 확실하지는 않습니다. 가상환경을 설정하여 이렇게 만들어보는 것이 익숙치 않아서 더 익숙해져야할 것 같습니다.

 

3. configparser의 read()함수

책의 내용을 참고하자면 소스자체에 정보를 하드코딩하는 것 보다 config.ini를 만들어서 정보를 관리하게됩니다.

이 때, confiagparser.ConfigParser()를 통해 객체를 선언하고 read()함수를 통해 경로를 읽어야합니다. 꼭 보고 따라하다보면 안되는 부분 중 하나가 여기있었습니다. 다음 소스에서 인자를 찾지못하는걸 보고 해결책을 강구하여 경로표기를 바꿔서 정상적으로 작동되었습니다.

원본 config.read('conf/config.ini')
수정 config.read('T:\DEV\Stock_Lab\conf\config.ini')

 

4. unittest가 뭔가요?

unittest라는 메서드를 처음 사용하면서 정말 많은 시간을 잡아먹게 되었습니다.
책에서는 login과 logout부분에 대한 unittest가 없었습니다. 오랜만에 코딩을 하다보니 지금까지 삽질(?)한걸 보고싶어 실행해보려했으나 나에게 보이는건 '0' 뿐이었습니다.

 

setUp()과 TearDown() 분명히 넣었잖아. 왜그래 나한테.

나와있는 명령어대로 열심히 아주열심히 진짜 열심히 했는데 왜 안되는 걸까라고 생각하며 오랜만에 구글링을 하며 공부했습니다. 다행히 구글엔 저처럼 바보같은 사람은 없더군요. 그래서 나름대로 이 모듈의 프로세스를 분석해본결과 답은 쉬웠습니다. unittest를 진행할때 시작과 끝이 setUp과 TearDown이라면 테스트과정이 있어야하는데 test_로 정의된 객체가 없었습니다.

 

그래서 만들어드렸습니다 고객님.

그래서 test_pass를 선언해주었고 결과는 성공적이었습니다. 1개의 테스트가 돌아가며 setUp과 TearDown을 1회 반복하게되었습니다.

 

이런 잡다한 삽질들은 시간이 가는줄 모르게 만들었고, 막상 해결하고나니 허무하면서도 보람찬 하루였습니다. 군대를 다녀온 공백기간동안 너무 많은 것들이 바뀌어있었고, 너무 많은 것들이 잊혀지고 있었습니다. 개인적으로 트렌디한 것을 좋아하고 빠르게 신기술을 공부하는게 재밌었는데 다시금 나만의 패턴을 찾아가고 있습니다.
이 프로젝트를 통하여 더 나은 내일이 되자고 생각합니다. 완성하는 그날까지 포스팅할수 있도록 화이팅하겠습니다!!

 

 


작성한 내용은 개인적인 경험에 의해 작성되었습니다.

포스팅 내용의 잘못된 부분이나 질문은 댓글과 이메일로 언제든 남겨주세요!

포스팅 내용이 도움이 되고 공감이 되었다면 공감버튼 꾹 눌러주시면 감사하겠습니다!

 

 

'major > python' 카테고리의 다른 글

FastAPI 찍어먹기  (0) 2021.02.02
주식 자동 거래 시스템 구축 (1) get_code_list  (0) 2021.01.21