- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
G-SQL 이제는 말할 수 있다: 주식 자동매매 프로그램(상)
2017.07.15 14:51
이제는 말할 수 있다: 주식 자동매매 프로그램(상)
성공과 실패의 경험을 나누자, 용기와 희망을 나누자
개발업무를 시작으로 IT계에 입문했던 필자가 10년 가까이 DB 엔지니어로서 활동하면서 얻은 경험과 지식을 나누고자 한다. DB를 자주 접하는 SW 개발자뿐 아니라, DB 전문가를 꿈꾸는 대학생에서 DB 분야에 입문한 지 1~2년 된 기 입문자가 쉽게 이해할 수 있도록 비유를 통해 쉽게 접근해볼 계획이다. 물론 전문가들이라도 다시 한번 개념을 정립하는 의미에서 필요한 내용이 될 수 있다.
전체적으로 DB의 기본 원리와 개념을 이해하고 테이블, 인덱스, 쿼리, 튜닝, 플랜 등 개발자들이 알아야 하는 DB 전분야에 대해 쉽게 이해하도록 설명하겠다. DB 기술서적이나 번역서보다는 조금 더 부드럽게 접근할 계획이다. 그렇다고 흔히 서점에서 만날 수 있는 개발자 위주의 SQL 소개서도 아니다. 이 연재는 시리즈로 나갈 것이다. 연재를 끝까지 읽는 독자라면, 준전문가 수준의 DB 원리를 아는 것을 목표로 한다.
프로그래머의 길에서 벗어나다
2002년 월드컵의 열기가 전국을 뒤덮고 있을 때, 5년간 근무하던 회사를 그만 두었다. 입사 이후 줄곧 월화수목금금금에 더하여 야근까지 강행한 탓에 더 이상의 체력도 열정도 남아있지 않았다. 퇴사를 결심할 때는 후련한 마음이었지만 막상 퇴사가 현실이 되자 두려움이 엄습했다. 내 나이 30대 초반의 일이다.
대부분의 직장인들이 일에 회의감을 느끼는 나이가 30대 초반이라고 한다. 인생에 있어서 중요한 분기점이 되는 나이인 것이다. 나 역시 프로그래머로서 앞날에 대한 불확실한 미래와 앞으로의 진로에 대한 고민이 생긴 시기다. 처음 입사하여 수년간은 프로그래밍을 배우면서 하나씩 늘어나는 실력에 기쁨을 느꼈고, 회사에서 역할이 커짐에 따라 성취감도 생겼다. 하지만 이러한 삶이 결코 나를 지속적으로 행복하게 해 주지 못할 것이란 생각이 들어 퇴사를 결행했다.
이후 몇 개월간은 정말 아무것도 안 하고 빈둥빈둥 놀았다. 이렇게 보내는 시간이 길어질수록 마음 한구석에는 불편한 마음도 커져갔다. 이곳 저곳 혼자서 여행도 다니고, 그 동안 너무나 바빠서 수년간 못 본 친구들도 만나면서 그렇게 시간을 보냈다. 이때 만난 고향 친구와의 만남이 내 인생에 새로운 전환점이 될지는 그때는 몰랐었다.
IMF! 구조조정! 주식! 새로운 길을 찾다.
고향에 가서 친구를 만났다. IMF 여파로 인하여 나보다 일찍 회사를 그만둔 친구다. 그 친구가 다니던 보험 회사는 IMF의 혼란 속에 다른 동종업계로 흡수되었다. 그 친구는 주식을 하고 있었다. 당시 IFM 극복의 일환으로 정부가 IT 산업을 집중 육성함에 따라 IT 관련주가 고공행진을 하고 있었다.
친구와의 대화 속에서 내가 경험하지 못했던 새로운 신세계를 보았다. 주식에 대한 그의 지식과 열정에 놀라웠고 거침없는 이야기에 푹 빠져 들었다. 그 친구는 스윙트레이딩, 데이트레이딩, 스켈핑을 하고 있었다. 요즘에는 잘 알려진 용어지만 당시엔 생소했고 그 의미도 잘 몰랐다.
혹시라도 주식에 관심이 없는 독자를 위해 위에 나온 용어를 소개하자면, 스윙트레이딩은 매일 마감 전에 청산하지 않고 며칠 주기로 매매하는 투자를 말한다. 데이트레이딩은 하루 일중에 거래하고 마감 전에 포지션을 청산하는 단기 매매를 말한다. 스켈핑은 데이트레이딩과 의미는 동일하나 분 또는 초 단위로 매매하는 초단기 매매를 의미한다.
그날로 서점에 가서 주식 책 몇 권을 사서 읽었다. 지금까지 프로그래머로 살아온 나와는 전혀 다른 분야였지만 어렵게 느껴지진 않았다. 모호하지도 않았으며, 직관적이고 수치적인 내용과 그래프들은 나의 적성과도 일치하는 것 같았다. 곧 주식 계좌를 개설하고 시험 삼아 매매를 해 보았다. 그때 느꼈던 기분은 마치 어릴 적 처음 오락실에 갔을 때의 느낌이었다고나 할까. 처음 접하는 것에 대한 짜릿한 두려움도 있었고 직접 해보고 싶다는 강렬한 욕구도 있었다.
처음엔 약간의 수익도 발생했지만 일시적이었다. 수많은 주식 관련 책을 읽으면서 다시 공부하였지만 역시 기대에 못 미쳤다. 경험 부족으로 놓치는 부분도 있었고, 판단 미스로 인한 실수도 있었다. 그에 반해 친구는 정말로 주식 전문가처럼 보였다. 자신의 방에 설치된 여러 대의 컴퓨터와 모니터에서 각종 주식 차트를 모니터링 하고 있었고, 매수 타이밍 시 손놀림도 매우 빨랐고 거래는 전광석화와 같이 이루어졌다. 그 빠른 손놀림을 보면서 정말 부러웠다. 나중에 들은 이야기지만, 그와 같은 수준에 도달하기까지 수많은 노력과 시행착오가 있었으며 손실도 있었다고 했다.
수익도 조금, 손실도 조금인 고만 고만한 무의미한 날들이 흘러가던 어느 날, 갑자기 이러한 생각이 들었다. 주식을 꼭 손으로만 해야 할까? 다른 더 좋은 방법은 없을까? 불과 얼마 전까진 회사에서 나름 인정받는 프로그래머였는데…. 자동으로 매매하는 프로그램을 개발하면 어떨까? 여기까지 생각이 이르자 갑자기 온 몸에 소름이 돋았다. 그날부터 바로 프로그램 개발에 착수했다.
주식 자동매매 프로그램을 개발하다
주식 자동매매는 크게 두 가지가 있다. 첫 번째는 기술적 분석 및 차트 분석에 의한 자동매매 방법이 있고, 두 번째는 호재성 뉴스나 공시에 의한 자동매매 방법이 있다. 일단 단기간에 개발이 가능한 뉴스나 공시에 의한 자동매매 프로그램을 개발하기로 결심하였다.
뉴스나 공시의 내용에 따라서 해당 회사의 주가가 급등하거나 반대로 급락하게 되는데, 호재성일 경우 주가는 급등한다. 이때 가장 먼저 자동으로 매수 주문을 내어 주식을 매수한 후 수초 혹은 수분 뒤에 주식을 매도하는 방식으로 수익을 내는 방법이다.
앞서 소개한 스켈핑이라는 수분 또는 수초 단위의 초단타 매매이다. 뉴스나 공시에 의한 자동매매는 1초 이내에 뉴스에 대한 분석을 끝내고 자동매수를 하기 때문에 극초단타 매매라 부른다. 내가 개발한 주식 자동매매 프로그램은 바로 극초단타 매매 프로그램이었다.

[그림 1] 극초단타 매매 프로그램의 환경
[그림 1]은 뉴스-공시에 기반해 주식을 자동으로 매매하는 프로그램의 기본 기능을 도식화한 것이다. 크게 정보수집, 정보분석, 자동매매 부분으로 나눌 수 있다.

[그림 2] 극초단타 매매 프로그램의 기본 기능
[그림 2]는 뉴스-공시에 의한 주식 자동매매 프로그램의 기본적인 기능을 설명한 것이다. 프로그램은 크게 3개의 부분으로 나누어서 개발하였다.
1. 공시나 뉴스를 수집하는 프로그램 (수집 프로그램)
2. 수집된 뉴스를 분석하는 프로그램 (분석 프로그램)
3. 분석된 내용에 따라 주식을 매수하는 프로그램 (매매 프로그램)
수집 프로그램 → 분석 프로그램 → 매매 프로그램 순으로 개발하였는데 각각의 프로그램 개발은 어느 것 하나 쉬운 것이 없었다. 비록 프로그래머로서 수년 동안 일하였지만, MIS 관련 업무용 프로그램만 개발하였기 때문이었다. 처음부터 다시 시작한다는 기분으로 새로운 분야에 대한 공부를 시작하였다.
먼저 윈도우 운영체제의 내부 동작과 구조를 이해하고 제어하기 위해서는 윈도우 API(Application Programming Interface)에 대한 기술 습득이란 책을 사서 읽었다.

이 책은 1500 페이지가 넘을 만큼 매우 두꺼웠지만, 필요한 부분만 찾아서 공부하였으므로 시간은 별로 소요되지 않았다. 프로그램 개발 완료 후에 확인해 보니 실제로 필요한 부분은 수 페이지에 지나지 않았다.
원도우 프로그래밍의 가장 기초적이고 핵심이 되는 API에 대해 자세히 설명한 책이다. 윈도우 프로그래밍에 입문하는 사람들에겐 반드시 필요한 책이지 않나 싶다. 이 책으로 관련 정보를 습득한 후, 첫 번째 프로그램인 뉴스-공시 수집 프로그램 개발을 완료하였고, 세 번째 프로그램인 주식 매매 프로그램에 대한 어려운 문제를 해결하였다.
개발툴로는 그 당시 유행했던 델파이를 이용하려다가 라이선스 문제 등으로 인하여 더 쉽게 접근하고 활용이 가능한 비주얼베이직으로 개발하였다.
- 개발 도구: 비주얼베이직 6.0 - 사용 디비: MS SQL Server(엑셀 디비링크 기능 이용) - 정보 수집: 거래소 공시, 코스닥 공시, TOP3 증권사 HTS, 네이버 포탈 사이트, 각종 뉴스 사이트 등 - 구입 도서: 『Windows API 정복』, 각종 주식 관련 책 다수… - 주식 매매: 현대증권, 삼성증권, 대신증권 - 개발 기간: 1개월(초기 버전) ~ 3개월(최종 버전) - 기타 도구: Spy++ 프로그램 활용 - 기능 구현 - 공시수집 ………………… 거래소 공시 및 코스닥 공시 수집(타이머 기능) 뉴스수집 ..………….……. 증권사 HTS 프로그램 및 각종 웹 사이트(타이머 기능) 정보분석 …………….…… 수집된 공시-뉴스를 분석하는 지능형 모듈(분석 쿼리 활용) 자동매매 …………….…… 증권사 HTS 프로그램 이용(Windows API 및 Spy++ 이용) 이력관리 …………….…… 공시-뉴스 이력관리, 자동매매 이력관리

[그림 3] 주식관련 정보(테이블)를 관리하는 메인 화면
[그림 3]은 모든 주식관련 정보(테이블)를 관리하는 메인 화면이다.

[그림 4] 자동매매를 위한 매수화면
[그림 4]는 설정된 증권사로 실제 자동매매가 이루어지는 매수 화면이다.
1개월의 개발 기간이 지나서 프로그램의 초기 버전이 완성되었다. 하지만 미처 예상하지 못한 각종 문제점의 해결과 성능 이슈에 대한 보완 과정을 거치면서 최종본이 나오기까지 2개월이 더 걸렸다.
주식 자동매매 프로그램을 완성한 날은 마음이 들떠서 잠을 이루지 못했다. 다음날 실전에서 어떤 결과가 나올까 사뭇 궁금했다. 드디어 결전의 날이 왔다. 첫날 수익률은 30%를 기록했다. 그 후 한 달 간 일일 평균 수익률은 20%였다. 최고로 높은 수익률을 기록한 날은 60%였다. 지금까지 고생한 노력에 대한 보상은 너무나 과분했다.
다음 연재에서 계속...
이번 연재에서는 주식 자동매매 프로그램 개발 진행 과정에 대한 일반적인 내용을 설명하였는데, 다음 연재에서는 아래와 같은 기술적인 내용을 설명하겠다.
1. 공시나 뉴스를 수집하는 프로그램에서 사용하는 Windows API에 대한 기능 설명
2. 수집된 뉴스를 분석하는 프로그램에서 사용하는 분석 쿼리에 대한 설명
3. 분석된 내용에 따라 주식을 매수하는 프로그램에서 사용하는 Windows API에 대한 기능 설명
4. Spy++ 프로그램을 활용하여 핸들값을 구하는 방법 설명
5. MS SQL Server에서 엑셀 디비링크 기능을 이용하는 방법 설명
6. 정보 수집에 필요한 타이머 설정 및 자동매수 여부에 따른 음악파일 구동에 대한 내용
7. ERD의 개략적 설명 및 생성된 각종 테이블 및 프로시저에 대한 설명
8. 기타 각종 개발 노하우에 대한 설명(빠른 증권사 선택, 호재성 뉴스 선별 방법, 예외처리)
용기를 갖자
오라클 DB뿐 아니라 대부분의 DB 구성 알고리즘은 어느 날 ‘하늘에서 뚝 떨어져 새로 만들어진 것’이 아니라 실생활에서 이용되는 혹은 이미 상식 수준에서 인지되는 그런 보편적인 원리를 바탕으로 만들어졌으므로 쉽게 접근하고 이해할 수 있다. 서두에서 말했듯이 ‘레몬시장이론’을 상기하며 DB를 지레짐작으로 어려워하지 말고 용기를 내고 하나씩 터득해 나가기를 바란다.
이 글은 DB 전문가 수준의 이해를 요구하지는 않는다. 단지 DB에 대해서 더 친숙하고 더 쉽게 이해하고 접근하길 바랄 뿐이다. 이 글을 읽으면서 궁금하거나 의문 나는 점이 있으면, 댓글을 달아주실 것을 적극 바란다. 아무리 어렵고 힘든 일이더라고 ‘관계’와 ‘소통’으로 풀어나갈 수 있음을 다시 한 번 믿으며...
[지난 문제의 정답과 풀이]
원리를 이해하고 논리로 풀어가는, 쉬어가는 DB 문제
지난 연재에 출제한 ‘원리를 이해하고 논리로 풀어가는, 쉬어가는 DB 문제’에 대한 정답과 해설은 아래와 같다. 문제를 풀면서 DB 원리를 하나씩 배우고 이해할 수 있다.


[이번 호 문제]
원리를 이해하고 논리로 풀어가는, 쉬어가는 DB 문제
각 연재의 말미에 간단하면서도 재미있고 생각해 보는 문제를 출제하려 한다. 모든 문제는 DB의 원리를 이해할 수 있는 문제로 출제할 예정이다. 문제를 풀면서 DB 원리를 하나씩 배우고 이해할 수 있다. 정답과 그에 대한 설명은 다음 연재에서 한다. 
[출처] http://www.dbguide.net/knowledge.db?cmd=view&boardUid=187351&boardConfigUid=19&boardStep=&categoryUid=196
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86292 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 78750 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95493 |
| 1 | 빅데이터분석기사 필기 1과목 요약 - 빅데이터 분석 기획 ① | 졸리운_곰 | 2021.01.07 | 2316 |

