전문가칼럼

DBMS, DB 구축 절차, 빅데이터 기술 칼럼, 사례연구 및 세미나 자료를 소개합니다.

이제는 말할 수 있다: 주식 자동매매 프로그램(상)

전문가칼럼
DBMS별 분류
Etc
작성자
dataonair
작성일
2015-09-03 00:00
조회
17324




◎ 연재기사 ◎


물탱크 구조로 알아본 오라클의 블록 옵션 ‘PCTFREE와 PCTUSED’


이산가족 찾기 생방송을 통해 배우는 DB 원리


개발자에게 맞는 DB 공부방법 찾기: 물리적 분류와 논리적 분류 그리고 인덱스


데이터베이스 인덱스의 오해와 진실


쉬운 것이 올바른 것이다. ‘인덱스 끝장리뷰’ (상)


쉬운 것이 올바른 것이다. ‘인덱스 끝장리뷰’ (하)


누구도 알려주지 않았던 ‘오라클 인덱스 생성도’의 비밀


누구도 알려주지 않았던 ‘오라클 쿼리 작성의 비법’


퀴리 최적화 및 튜닝을 위한 오라클 공정쿼리 작성법


만능 쿼리와 한 방 쿼리


오라클 옵티마이저 ‘CBO와 RBO’ 이해하기


재미있는 DB 이야기 ‘60갑자와 쿼리’


그림으로 배우는 ‘오라클 조인의 방식’ 이야기


반드시 알아야 하는 오라클 힌트절 7가지


오라클 플랜을 보는 법


개발자들의 영원한 숙제 ‘NULL 이야기’


알면 유용한 오라클 기능 ‘GATHER_PLAN_STATISTICS’


알면 유용한 오라클 기능들


오라클 DICTIONARY를 활용한 DB툴 프로그램 ‘FreeSQL’


이제는 말할 수 있다: 주식 자동매매 프로그램(상)


이제는 말할 수 있다: 주식 자동매매 프로그램(하)


개발자들이 자주 접하는 오라클 에러 메세지


재미있는 DB 이야기 ‘사라진 날짜를 찾아라’


오라클 랜덤 함수와 사용자 정의 함수


그림으로 배우는 ‘공정쿼리와 인덱스 생성도’


이병국의 개발자를 위한 DB 이야기: 디폴트 세팅의 함정과 오라클 파라미터


재미있는 DB 이야기 ‘놀라운 마방진의 세계’


오라클 운반 최소 단위 BLOCK


이병국의 개발자를 위한 DB 이야기: 이세돌과 알파고의 세기의 대결


이병국의 개발자를 위한 DB 이야기(30회) : DB 엔지니어의 가볍게 읽는 세상 이야기


이병국의 개발자를 위한 DB 이야기: 튜닝(31회) : 개발자를 위한 DB 튜닝 실전(1편)


이병국의 개발자를 위한 DB 이야기: 튜닝(32회) : 개발자를 위한 튜닝 실전(2편)


이병국의 개발자를 위한 DB 이야기: 튜닝(33회) : 개발자를 위한 튜닝 실전(3편)


이병국의 개발자를 위한 DB 이야기: 튜닝(34회) : 개발자를 위한 DB 튜닝 실전(4편)


이병국의 개발자를 위한 DB 이야기: 튜닝(35회) : 개발자를 위한 튜닝 실전(5편)


이병국의 개발자를 위한 DB 이야기: 페이징 처리에 대한 이해 (36회)


보기 좋은 떡이 먹기도 좋다 - 좋은 쿼리 좋은 성능


테이블의 수직분할과 수평분할에 대한 이해


DB 성능 제고를 위한 채번의 이해와 방식별 장단점 비교


이병국의 개발자를 위한 DB 이야기: 마지막회 : ‘개발자를 위한 DB 이야기’ 연재를 마치며



이병국의 개발자를 위한 DB 이야기: 프로그램 (20회)

이제는 말할 수 있다: 주식 자동매매 프로그램(상)



성공과 실패의 경험을 나누자, 용기와 희망을 나누자

개발업무를 시작으로 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초 이내에 뉴스에 대한 분석을 끝내고 자동매수를 하기 때문에 극초단타 매매라 부른다. 내가 개발한 주식 자동매매 프로그램은 바로 극초단타 매매 프로그램이었다.

column_img_2047.jpg

[그림 1] 극초단타 매매 프로그램의 환경

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

column_img_2048.jpg

[그림 2] 극초단타 매매 프로그램의 기본 기능

[그림 2]는 뉴스-공시에 의한 주식 자동매매 프로그램의 기본적인 기능을 설명한 것이다. 프로그램은 크게 3개의 부분으로 나누어서 개발하였다.

1. 공시나 뉴스를 수집하는 프로그램 (수집 프로그램)
2. 수집된 뉴스를 분석하는 프로그램 (분석 프로그램)
3. 분석된 내용에 따라 주식을 매수하는 프로그램 (매매 프로그램)

수집 프로그램 → 분석 프로그램 → 매매 프로그램 순으로 개발하였는데 각각의 프로그램 개발은 어느 것 하나 쉬운 것이 없었다. 비록 프로그래머로서 수년 동안 일하였지만, MIS 관련 업무용 프로그램만 개발하였기 때문이었다. 처음부터 다시 시작한다는 기분으로 새로운 분야에 대한 공부를 시작하였다.



먼저 윈도우 운영체제의 내부 동작과 구조를 이해하고 제어하기 위해서는 윈도우 API(Application Programming Interface)에 대한 기술 습득이란 책을 사서 읽었다.

column_img_2049.jpg

이 책은 1500 페이지가 넘을 만큼 매우 두꺼웠지만, 필요한 부분만 찾아서 공부하였으므로 시간은 별로 소요되지 않았다. 프로그램 개발 완료 후에 확인해 보니 실제로 필요한 부분은 수 페이지에 지나지 않았다.

원도우 프로그래밍의 가장 기초적이고 핵심이 되는 API에 대해 자세히 설명한 책이다. 윈도우 프로그래밍에 입문하는 사람들에겐 반드시 필요한 책이지 않나 싶다. 이 책으로 관련 정보를 습득한 후, 첫 번째 프로그램인 뉴스-공시 수집 프로그램 개발을 완료하였고, 세 번째 프로그램인 주식 매매 프로그램에 대한 어려운 문제를 해결하였다.

개발툴로는 그 당시 유행했던 델파이를 이용하려다가 라이선스 문제 등으로 인하여 더 쉽게 접근하고 활용이 가능한 비주얼베이직으로 개발하였다.



- 개발 도구: 비주얼베이직 6.0
- 사용 디비: MS SQL Server(엑셀 디비링크 기능 이용)
- 정보 수집: 거래소 공시, 코스닥 공시, TOP3 증권사 HTS, 네이버 포탈 사이트, 각종 뉴스 사이트 등
- 구입 도서: 『Windows API 정복』, 각종 주식 관련 책 다수…
- 주식 매매: 현대증권, 삼성증권, 대신증권
- 개발 기간: 1개월(초기 버전) ~ 3개월(최종 버전)
- 기타 도구: Spy++ 프로그램 활용
- 기능 구현
- 공시수집 ………………… 거래소 공시 및 코스닥 공시 수집(타이머 기능)
뉴스수집 ..………….……. 증권사 HTS 프로그램 및 각종 웹 사이트(타이머 기능)
정보분석 …………….…… 수집된 공시-뉴스를 분석하는 지능형 모듈(분석 쿼리 활용)
자동매매 …………….…… 증권사 HTS 프로그램 이용(Windows API 및 Spy++ 이용)
이력관리 …………….…… 공시-뉴스 이력관리, 자동매매 이력관리



column_img_2050.jpg

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

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

column_img_2051.jpg

[그림 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 원리를 하나씩 배우고 이해할 수 있다.



column_img_2052.jpg
column_img_2053.jpg

[이번 호 문제]
원리를 이해하고 논리로 풀어가는, 쉬어가는 DB 문제



각 연재의 말미에 간단하면서도 재미있고 생각해 보는 문제를 출제하려 한다. 모든 문제는 DB의 원리를 이해할 수 있는 문제로 출제할 예정이다. 문제를 풀면서 DB 원리를 하나씩 배우고 이해할 수 있다. 정답과 그에 대한 설명은 다음 연재에서 한다. column_img_2054.jpg