[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 와 Anaconda 병행 사용

PyEnv + Anaconda

개발환경은

  • Ubuntu 16.04 or later
  • Windows 7 or later
  • macOS 10.12.6 (Sierra) or later (no GPU support)
  • Raspbian 9.0 or later

pyenv 와 pyenv-virtualenv 기반으로 Anaconda 를 사용하려고 한다. pyenv로 배포본을 관리를 하고, pyenv-virtualenv와 conda 환경의 가상환경을 이용한다.

  1. pyenv-Anaconda 환경
  • ananconda 와 miniconda
  1. anaconda & miniconda 복합환경

1. pyenv - Anaconda 설치

설치할 anaconda 버전을 확이한다.

1
$ pyenv install -l |grep anaconda

anaconda 를 설치한다 - 시간이 많이 걸린다.

1
2
3
4
$ pyenv install anaconda3-5.3.1
Downloading Anaconda3-5.3.1-MacOSX-x86_64.sh.sh...
-> https://repo.continuum.io/archive/Anaconda3-5.3.1-MacOSX-x86_64.sh
...

anaconda3-5.3.1 버전을 전역에서 사용하도록 한다.

1
$ pyenv global anaconda3-5.3.1

global로 지정하고 버전을 확인해 보면

1
2
3
4
$ pyenv versions
system
3.8.1
* anaconda3-5.3.1 (set by /Users/qkboo/.pyenv/version)

일반적으로 Anaconda 만을 사용한다면 설치후 사용자 쉘 환경에서 conda 를 사용하기 위해서 환경변수를 초기화 해야 하는데 다음 명령으로 실행한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ conda init bash
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/condabin/conda
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda-env
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/activate
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/deactivate
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.sh
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/fish/conf.d/conda.fish
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/shell/condabin/Conda.psm1
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/shell/condabin/conda-hook.ps1
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages/xontrib/conda.xsh
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.csh
modified /Users/qkboo/.bash_profile

==> For changes to take effect, close and re-open your current shell. <==

위 명령은 아래 환경 변수가 작용해서 conda 의 가상환경을 다루는 쉘 스크립을 실행해 준다.

1
2
3
4
5
NACONDA_HOME=/Users/who/anaconda3
PATH=$PATH:$ANACONDA_HOME/bin

export ANACONDA_HOME
export PATH

쉘을 다시 열면 쉘 프롬프트가 변경된다.

1
(base) qkboo@ ~$

pyenv 기반 Anaconda 사용

그런데 pyenv 에서 다른 배포본과 Ananconda 를 같이 사용한다면 conda 초기 환경이 아주 불편할 수 있어서 아래 같이 conda 가상환경 시작을 불가능하게 해야 한다.

init conda, the following command write scripts into your shell init file automatically

1
2
3
4
conda init

# disable init of env "base"
conda config --set auto_activate_base false

보통 conda init 를 해주면 쉘 스크립의 마지막 위치에 삽입된다. 그러므로 .bash_profile 에 있는 pyenv 초기화가 항상 마지막에 실행되도록 하자.

1

pyenv 와 anaconda 환경의 전환 정리

Examples of managing virtual environments.

1
2
3
4
5
6
# virtual environments from pyenv
pyenv install 3.6.9
pyenv virtualenv 3.6.9 new-env
pyenv activate new-env
pyenv deactive
# You can also use `pyenv local`
1
2
3
4
5
# virtual environments from conda
conda create -n new-env python=3.6
conda env list
conda activate new-env
conda deactivate
1

1

anaconda 패키지와 환경관리를 할 수 있는 conda 명령어 몇가지를 소개

1
2
3
4
5
6
7
8
9
10
11
// 아나콘다의 버전 확인
conda --version

// 아나콘다 버전 업데이트
conda update conda

// 설치된 패키지 리스트
conda list

// conda 통해 설치 가능한 패키지 검색
conda search "tensorflow"

conda에서 개발 준비하기

Anaconda 설치가 완료되면 conda 명령으로 TensorFlow를 사용할 환경을 구성하고 사용해 보자.

가상환경 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ conda create -n tensorflow_env

...

The following packages will be downloaded:

package | build
---------------------------|-----------------
pip-20.0.2 | py37_1 1.9 MB
tensorboard-2.0.0 | pyhb38c66f_1 3.3 MB
...

The following NEW packages will be INSTALLED:

_tflow_select: 2.3.0-mkl
...

Proceed ([y]/n)?

또한 python= 인자로 파이썬 버전을 지정할 수 있다.

1
$ conda create -n tensorflow python=3.8

현재 생성한 가상환경을 확인해 보자,

1
2
3
4
5
(base)$ conda env list
# conda environments:
#
base * /Users/qkboo/.pyenv/versions/anaconda3-5.3.1
deep-learning /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/envs/deep-learning

새로만든 conda 가상환경을 활성화 한다.

1
2
$ conda activate tensorflow_env
(tensorflow_env) qkboo@ ~$

가상환경에서 Jupyter Notebook 을 설치한다.

jupyter notebook 설치

활성화한 가상환경에서 Jupyter Notebook 을 설치한다.

1
(tensorflow_env)$ conda install jupyter notebook

필요시 nb-extension 설치

1
2
3
4
5
6
7
8
9
10
(tensorflow_env)$ conda install -c anaconda-nb-extensions nb_conda
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

environment location: /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/envs/deep_learning

added / updated specs:
- nb_conda

2. anaconda & miniconda 복합환경

현재 시스템에 pyenv로 파이썬 환경이 anaconda, miniconda 그리고 python 3.9 등이 중복되어 설치되어 있다. pyenv 가 중심이 되어 conda 를 다루기 위해서 miniconda 를 우선으로 구성되어 있다. shell 스크립트 부분이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/qkboo/.pyenv/versions/miniconda3-latest/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/Users/qkboo/.pyenv/versions/miniconda3-latest/etc/profile.d/conda.sh" ]; then
. "/Users/qkboo/.pyenv/versions/miniconda3-latest/etc/profile.d/conda.sh"
else
export PATH="/Users/qkboo/.pyenv/versions/miniconda3-latest/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<

# Pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

현재 pyenv 로 설치한 파이썬 환경을 살펴보면,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
qkboo@ ~$ pyenv versions
system
3.8.1
* 3.8.7 (set by /Users/qkboo/.pyenv/version)
3.8.7/envs/opencv4
3.8.7/envs/tf2_build
3.9.1
anaconda3-5.3.1
anaconda3-5.3.1/envs/opencv3
anaconda3-5.3.1/envs/opencv4
anaconda3-5.3.1/envs/py27
miniconda3-latest
miniconda3-latest/envs/deep_learning
miniconda3-latest/envs/django3
miniconda3-latest/envs/tf24_cpu
miniconda3-latest/envs/tf2_p37
miniconda3-latest/envs/tkinter
opencv4
tf2_build

conda 툴을 사용하는 anaconda, miniconda 가 혼재된 환경에서 pyenv로 가상환경을 즉시 활성화 시키면 conda 명령 실행에 혼선을 일으킨다. 예를 들어 위의 가상환경 anaconda3-5.3.1/envs/opencv4 을 pyenv로 활성화 하고 python, conda 명령을 실행해 보면

1
2
3
4
5
~$ pyenv shell opencv4
~$ pyenv version
opencv4 (set by PYENV_VERSION environment variable)
~$ which python
/Users/qkboo/.pyenv/shims/python

가상환경의 python 위치를 확인해 보고, conda 명령을 찾아 보자,

1
2
3
4
5
6
7
8
9
~$ pyenv which python
/Users/qkboo/.pyenv/versions/opencv4/bin/python

$ pyenv which conda
pyenv: conda: command not found

The `conda' command exists in these Python versions:
anaconda3-5.3.1
miniconda3-latest

pyenv 환경 아래 2개의 conda 때문에 혼선이 나타난다.

예를 들어 현재 쉘 환경에서 파이썬 환경 ananconda3-5.3.1 을 사용하도록 하고, conda 를 확인해 보면 명확하게 해당 파이썬 환경의 anaconda 의 가상환경을 가르키지만! conda env 명령의 결과는 다르게 나타낸다.
anaconda 뒤에 minicond를 설치해서 miniconda 가상환경이 우선으로 나타난다.

1
2
3
4
5
6
7
8
9
10
11
12
~$ pyenv shell anaconda3-5.3.1
~$ pyenv which conda
/Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda
~$ conda env list
# conda environments:
#
base * /Users/qkboo/.pyenv/versions/miniconda3-latest
deep_learning /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/deep_learning
django3 /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/django3
tf24_cpu /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/tf24_cpu
tf2_p37 /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/tf2_p37
tkinter /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/tkinter

그래서 가상환경 활성화시 가상환경 디렉토리를 지정해서 사용하자!

그래서 anaconda 와 miniconda 환경을 활성화 시키려면 shell, local, system 명령을 통해 설치된 파이썬 환경을 활성화 하고, 해당 파이썬 환경에서 가상환경을 다루는 것이 좋다.

예를 들어 현재 쉘 환경에서 파이썬 환경 ananconda3-5.3.1 을 사용하도록 실제 가상환경 위치를 지정해서 활성화 한다.

1
2
~$ conda activate .pyenv/versions/anaconda3-5.3.1/envs/opencv4/
(opencv4) ~$

[OpenCV] anaconda 이용 설치

OpenCV 설치

OpenCV 를 설치하기 위해서 소스 빌드, 패키지 설치 방법이 있다. 여기서 pip 기반 가상환경 그리고 Anaconda 를 사용한다는 가정에서 윈도우즈, 맥에서 OpenCV 를 설치하는 과정을 살펴보겠다.

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

1) 윈도우즈에서 OpenCV 설치

윈도우 기반에서 OpenCV 를 사용하기 위해서 Anaconda 배포본을 사용하는 것이 가장 쉽다.

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

conda 명령으로 설치하기

Anaconda 3가 설치되어 있다면 명령어 한 줄 입력만으로도 거의 최신 버전(글 작성시 버전 3.6.0)의 Python-OpenCV 라이브러리를 설치할 수 있다:

1
> conda install -c conda-forge opencv

conda-forge에 등록되어 있는 OpenCV 라이브러리에 대한 상세한 설명은 링크를 통해 확인할 수 있습니다. 필요한 경우, python virtualenv를 생성하여 개발환경 패키지를 관리할 수 있다.

OpenCV 3.3의 가장 큰 변화는 Deep Learning in OpenCV 라고 할 수 있겠습니다. 해당 링크에서 Deep Learning 관련 추가된 사항을 확인할 수 있습니다. 이외에 자세한 변경 로그는 OpenCV Change Logs Version:3.3을 참고하시면 되겠습니다.

여담으로 최신 버전 OpenCV 3.3.1 버전 이후에는 JavaScript Interface가 추가되어 인터랙티브 웹-기반 OpenCV 어플리케이션 구현이 공식적으로 가능해졌다고 한다.


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 가상환경과 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'
>>>

Gstreamer

1
$ sudo apt install python3-gst-1.0

참조