주식투자 프로그래밍(시스템 트레이딩) 3.7 #. 체결창 만들기

By | 2018-01-14

#. 체결창 만들기

투자자들이 매매 주문을 넣었을 때 체결되면 그 결과를 체결창에 보여주는데 체결창은 데이트레이딩과 같은 초단기매매에서는 매우 중요한 데이터이다. 체결되는 데이터의 양은 세력의 크기를 의미하고 체결 속도는 세력의 흐름을 나타내는 것으로 해석하는데 특정 종목에서 체결 흐름이 빨라지고 체결되는 거래량이 평균 이상으로 증가한다면 세력적 움직임으로 볼 수 있기 때문이다. 특히 주식투자 프로그램인 시스템트레이딩은 사람이 처리하고 판단하기 어려운 것들을 컴퓨터를 이용해서 자동으로 체결 흐름을 파악할 수 있기 때문에 데이트레이딩 관점에서는 유용한 도구가 될 수 있다.
체결창은 체결된 데이터가 발생할 때마다 이벤트 형식으로 받아서 보여주는 창이므로 이벤트 관리자인 CpDibEvent 파일을 프로젝트에 포함시켜야 하고 이벤트 처리용 소스코드까지 삽입해야 하는데 사이보스플러스 이벤트와 관련된 부분은 앞에서 설명하였기 때문에 생략하겠다. boolhts에서 체결창을 구현할 때는 WndConPower라는 독립된 클래스를 추가하여 4단계 계층으로 구조화했는데 WndConPower 클래스는 사이보스플러스와 교신하는 역할만 하고 데이터 출력은 ConTbl 클래스로 분리했다. 이것은 나중에 시스템트레이딩에 의한 자동매매를 구현할 때 처리 속도가 떨어지는 방지하기 위해서 하기 위해서 처리 속도를 저하시키는 사용자 인터페이스를 사용하지 않고 순수하게 데이터만 교신하는 WndConPower 클래스로 분리해둔 것이다.
체결 데이터를 담당하는 WndConPower 클래스에서 처리과정은 다음과 같다. 종목을 선택하고 그 순간까지 체결된 데이터를 수신한 뒤에 이어서 체결값이 발생할 때마다 수시로 이벤트를 받아야 한다. 사이보스플러스는 종목 선택과 동시에 현재 순간 체결 데이터를 받는 StockBid() 함수와 실시간 변하는 이벤트 체결 데이터를 받는 StockCur() 함수로 구분한다. (boolhts는 당일 전체 체결 데이터를 수신하여 텍스트로 저장할 수 있도록 지원하는데 이러한 전체 체결 데이터는 당일 세력주의 흐름을 분석할 때 매우 유용하다.)

주요 계층

클래스

보충 설명

대신증권

연결부

WndConPower

사이보스플러스와 교신하여 데이터를 출력

CpDibEvent

이벤트교신기

CreateInstance 이벤트처리기 생성

Destroy 이벤트처리기 해제

StockCur

Subscribe 체결 변동 이벤트 신청

OnReceived 체결 이벤트 수신

Unsubscribe 체결 이벤트 수신 중단

StockBid

CreateInstance 체결 요청 생성

BlockRequest 현재 순간 체결 요청

Release 체결 요청 해제

MFC 윈도우

ConTbl

체결 데이터를 출력 (CybosPlus와 교신하지 않음)

ConFrm

사용자인터페이스 확장, WndConPower 체결데이터를 ConTbl에 출력

ConDlg

테스트용 다이얼로그 박스 (의미없는 부분)

트레이딩

……

Coninfo 수신한 체결 데이터 구조체

6 boolhts에서 체결창 계층 구조

<소스코드 체결 결과 이벤트 수신>
LONG ~~::OnReceived(WPARAM wParam, LPARAM lParam) {
JongmokCode = (LPCTSTR)(_bstr_t)pStockCur->GetHeaderValue(0);
JongmokName = (LPCTSTR)(_bstr_t)pStockCur->GetHeaderValue(1);
time = (long)pStockCur->GetHeaderValue(3); // 시간
time_second = (long)pStockCur->GetHeaderValue(18); // 시각(시:분:초)
sell_val = (long)pStockCur->GetHeaderValue(7); //-7. 매도호가
buy_val = (long)pStockCur->GetHeaderValue(8); //-8. 매수호가
cur_price = (long)pStockCur->GetHeaderValue(13); // 현재가
yesday_daebi = (long)pStockCur->GetHeaderValue(2); // 전일대비
amount = (long)pStockCur->GetHeaderValue(9); // 누적거래량
spot_amount = (long)pStockCur->GetHeaderValue(17); // 순간체결수량
constate = (bbyte)pStockCur->GetHeaderValue(14); // 체결상태(1-매수,2-매도
market_flag = (bbyte)pStockCur->GetHeaderValue(19);// 장구분 플래그

 

 


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

이 글은 필자가 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.