728x90


시스템 트레이딩용 DB 구축을 위하여  MySQL 를 사용합니다. 

DB (Database) 는 데이터 저장 공간으로 여러 사용자나 응용프로그램이 동시에 접근 가능합니다. 이러한 DB는 DBMS (DataBase Management System) 을 이용하여 관리하고 운영하게 되며, MySQL  은 관계형 DMBS 에 속합니다.  

관계형 데이터베이스란? (위키피디아 참조) 

키(key)와 값(value) 들의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 전산정보 데이터 베이스 


SQL 용어관계형 데이터베이스 용어설명
로우튜플 또는 레코드하나의 항목을 대표하는 데이터
컬럼속성(어트리뷰트, attribute) 또는 필드튜플의 이름 요소 (예: "주소", "태어난 날짜")
테이블관계 또는 기초 관계변수(base relvar)같은 속성을 공유하는 튜플의 모임. (컬럼이나 로우의 모임.)
 또는 결과 집합파생 관계변수(derived relvar)튜플들의 모임. (질의어에 응답하는 RDBMS의 데이터 보고서)


데이터베이스 도식화 

아래 사이트는 Microsoft 사의 Visio 와 유사한 Drawing tool 로 Web 에서 작업이 가능합니다. 로컬에서 작업하는 것이 아니기 때문에 네트워크만 연결된다면 어디서든 작업할 수 있다는 장점이 있습니다. 생각보다 느리지 않고 다양한 Shape 들을 제공해주고 있어서 원하는 DB 와 같은 관계도를 그리기에 편리합니다. 

링크 : https://www.draw.io/



시스템 트레이딩에 사용할 시스템 구축을 위한 DB 구조 

먼저, "종목  리스트" Table 을 생성 합니다.  

각 종목에 해당되는 "종목별 날짜별 거래 내용" Table 은  현재로부터 2년전까지 수집 합니다. DB 생성 후에는 매일  거래 내용을 Record 에 추가 합니다. 

최근 1개월 간의 "5분봉 거래 내용" Table 을 추가 하고, "종목별 날짜별 거래 내용" Table 과 일대다(one-to-many) 관계(relationship) 를 설정합니다. 

추가적으로 "뉴스 & 공시" Table 을 생성하고, "종목 List" Table 과 일대다 관계를 설정합니다. "종목별 날짜별 거래내용" Table 과는 날짜 Attribute 로 관계를 설정합니다. 



파이썬을 이용하여 DB 를 구축하는 방법 

1) MySQL 설치 

  - MySQL Download :  https://dev.mysql.com/downloads/
  



 Windows 에 설치 방법은 자세히 설명되어 있는 다른 블로그를 참조하였습니다.     

2) 파이썬에 PyMySQL 모듈 설치 

   2-1) Anaconda  3.7 Version 을 설치 (Kiwoom 증권사 API 를  사용할 것을 대비하여 32-bit 버전으로 설치함) 
 



   2-2) Pycharm 설치 
      Community 버전은 무료로 사용 가능하지만, 아래 그림과 같이 Professional Edition 에서만 Database & SQL support 가 가능하다고 하여 저는 Professional Edition  을 사용하였습니다. 


   2-3) 터미널 창을 열어서 Pip 명령어로 PyMySQL 라이브러리를 설치합니다. 

Anaconda 를 올바르게 설치가 되어 환경변수 PATH 에 python 경로가 제대로 설정되어 있다면, Terminal 에서 pip 명령어를 이용하여 설치가 가능합니다. 

명령어 : pip install pymysql 

저는 이미 설치가 된 상태이므로 위와 같은 결과가 나타납니다.  


3) MySQL 에 Database 생성 

mysql 이 제대로 설정되었으면, Terminal 에서 'mysql' 명령어를 사용할 수 있습니다. 만약 mysql 명령어를 입력할 수 없다면 아래와 같이 환경변수에 bin 위치를 추가해 줍니다. 


mysql 명령어를 이용하여 아래와 같은 명령어 입력합니다. 


사용한 옵션은 아래와 같습니다.

  -h, --host=name     Connect to host.

  -u, --user=name     User for login if not current user.

  -p, --password[=name]

                      Password to use when connecting to server. If password is

                      not given it's asked from the tty.



4) MySQL 에 Table 생성 

Table 생성은 Terminal 내에서도 가능하고, 아래와 같이 Python code 내에서도 실행이 가능 합니다.  
MySQL 관련 문법은 아래 링크를 참조하였습니다. 
## Table 생성
try:
sql = '''CREATE TABLE IF NOT EXISTS companyList(
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
mgroup VARCHAR(20) NOT NULL,
mcode char(6) NOT NULL,
mname VARCHAR(200) NOT NULL)
'''
cur.execute(sql)
except:
print("companyList Table 이 이미 DB 에 존재합니다.\n")

5) Table 에 내용 저장하기 

증권사 API 를 이용할 수도 있지만, 한번에 읽어들일 수 있는 정보가 제한적이라 웹 크로링을 통해서 정보를 수집합니다. 

수집된 정보는 MySQL 명령어를 이용하여 DB에 저장합니다. 




728x90

+ Recent posts