[HTS API] 대신증권 CybosPlus Python API 준비

국내 증권사들 중에서 주식거래 HTS 를 통해서 API 를 지원하고 있다. 여기서는 대신증권 CybosPlus 를 사용해보려고 한다.

  1. 대신증권 CybosPlus 설치
  2. 32bit Miniconda환경
  3. JupyterLab 시작
  4. Powershell Openssh 설치
    • 원격으로 접속시

증권 HTS API 와 Jupyter Lab 환경

HTS에서 제공하는 OpenAPI 를 사용해서 주식 정보 및 주문을 처리할 수 있다. 여기서는 Jupyter lab 으로 윈도우 머신에 설치된 Open API 를 지원하는 HTS 사용하는 과정을 정리했다.

증권사별 API 비교

“” 키움 증권 대신 증권 이베스트 증권
제공방식 OCX COM COM, DLL
파이썬 보통 좋음 보통
API사용성 보통 좋음 좋음
API거래 수수료 0.015% (HTS수준) 0.015% (HTS수준)
월정액 15000+0.0088%
0.015% (HTS수준)

사전 준비

  • 대부분 윈도우용 COM API 를 지원하는 HTS 는 32bit 기반의 Python 환경.
  • 32bit Miniconda2 를 설치해서 사용하겠다.

대신증권 CybosPlus 설치

대신증권의 API 서비스인 CybosPlus 를 사용한다.

  1. Cybos 5 설치
  2. Python2.7 32bit 환경인 Miniconda 32bit 버전 설치

Cybos 5 설치

설치를 하고 CybosPlus 로 인증서를 통해서 로그인한다.

HTS 가동과 연결

HTP 프로그램은 보통 자동으로 관리자 모드로 실행된다. 이 API를 사용하는 파이썬 프로그램도 역시 관리자 모드로 실행되야 한다.

32bit Miniconda2 환경

윈도우 머신에 Python2.7 기반 32bit 용 Miniconda 를 설치한다. 그리고 필요에 따라 64bit miniconda 를 설치한다. 설치하게 되면 32비트 버전은 Miniconda2, 64비트 버전은 miniconda3 으로 구분할수 있다.

대신증권 가상환경

관리자 권한으로 HTS 를 실행하기 때문에 Python을 통한 API 호출도 관리자 권한이 필요하다. 관리자 권한으로 miniconda 를 실행하고 대신증권 가상환경을 생성한다.

메뉴에서 miniconda 쉘을 실행하면 아래같이 나타난다.

1
2
3
(base) C:\Windows\system32>
(base) C:\Windows\system32>d:
(base) D:\> conda create -n daeshin_hts jupyter

대신증권 API를 사용하기 위해서 가상환경을 설정한다. 테스트/응용을 위해서 jupyter 환경을 구성한다.

1
2
3
4
5
6
7
8
9
10
11
(base) D:\>conda env list
# conda environments:
#
base * C:\Users\daddy\miniconda2
daeshin_hts C:\Users\daddy\miniconda2\envs\daeshin_hts
C:\Users\daddy\miniconda3
C:\Users\daddy\miniconda3\envs\deeplearning
C:\Users\daddy\miniconda3\envs\ml
C:\Users\daddy\miniconda3\envs\tf2
C:\Users\daddy\miniconda3\envs\tf25
C:\Users\daddy\miniconda3\envs\tf26

JupyterLab 시작

필요한 패키지를 설치하고 jupyterlab 을 실행한다. 먼저 가상환경을 활성화 한다.

1
(base) > conda activate daeshin_hts

패키지 설치

가상환경을 활성화 하고 jupyterlab numpy scipy matplotlib 패키지를 설치한다.

1
(daeshin_hts) > conda install jupyterlab numpy scipy matplotlib

콘다 가상환경이 생성된 후에 가상환경을 활성화 한다.

  • Jupyter Lab을 시작한다.
1
(daeshin_hts) > jupyter lab WORK_FOLDER

JupyterLab Config

원격 접속등을 위해서 비밀번호를 사용한다. 그러기 위해서 구성 파일을 통해서 비밀번호, 포트 번호등을 설정해야 한다.

generate-config

Jupyter Lab 에서 설정 파일을 생성한다. 다음 명령으로 각각 $HOME/.jupyter/ 위치에 jupyter_notebook_config.py 파일이 생성된다.

1
(daeshin_hts)> jupyter lab --generate-config

jupyter_notebook_config.py 설정 파일에 비밀번호를 추가하려면 비밀번호를 생성하는데 jupyter 명령과 python 명령에서 생성하는 2가지 방법이 있다.

1) jupyter 명령으로 패스워드 생성

첫번째로 아래는 쥬피터 폴더에 있는 파일 ‘jupyter_notebook_config.json’에 패스워드를 생성해 준다.

1
2
3
(daeshin_hts)$ jupyter notebook password                                        Enter password:
Verify password:
[NotebookPasswordApp] Wrote hashed password to $HOME\.jupyter\jupyter_notebook_config.json

위 명령으로 jupyter_notebook_config.json에 암호가 생성되면 “”sha1:723c…” 로 시작하는 패스워드 해시코드를 복사한 후 jupyter_notebook_config.py 파일의 c.NotebookApp.password 항목에 입력을 한다.

2) python 명령으로 비밀번호 생성

비밀번호 설정 다른 방법으로 파이썬에서 passwd 모듈을 실행해서 비밀번호를 얻을 수 있습니다.

1
2
3
4
5
6
7
(daeshin_hts)$ python
>> from notebook.auth import passwd
>> passwd()
>> Enter password:
>> Verify password:

'sha1:********'

출력되는 sha1 암호문자열을 복사해서 사용하시면 됩니다.

1
2
3
4
5
[jupyter_notebook_config.py]

c.NotebookApp.password = 'sha1:*********' # 외부 접속시 사용할 비밀번호
c.NotebookApp.ip = '*' # 어디서든 접속 가능
c.NotebookApp.port = 8888 # 접속에 사용할 포트

Powershell Openssh 설치

윈도우에 원격 접속해서 HTS를 위한 파이썬 가상환경에서 jupyterlab을 실행할 필요가 있다. 이때 윈도우 파워쉘에서 openssh 설치하고 연결한 후에 administrator 계정으로 관리자 모드로 jupyhter 를 실행한다.

윈도우즈 administrator 활성화

대신 hts 에 접속하기 위해서는 관리자 권한이 필요하다. ssh로 윈도우즈 계정 로그인은 되지만 hts 활설화를 위해서

  1. administrator 게정을 활성화 한다.

  2. 파웨쉘을 관리자로 실행해 다음 같이 실행한다.

1
(daeshin_hts)> net user administrator /active:yes
  1. jupyter-lab을 runas 명령으로 실행한다.
1
2
3
(daeshin_hts)> runas /env /user:administrator "jupyter-lab.exe .\Jupyter-HTS\"
administrator의 암호 입력:
jupyter-lab.exe .\Jupyter-HTS"을(를) 사용자 "DESKTOP-GOYANGI\administrator"(으)로 시작하려고 합니다.

참고

  1. openssh 서버 구성: https://docs.microsoft.com/ko-kr/windows-server/administration/openssh/openssh_server_configuration
  2. https://docs.microsoft.com/ko-kr/powershell/scripting/learn/remoting/ssh-remoting-in-powershell-core?view=powershell-7.1
  3. 윈도우즈 서비스 만들기: https://docs.microsoft.com/ko-kr/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer

pyenv-virtualenv 사용

pyenv-virtualenv

virtualenv를 사용하면 파이썬 런타임의 독립성을 한층 더 높일 수 있습니다. pyenv가 파이썬 버전을 관리하는 기능을 제공한다면, virtualenv는 파이썬 구동 환경을 관리합니다. pyenv를 이용하면 컴퓨터에 파이썬 버전 별로 1개의 파이썬 런타임을 설치하고 관리할 수 있습니다. virtualenv를 사용하면 파이썬 버전을 세분화하여 여러 개별 환경으로 구분하여 관리하는 기능을 제공합니다. 예를 들어서 python 3.5.2 런타임을 여러개 구성할 수 있고, 애플리케이션 별로 할당할 수 있습니다. 따라서, pyenv와 virtaulenv를 사용하면 매우 효과적입니다. 이러한 이유로 pyenv의 virtualenv 플러그인을 사용하는 것이 일반적입니다. pyenv-virtualenv 프로젝트는 https://github.com/yyuu/pyenv-virtualenv 에서 개발되고 있습니다.

pyenv-virtualenv 설치

pyenv-virtualenv는 OS별로 다음과 같이 설치할 수 있습니다.

macOS

pyenv-virtualenv 설치: homebrew

OS X는 homebrew를 이용하여 설치할 수 있습니다.

1
$ brew install pyenv-virtualenv

리눅스 pyenv-virtualenv 설치

pyenv를 pyenv-installer로 설치할 때 pyenv-virtualenv 설치가 포함됩니다. pyenv-installer로 pyenv가 설치되었다면 별도의 조치가 필요 없습니다.

pyenv로 virtualenv 생성

다음과 같은 명령으로 파이썬 환경을 구성합니다.

1
$ pyenv virtualenv <vertualenv-name>

은 생략 가능합니다. 버전을 생략할 경우 현재 시스템 버전으로 가상환경이 설정됩니다. virtualenv 플러그인으로 만든 가상환경인 경우 activate, deactivate 명령을 이용하여 활성화/비활성화합니다. 가상환경을 활성화/비활성화를 위해서는 다음 명령을 사용합니다.

1
$ pyenv activate <vertualenv-name>

가상환경 종료는 다음 명령을 사용합니다.

1
$ pyenv deactivate

가상환경을 삭제할 경우 다음과 같은 명령을 사용합니다.

1
$ pyenv uninstall <version>/<vertualenv-name>

버전을 설치해 봤으니 그 버전 위에 올라갈 virtualenv를 설치해보도록 하자. test라는 이름을 가진 virtualenv를 3.5.2버전 위에 설치해보자.

pyenv virtualenv [VERSION_NAME] [VIRTUALENV_NAME] 형식으로 입력해주면 된다.

1
$ pyenv virtualenv 3.5.2 test_virtualenv
1
2
3
4
5
$ pyenv versions

* system (set by PYENV_VERSION environment variable)
3.5.2
3.5.2/env/test_virtualenv

versions명령어로 3.5.2 위에 test_virtualenv라는 환경이 설치된 것을 확인할 수 있다.

쓰고있는 버전을 옮기려면 똑같이 shell 명령어를 사용하면 된다. activate명령어를 이용해도 된다.

1
$ pyenv shell[or activate] test

shell 명령어는 Python의 버전과 virtualenv에 모두 적용할 수 있는 명령어이고, activate 명령어는 virtualenv에만 사용이 가능하다. shell을 이용해서 다른 버전이나 virtualenv를 사용중이라면 pyenv shell system을 이용하여 기본 버전으로 되돌아올 수 있고, activate를 이용하여 virtualenv를 사용중이라면 pyenv deactivate를 이용하여 사용중인 virtualenv에서 나올 수 있다.

requirements.txt 생성

test를 하나의 Python 프로젝트라고 생각하자. 이곳에 프로젝트에 필요한 package들을 설치해야 한다. pip로 Django를 설치하고, freeze로 package들 목록을 추출해보자.

1
2
$ pip install django
$ pip freeze > requirements.txt

requirements.txt에 Django==1.10.1라고 현재 설치된 package가 적혀있다. 이는 pyenv파일에 독립적으로 설치된 package이고, 다른 virtualenv나 버전으로 옮기면 사용할 수 없게 된다. 이로써 의존성 관리 문제를 해결 하게 된 것이다.

다른 개발 환경에서 프로젝트에 설치된 패키지를 동기화하려면 virtualenv를 만들고, shell명령어로 사용 설정을 한 뒤에, requirements.txt파일을 받아서 다음과 같은 명령어를 입력한다.

1
$ pip install -r requirements.txt

requirements.txt라는 이름은 반드시 정해진 것이 아니라 package목록을 담는 파일이름으로 관습적으로 사용하는 것이다.

귀차니즘: autoenv

pyenv-virtualenv의 단점은 가상환경을 활성화하기 위해서 pyenv activate를 실행해야 한다는 것입니다. autoenv는 Python 프로젝트 진입시점시에 자동으로 virtualenv 환경 로딩하는 기능을 제공합니다. 가상 환경 활성화에 대한 귀차니즘을 없앨수 있습니다.

프로젝트 홈페이지는 다음과 같습니다.

https://github.com/kennethreitz/autoenv
설치

autoenv 설치

위에까지가 Python에만 종속되는 내용이었고, 이번에 설치할 autoenv는 Python뿐만 아니라 모든 명령어에 적용할 수 있다. 다음과 같은 명령어로 설치한다.

$ brew install autoenv
이번에도 .bash_profile에 설정을 해줘야한다. 다음과 같은 내용을 맨 밑에 넣어준다.

source $(brew –prefix autoenv)/activate.sh
autoenv를 이용한 자동화

autoenv는 터미널에서 디렉토리에 접근할 시에, .env파일을 찾아서 그 내용을 자동으로 실행시켜주는 간단한 기능이다. 그렇다면 test디렉토리를 만들어서, 디렉토리에 들어올 때 바로 test_virtualenv virtualenv로 설정되게 해보자! 명령어 한 줄을 입력하는 귀찮음을 덜 수 있는 것이다.

$ mkdir test_virtualenv
$ cd test_virtualenv
$ vim .env
.env파일안에 다음과 같은 내용을 입력하자.

pyenv shell test_virtualenv
제일 먼저 디렉토리에 들어가게 되면, .env의 내용을 실행할 것인지 물어보게 된다. 이 때 ‘y’를 입력해서 계속 실행되게 해야한다.

이제 터미널에서 test폴더에 들어갈 때마다 자동으로 test_virtualenv virtualenv를 쓰게 될 것이다! autoenv는 이것 뿐만 아니라 다른 분야에도 무궁무진하게 적용할 수 있다.

bash prompt

아래같이 bash 프롬프트에 가상환경을 표시해 주는 스크립이다.

image.png

참고

[OpenCV] virtualenv 이용 설치

OpenCV 설치

OpenCV 를 파이썬 기본 패키지 관리자 pip 와 venv 가상환경을 이용해서 윈도우즈, 맥 및 리눅스에서 OpenCV 를 설치하는 과정을 살펴보겠다.

    1. 윈도우즈에서
    1. macOS에서
    1. Linux에서

1) 윈도우즈 pip 기반 OpenCV 설치

윈도우 기반에서 OpenCV 를 사용하기 위해서 pip 기반으로 설치를 해보자.

whl 파일로 설치

윈도우에서 opencv를 빌드된 버전을 설치하기 위해서 https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv 에 있는 .whl 파일을 다운로드 받느다.

1
> pip install c:\downloads\opencv_python‑3.3.1‑cp36‑cp36m‑win_amd64.whl

pip

OpenCV의 main module만 사용한다면 아래처럼 설치하면 됩니다.

1
> pip install opencv-python

만약 main module과 extra module을 같이 사용하고 싶다면 아래처럼 설치합니다.

1
> pip install opencv-contrib-python

2) virtualenv 가상환경에서 openCV 설치

Python 가상환경과 Opencv

파이썬 개발시 virtualenv 를 사용한다면 OpenCV 라이브러리를 연결해 줄 필요가 있다. virtualenv 가상환경 생성시 파이썬 라이브러리는 복사가 안된다 그래서 가상환경 생성후에 cv2.so 라이브러리를 링크해줄 필요가 있다.

가상환경에 cv2.so 연결하기

python2 가상환경 cv3python2 가 있고, 여기에 OpenCV 를 사용하려면 다음 같이 cv2.so 라이브러리를 링크해 준다.

1
2
$ cd ~/.virtualenvs/cv3python2/lib/python2.7/site-packages/
$ ln -s /usr/local/lib/python2.7/dist-packages/cv2.so cv2.so

역시 python3 가상환경 cv3python3 가 있다면 python3 라이브러리에 있는 cv2.so 라이브러리를 링크해 준다.

1
2
$ cd ~/.virtualenvs/cv3python3/lib/python3.4/site-packages/
$ ln -s /usr/local/lib/python3.4/dist-packages/cv2.cpython-34m.so cv2.so

또한 cv2.so를 사용하기 위해서 각 가상환경에 numpy를 설치해 준다. Raspberry Pi 2에서 numpy를 pip로 설치할 때 약 10분 이상 소요된다.

1
2
3
4
5
$ workon cv3python2
(cv3python2) :~/ $ pip install numpy

$ workon cv3python3
(cv3python3) :~/ $ pip install numpy

마직막으로 파이썬을 실행하고 cv2를 테스트한다.

1
2
3
4
5
6
7
8
(cv3python3) ~/$ python
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>>

OpenCV 테스트

https://cinema4dr12.tistory.com/1283

파이썬을 실행해 cv2 라이브러리를 사용해 보자.

1
2
3
4
5
6
7
8
$ python
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>>

시스템에서 파이썬이 두 개 이상 설치되어 있으면 일반적을 Python2.7 버전이 기본 파아썬 이다.

1
2
3
4
5
6
7
8
$ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0-dev'
>>>

참조

Python - 과학계산을 위한 Jupyter(pip)

과학계산을 위한 Python3 및 pip를 사용한 scipy, jupyter 설치 및 구성을 요약하고 있다.

https://packaging.python.org/guides/installing-scientific-packages/

과학계산을 위한 Python Jupyter

과학계산을 위한 Python 과 Jupyter Notebook 환경을 정리한다.

  • 개발 프론트 엔드: Jupyter
  • 과학계산 모듈: numpy, scipy 등
자세히 보기

Python - 과학계산을 위한 Jupyter(Armbian)

Odroid C2, Raspberry Pi 계열의 ARM CPU를 위한 Armbian 에서 과학계산을 위한 Jupyter 설치 및 구성까지 요약하고 있다.

https://packaging.python.org/guides/installing-scientific-packages/

과학계산을 위한 Python Jupyter

과학계산을 위한 Python 모듈을 시스템 패키지로 설치하고 pip 를 사용해서 Jupyter Notebook 을 설치하고 사용하는 과정을 정리했다.

  • 개발 프론트 엔드: Jupyter
  • 과학계산 모듈: numpy, scipy, pandas
자세히 보기

Python - 과학계산을 위한 Jupyter(Armbian)

Debian 계열의 ARM CPU를 위한 Armbian 에서 과학계산을 위한 Jupyter 설치 및 구성까지 요약하고 있다.

https://packaging.python.org/guides/installing-scientific-packages/

과학계산을 위한 Python Jupyter

과학계산을 위한 Python 과 Jupyter Notebook 환경을 정리한다.

  • 개발 프론트 엔드: Jupyter
  • 과학계산 모듈: numpy, scipy 등
자세히 보기

Python - Install virtualenv on macOS X

Python 개발환경을 위해서 macOS에 설치된 python2.7 그리고 brew 같은 유틸리티로 python3.x 를 설치하고, pip를 사용해서 패키지를 관리할 수 있다. 그리고 다양한 모듈과 시스템 모듈의 분리를 위해서 버전 관리 도구인 virtualenvvirtualenvwrapper 를 사용해 가상 개발 환경을 구성하는 방법을 설명한다.

자세히 보기

Python - Install virtualenv on Linux

Python 개발환경을 위해서 시스템에 설치된 python2.7, python3.x 에서 사용하는 패키지 모듈을 pip를 사용해서 패키지를 관리할 수 있다. 그리고 시스템 모듈과 별도의 버전 환경으로 버전 관리 도구인 virtualenvvirtualenvwrapper 를 사용해 파이썬 가상 개발 환경을 구성하는 방법을 설명한다.

자세히 보기