주식투자 프로그래밍(시스템 트레이딩) 1.6 #. 종목 리스트 다운로드

By | 2018-01-14

#. 종목 리스트 다운로드

 

필자는 시스템트레이딩 작업을 수행하기 위해서 필요한 각종 요소를 쉬운 것부터 차례대로 설명하면서 최종적으로는 자동 매매에 다양한 모듈 개발 과정을 소개할 것이다.

무엇보다도 먼저 시스템트레이딩을 하려면 투자 종목을 선정한 후에 해당 종목의 시세를 알아야 하기 때문에 주식 시장에 상장된 주식 종목 리스트를 다운로드한 후에 관심 종목의 시세를 받아야 한다. 따라서 연재 첫 번째 순서에서는 [종목 리스트]를 다운로드해서 필요한 정보를 필터링하는 프로그램을 만들고 이어서 전체 종목의 현재 시세(가격) 정보를 구하는 예제 프로그램을 만들 것이다. (참고로 필자가 여기서 구현하는 기능들은 boolhts라는 이름으로 통합되어 제공할 것이며 이어서 구현 과정에서 소스 코드를 설명할 때는 간략하게 boolhts로 표현할 것이다.)

그림 6 종목 리스트 다운로드

[그림 6 종목 리스트 다운로드]는 현재 증권 시장에서 거래되고 있는 종목 코드 목록을 다운로드해서 확인할 수 있도록 구현한 것이다. 우리가 증권 투자를 위해서 이용하는 HTS에서 종목을 지정할 때는 종목 이름이나 종목 코드를 입력하곤 하는데 보통 숫자를 6자리에 맞춰서 그냥 입력하면 해당 종목이 선택된다. 하지만 실제 주식 투자 프로그래밍을 개발할 때는 다르다. 그림에서 왼쪽 영역 코드 필드에서처럼 숫자 앞에 모두 ‘A’자가 접두사처럼 붙여주어야 정확한 종목 코드값이 된다.

처음으로 주식 투자 프로그램을 개발할 때 대부분의 개발자가 종목 코드에서 사용하는 접두 문자인 ‘A’를 붙이지 않아서 정확한 결과를 얻을 수 없다는 질문을 하는 경우가 의외로 많다.

또한 특히 주식 투자 경험이 있는 개발자들이 혼동하기 쉬운 것은 현재 상장되어 거래되는 종목 숫자와 사이보스플러스가 제공하는 종목 숫자가 다르게 나타나는데 이것은 주식 시장에 상장되지 않았지만 투자 종목처럼 등록된 제 3시장 종목이 포함되어 있기 때문이다. 실제 모든 증권사 HTS는 주식 시장에 상장되지 않은 제3시장 종목도 함께 보여주지만 일반적인 주식 투자자들은 이용할 일이 없기 때문에 대부분은 모르고 넘어간다. 하지만 주식 시장에 상장된 종목만으로 시스템트레이딩 프로그램을 개발하는 경우라면 제3시장 종목은 필터링을 통해서 제거하는 것이 좋다. 왜냐하면 시스템트레이딩 과정에서 수시로 종목 검색을 수행하는데 불필요한 종목을 포함하고 있으면 그만큼 처리 속도에 영향을 주기 때문에 사용할 필요가 없는 정보들은 제거해두는 좋다.

이 밖에도 독자와 함께 개발하는 boolhts의 [종목 리스트 다운로드] 프로그램에서는 코스피200, 우선주, 종목 정렬, 파일처리 등과 관련하여 몇 가지 필터링 기능을 부가시켰다. 코스피200은 코스피200 지수에 포함된 종목만을 출력하는 것으로 투자하는 과정에서 200종목에 대한 사용 빈도가 높아서 추가시켰으며 우선주 필터도 우선주만을 추출하거나 제거하기 위해서 부착했다.

파일로 저장하고 읽는 기능은 주식 투자와는 관련이 없지만 주식투자 프로그램인 시스템트레이딩 프로그램을 개발하는 도중에는 필요할 때가 종종 발생한다. 주식 투자를 하다 보면 가끔씩 해당 증권사의 사정으로 정상적으로 거래를 할 수 없는 사태가 의외로 자주 발생하고 주기적으로 업데이트를 하는 과정에서도 접속 장애 현상이 종종 일어난다. 특히 필자가 시스템트레이딩을 위해서 사용하는 대신증권 사이보스플러스마저도 주기적으로 시스템을 업데이트하는 과정에서 접속 장애를 일으키는 경우가 발생하는데 이럴 경우에는 서버와 접속하는 작업을 할 수 없으므로 일시적으로 (많게는 24시간 이상) 시스템트레이딩 프로그램을 개발할 수가 없다. 그래서 필자는 주기적으로 대신증권 사이보스플러스에서 수신되는 데이터를 로컬 컴퓨터에 저장해두는데 마소 독자에게 선보이는 boolhts에서는 대부분의 데이터 처리 과정에서 파일로 저장하는 기능이 추가되어 있다.

한편 시스템트레이딩 과정에서 빠른 검색을 위해서 종목 정렬 기능을 추가시켰는데 이진 탐색 알고리즘을 적용하였다. 알고리즘 효율 관점에서 주식 투자에서 사용하는 종목이 대략 2000 개 정도이므로 이진 탐색으로 결정하였다.

boolhts에는 소스 코드를 관리를 위해서 3가지 그룹을 나누어 관리한다. 대신증권 사이보스플러스의 API 처리만을 담당하는 영역, 사용자 인터페이스를 제공하는 MFC 코드 영역, 순수하게 주식투자 프로그래밍에 범용적으로 사용할 수 있는 순수 코드 영역으로 구분해두었다. 따라서 현재 마이크로소프트 윈도 환경에서 다른 환경으로 바뀔 경우 MFC 영역만 변경해주면 되고, 대신증권에서 제공하는 사이보스플러스 말고도 더 좋은 주식 투자 개발 환경을 제공하는 증권사가 있다면 사이보스플러스 영역만 바꾸어주면 쉽게 확장할 수 있는 구조로 설계되었다. 또한 순수 코드 영역은 MFC를 이용하지 않거나 Linux와 같은 다른 운영체제에서 네트위킹을 확장하면 비윈도 환경에서 주식 투자 프로그램을 사용할 수 있다.

[소스 코드 1 종목 리스트 다운로드]

// 생성

 pCodeMgr.CreateInstance(__uuidof(CpCodeMgr));

 pStockCode.CreateInstance(__uuidof(CpStockCode));

 

 // 종목 개수 구하기

 itemnum = pStockCode->GetCount();

for(cnt = 0; cnt < itemnum; cnt++) { // 종목 개수만큼 루프를 돈다.

 // 관련 데이터 구하기

   strCode = (LPCTSTR)(_bstr_t)pStockCode->GetData(0,cnt);  // 종목이름

   strName = (LPCTSTR)(_bstr_t)pStockCode->GetData(1,cnt);  // 종목코드

   strFullCode = (LPCTSTR)(_bstr_t)pStockCode->GetData(2,cnt);// 풀코드

   // [소속구분: 장내, 코스닥, 3시장]

   strImsi = (LPCTSTR)(_bstr_t)pCodeMgr->GetStockMarketKind((_bstr_t)strCode);

   // [K200구분]

   strImsi = (LPCTSTR)(_bstr_t)pCodeMgr->GetStockKospi200Kind((_bstr_t)strCode);

   // boolhts 정렬 함수에 추가시켜둔다.

   if(p_codegate_serv->append(……) == ffalse) {

     break;

   }

 }

 // 해제

 pStockCode.Release();

 pCodeMgr.Release();

[소스코드 1 종목 리스트 다운로드]는 사이보스플러스를 기반으로 종목 리스트를 다운로드하는 부분이다. 사이보스플러스는 Com Object 방식으로 제공되기 때문에 시작 부분에서는 반드시CreateInstance() 함수를 호출했다가 끝낼 때는 Release()함수로 해제시켜야 하고, 종목 리스트 다운로드를 담당하는 함수 설명은 [그림 8 사이보스플러스 도움말]에서 자세하게 나와 있다. 다만 도움말에서는 설명이 딱딱하고 예제 코드가 빠져 있고 처음 사용자는 답답함이 느껴질 수도 있으니까 반드시 사이보스플러스 홈페이지에서 제공하는 예제 소스 코드를 받으면 많은 도움이 될 것이다.

그림 6 사이보스플러스 도움말 – 종목 리스트 다운로드 부분

 


주식투자 프로그래밍(시스템 트레이딩)

이 글은 필자가 2005 ~ 2007년 개발했던 내용을 2009.10 ~ 2010.1 (월간) [마이크로소프트웨어]에 투고했던 내용을 정리해서 올린 것입니다.

  • 당시 가격제한폭(상한가/하한가)는 15% 적용(새로 고쳐야 함)

  • 소스코드 모두 제공

  • 실제 매매 가능

차례


1. 주식투자 프로그래밍(시스템 트레이딩)

1.1주식투자 프로그래밍(시스템 트레이딩) 

1.2 #. HTS와 시스템트레이딩

1.3 #. HTS 종속 시스템트레이딩

1.4 #. 범용 프로그램 언어 시스템트레이딩

1.5 #. 대신증권 [CYBOS PLUS]

1.6 #. 종목 리스트 다운로드

1.7 #. 현재 가격 시세 구하기


2. 주식투자 프로그래밍(시스템 트레이딩)

2.1 주식투자 프로그래밍(시스템 트레이딩)

2.2 #. 주식투자기법

2.3 #. 급등주와 테마주

2.4 #. 눌림목 투자 기법

2.5 #. 기술을 넘어서 심리분석

2.6 #. 캔들 프로그래밍

2.7 #. 세력주 검색 프로그래밍

2.8 다음에는 …


3. 주식투자 프로그래밍(시스템 트레이딩)

3.1 #. 초소형 미니 HTS와 모의투자

3.2 #. 모의투자 시스템

3.3 #. Boolhts 구조와 설계

3.4 #. 사이보스플러스 이벤트 처리기

3.5 #. 종목 선택창 만들기

3.6 #. 호가창 만들기

3.7 #. 체결창 만들기

3.8 #. 계정 로그인

3.9 #. 예수금 조회

3.10 #. 주문과 조회 처리

3.11 #. 매수와 매도 주문

3.12 #. 체결/미체결 잔고조회

3.13 #. 정정과 취소 주문

3.14 #. 주문 이벤트 핸들러

3.15 #. 통합 주문처리기


4. 주식투자 프로그래밍(시스템 트레이딩)

4.1 #. 금융공학과 상한가 따라잡기

4.2 #. 수학적 금융공학

4.3 #. 전산 금융공학 – 알람펀드

4.4 #. 전산 금융공학 – 스피드 트레이딩

4.5 #. 차익 시스템트레이딩

4.6 #. 확률 시스템트레이딩

4.7 #. 개별 종목 확률 시스템트레이딩

4.8 #. 상한가 따라잡기

4.9 #. 상한가 전화기

4.10 #. 특수 상한가 전화기

4.11 #. 멀티 상한가 전화기

4.12 다음에는 …


5. 주식투자 프로그래밍(시스템 트레이딩)

5.1 #. 주식 투자 트위터

5.2 #. 트위티언(Twittian) or 원시인

5.3 #. Open API 혁명, 트위터 (Twitter)

5.4 #. 한글트위터 twtkr.com

5.5 #. 주식 뉴스 발송 트위터

5.6 #. 주가 정보 발송 트위터

5.7 #. 주가 차트 등록 트위터

5.8 #. 트위터 이미지를 본문에 포함시기키

5.9 #. 대한민국 증권사에 바란다.

5.10 #. 모바일 혁명의 배후, KT에 바란다.

5.11 #. 연재를 마감하면서……


boolhts 소스코드(source code) 1 부 다운로드

boolhts 소스코드(source code) 2 부 다운로드

boolhts 소스코드(source code) 3 부 다운로드

boolhts 소스코드(source code) 4 부 다운로드

[boolhts 소스코드(source code) 5 부] 따로 없음

boolhts 통합 소스코드(source code) 다운로드(준비 중)


 

 

 

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

Time limit is exhausted. Please reload CAPTCHA.