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
728x90


시스템 트레이딩이란 무엇일까요? 

링크: https://www.nhqv.com/help_wooritrader/system1.html

 과거 가격 및 거래량 데이터에 근거하여 만든 매매규칙에 따라 컴퓨터를 이용, 지속적으로 거래하는 매매방법입니다.

매매 아이디어나 전략을 체계화하여 그것을 과거 기간 동안의 가격 자료로 검증한 후 그 성과를 분석합니다.
분석한 후 그 성과가 좋으면 시장에 적용하여 사용하는 것이며, 성과가 나쁘면 어떠한 부분에 오류가 있었는지 판단하여 전략을 수정하게 됩니다.


아래는 제가 생각하는 시스템 트레이딩의 장,단점 입니다. 


시스템 트레이딩의 장점 

- 감정에 휘둘리지 않고 매매 할 수 있음 

- 회사를 다니면서도 데이 트레이딩이 가능함  

- 어떤식으로 투자할지가 결정되면 과거 데이터 기반에서 수익이 나는지 시뮬레이션 가능함 

단점은? 

- 과거의 데이터를 기반으로 수학, 컴퓨터, 통계, 물리학등을 바탕으로 현재를 예측해야 함 (=퀀트) 
  하지만, 과거의 경험이 현재에도 반영한다는 보장은 없음 

- 다양한 상황들에 대해 예측할 수 없음. 상황에 따라 적용 가능한 로직을 개발해야 하는데 이 과정이 매우 어려움  




시스템 트레이더의 유형은? 

링크 : https://www.nhqv.com/help_wooritrader/system1.html

1st Stage

자유 재량적 트레이더(The Discretionary Trader) 
자신의 본능과 직관, 주위의 조언, 신문속보,루머등 계수화 할 수 없는DATA를 가지고 매순간 직감에 따라 뇌동매매 하는 단계로 충분히 돈을 잃고 나서 기술적 지표에 대한 관심을 가지게 되는 트레이더 초기단계

2nd Stage

기술적 트레이더(The Technical Trader) 
기술적 지표 등 개인적인 객관적 규칙을 이용하여, 수익성을 보장하는 지표와 언제 어디서 사고 팔아야 할지를 예측하기 위해 보조지표 중심으로 연구하기 시작하는 단계로 손절매 기법의 가치와 위험관리의 중요성을 배우게 되는 트레이더 단계

3rd Stage

시스템 기반 트레이더(The System Trader) 
계수화 할 수 있는 과거 데이터를 백테스트 해서 검증된 객관적인 시장진입 및 청산규칙을 사용하여 매매시스템을 이용하며, 자신의 성격에 맞는 시스템 트레이딩 기법을 찾기 위해 다양한 시도를 하는 트레이더 단계

4th Stage

완벽한 시스템 트레이더(The Complete System Trader)
지속적인 수익률 유지를 위한 단계 더 발전된 현금관리 규칙을 사용하고 시장특성에 따른 다수의 시스템 포트폴리오를 구성하여 시스템 트레이딩을 하며, 정교하고 다양한 스톱 설정에 많은 시간을 할애하는 트레이더 단계

한 단계 진화를 위한 솔루션

"5 Golden Rules" 
지속적인 수익률 유지를 위한 단계 더 발전된 현금관리 규칙을 사용하고 시장특성에 따른 다수의 시스템 포트폴리오를 구성하여 시스템 트레이딩을 하며, 정교하고 다양한 스톱 설정에 많은 시간을 할애하는 트레이더 단계

stop loss 없는 진입 금지

위험 보상율이 50% 이상인 경우에만 매매

지나친 레버리지 금지

달성이 가능한 현실적인 목표 설정

손실이 발생해도 치명적이지 않은 범위 내의 자금 매매



시스템 트레이딩을 위한 시스템 구축은 주식관련 Data 를 수집하는 것부터 시작됩니다. 가장 좋은 방법은 증권사 API를 이용하는 것이지만, API 의 요청 횟수를 제한하고 있기 때문에 초기 시스템 구축을 위한 대량 Data 요청은 웹을 스크래핑하여 획득 합니다.  

다음 금융 사이트다음 금융 사이트


1. 웹에서 KOSPI 전 종목의 주식 정보를 스크래핑하여 DB 에 저장  ( 다음 or 네이버 금융 사이트 이용

1) 날짜, 종가, 전일비, 시가, 고가, 저가, 거래량 

2) 외국인 지분율, 순매수량  

3) 기관 순매수량 

4) 공매도 거래량, 잔고수량, 거래대금, 잔고금액 

5) 뉴스, 공시 

6) 시간별 투자주체별 매매 동향 


2. 웹에서 얻지 못하는 정보 증권사 API를 사용해야 하는 내용 (키움증권 Open API 이용

1) 종목별 증권사순위요청 (opt10038)

2) 종목별 투자자 기관별 합계 요청 (opt10061) 

3) 종목별 투자자 기관별 차트 요청 (opt10060)  --> 당일별 개인 투자자 순매수 확인 

4) 증권사별 종목 매매 동향 요청 (opt10078) 

5) 주식 분봉차트 조회 요청 (opt10080) 

6) 주식 외국인 요청


KOSPI 종목들의 주식 정보들은 Local 의 DB에 저장하여 로직의 테스트 용으로 사용할 계획 입니다. 이때 DB 는 MySQL 를 사용하며 아래 포스팅에서 이어 설명합니다. 

2018/09/21 - [주식/시스템 트레이딩] - 시스템 트레이딩을 위한 DB 구축




728x90

'주식 > 시스템 트레이딩' 카테고리의 다른 글

시스템 트레이딩을 위한 DB 구축  (0) 2018.09.21
어떤 주식을 거래해야 하나  (0) 2018.08.25
728x90

한국 금융 연구원에서 발표한 2018년 2분기 국내은행 연체율 내용입니다. 

http://m.kif.re.kr/publication/pub_detail.aspx?md=&nid=188&vid=4740&cn=240339


지난 10년 동안 연체율은 안정적인 추세 였지만, 최근 소폭 증가하는 추세 입니다. 

위의 표의 내용은 

12년 부터 연체율이 하향 안정화 된 이유는 (1) 대출금리 인하에 따른 상환부담 감소, (2) 수출경쟁력 유지  때문 이라고 하네요. 


그렇다면 18년 하반기는 ?

금리 수준이나 대외여건 변화 등의 변화로 연체율의 상승 국면이 지속될 가능성이 있음 



아래 그래프는 2002년부터 고정이하여신비율의 변화입니다. 

지속적으로 하락하다가 2008~2013년 중에 현재 수준 대비 약 1.5~2.5배  수준까지 증가하였습니다.   

연체율 상승 시 (2018년 하반기 부터??) 나타날 수 있는 수익성 악화에 대비하여 완충력을 강화해 나갈 필요가 있다고 설명하고 있습니다. 

고정이하여신비율 이란? 

링크 : http://ecodemy.cafe24.com/notretu.html

은행에서는 빌려 준 돈을 정상,요주의,고정,회수의문,추정손실로 분류해서 대책을 세우고 있는데, 사실상 떼어먹혔다고 할 수 있는 고정, 회수의문, 추정손실을 특별히 고정이하여신이라 부르고 있습니다. 
만약 전체대출금에서 고정이하여신이 차지하는 비중이 높다면 어떻게 될까요? 당연히 은행의 생사도 위험해 집니다. 돌려받지 못하는 돈이 많은 만큼 예금한 고객에게 돈을 돌려주지 못할 수도 있기 때문입니다. 


아래 링크는 e-나라지표에서 은행고정이하여신비율을 확인할 수 있습니다. 하지만, 2018년 지표는 확인할 수가 없네요.. 

확인 방법 : http://www.index.go.kr/potal/main/EachDtlPageDetail.do?idx_cd=1094 



앞으로 무엇을 확인해야 하나? 

향후 은행권은 고정이하여신비율이 증가할 것을 대비하여 대손충당금적립비율을 증가할 것으로 보고 있습니다. 

보고서의 말을 인용하면

"주택담보대출 등 자기대출의 경우 금리인상으로 인한 상환비용의 증대에 따른 스트레스를 감안하여 충당금 적립수준을 높이는 것을 고려" 

한다고 합니다. 


대손충당금적릴률 이란? 

출처: http://www.index.go.kr/potal/main/EachDtlPageDetail.do?idx_cd=2435

 대손충당금적립률 : 문제여신에 대한 대손충당금 적립정도를 나타내는 지표

- 산 식 : [총대손충당금 잔액/고정이하여신 ] × 100

 · 총대손충당금잔액 : 총여신에 대한 대손충당금, 지급보증충당금, 채권평가충당금 및 대손준비금을 합계한 금액


일반적으로 100%를 상회하는 경우 현재의 문제여신이 은행경영에 크게 영향을 미치지 않는 것으로 판단할 수 있음 




결과적으로 은행들이 대손충당금을 쌓기 위해서 가계대출, 주택담보대출등의 이자가 증가할 수 있겠네요 . 



728x90

+ Recent posts