본문이 쓸데없이 길어졌으니 바쁜 현대인을 위해 바로 핵심만 짧게 요약합니다.
1) 신한인디i 설치는 웬만하면 기본경로에.
2 , 4) 예제는 32비트 python을 관리자 권한으로 실행해야함.
3) python 모듈 설치 필요 (+ 없어진 모듈이 있어 코드 수정 필요)
+ 데이터 처리와 관련하여 문자열->숫자로 코드 변경해야하는 부분 있음.
Python이 요즘 너무 재밌어서 주식 자동매매 프로그램을 만들고자 했습니다.
제가 주로 이용하고 있던 신한금융투자에서 제공하는 방법으로는 "신한인디i"라는 프로그램을 받아 이쪽에서 제공해주고 있는 예제를 가지고 연습하는 것 입니다.
개발 연차가 느껴지는 삽입그림과 G#, MFC, VIsual Basic.... 깜짝 놀랄 시스템 설치 최소 사양....
어쨋든 이런 고조할아버지 같은 프로그램에 python3 예제가 있다는 것만으로도 정말 감지덕지입니다.
(2004년 개발되었지만 그래도 20년9월 마지막 변경로그가 있는 것을 보니 꾸준히 관리는 하고 있었네요...???)
신한인디i 받아 설치하고 로그인 후 예제를 visual studio code에서 돌려보았으나 예제가 에러가 나고 작동되지 않더군요.
이를 해결하기 위한 몇가지 팁을 찾아내는데 수시간을 사용했고, 누군가를 위해 공유합니다.
하나하나 설명하지 않고 바로 주의사항이자 해결방법부터 말씀드립니다.
1. 신한인디i설치는 C:\Shin..... 인 기본 경로에 그냥 그대로 설치하세요.
기본경로에 설치하지 않았더니 트레이아이콘 우클릭해서 켤 수 있는 IndiHelper가 경로문제로 켜지지 않았습니다.
IndiHelper는 함수 입출력값 확인 등을 할 수 있어 개발하는데 꽤나 유용해 보입니다.
2. python 32비트가 필요합니다. 64비트로는 Qt에서 에러납니다.
이 부분 찾는데 가장 많은 시간을 소모했습니다. Qt를 안써본 이유로 왜 안되는지 한참 찾아 헤매었습니다.
Python 설치 파일 중 -64가 붙어있지 않은 그냥 x86 설치하시면 됩니다.
단 설치 중 Add Python to environment variables 선택 시 환경변수가 업데이트 되어 기존에 64비트 파이썬 사용하셨었다면 앞으로 다른 것 하실때에도 자꾸 32비트가 자동으로 선택될 수 있습니다. 저는 체크 해제하였습니다.
# "설치하신 경로\python.exe" -m venv 환경이름
"D:\Program Files (x86)\Python39-32\python.exe" -m venv venv
저는 위 방법처럼 가상환경 만들어 사용하였습니다.
3. 설치할 모듈
python -m pip install PyQt5 pandas matplotlib numpy mplfinance
로 얼추 필요하신 module 들 설치하실 수 있습니다. (이 부분은 이미 다들 아시겠지만!)
일단 여기까지 하시면 https://wikidocs.net/22706 이곳에서 소개된 로그인은 문제없이 동작할 것입니다.
(저는 로그인 되어있는 상태에서 돌려봐서 True가 반환되는 것만 확인했습니다.)
이후 IndiChartExam.py를 실행해보고자 했습니다.
일단 matplotlib.finance가 없다고 못찾아서 9번째 줄의 import matplotlib.finance as matfin은 주석처리했습니다.
대신 12번째 줄에 있는 import mpl_finance를 주석 해제했습니다만.... mpl_finance도 이미 뭔가 경고가 뜨며 변경하라는 글이 발생하기에 mplfinance.original_flavor로 변경했습니다.
이렇게 실행해보면, 왼쪽에 떠야할 종목 코드 리스트가 안뜹니다.... 정말 힘들고 열받았으나, 오랜 시간 또 검색을 통해 해결 방법을 찾았습니다.
4. Python을 관리자 권한으로 실행할 것...
Python을 바로 실행하시는 경우 python.exe에 속성->호환성->관리자권한 으로 권한 넣으시고,
저의 경우에는 visual studio code를 통하여 사용하는데 여기서 관리자 권한으로 python이 실행되도록 하기 위해서는 visual studio code를 관리자 권한으로 켜면 됩니다.
이 때 정말 환호성 지를 뻔 했습니다.
종목 하나를 왼쪽에서 선택하시고 우측에 종가선 차트를 클릭하시면 이제 아래와 같이 뜹니다.
에휴. 이 예제는 누가 관리하는 건지.....
그래도 이제 신한인디i와의 통신이 제대로 되는 점에 만족하고 있습니다.
참고로 134번줄과 161번 줄에
daeshin = {'open': value[2], 'high': value[3], 'low': value[4], 'close': value[5]}
라는 내용을 아래와 같이 변경해야 제대로 됩니다. 결국 value에 저장된 값은 string type이라 이를 숫자로서 인식하도록 변경한 것입니다.
daeshin = {'open': list(map(int,value[2])), 'high': list(map(int,value[3])), 'low': list(map(int,value[4])), 'close': list(map(int,value[5]))}
이제 차트는 정상적으로 받아와 보일 수 있게 됐습니다.
(그리드의 경우 제가 136번줄 밑에 plt.grid()를 추가했기 때문입니다.)
이제 남은 문제는 캔들차트 입니다.
캔들차트의 경우 다 괜찮은데 날짜가.... 과거가 우측으로 정렬되어있습니다.
이 부분은 현재 시점에서 이미 너무 많은 시간이 소모됐고, 제가 이 캔들을 볼지 안볼지 모르겠어서 일단 더이상 손대지 않았습니다.
누군가에게 많은 시간을 아낄수 있는 큰 도움 되었기를 바랍니다.
'PC > Programming' 카테고리의 다른 글
[Power automate desktop] 사용 후기 (0) | 2021.03.13 |
---|---|
[Python] MD5 hash 값 출력 프로그램 (0) | 2020.11.24 |
[Telegram-bot] NAS_bot(윈도우OS실행파일) (0) | 2020.11.09 |
[Telegram-bot] NAS_bot(소스 코드) (0) | 2020.11.09 |
[Python] image to Webp 변환 (3) | 2020.11.07 |
댓글