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

By | 2018-01-14

#. 호가창 만들기

투자자들이 주문을 넣었을 때 가격이 맞으면 체결되고 그렇지 않은 나머지 물량은 호가창에 보여주는데 호가창은 호가 변동 때마다 상태를 이벤트 형식으로 받아서 보여주는 창이다. 호가창을 구현하려면 이벤트를 받아야 하기 때문에 boolhts의 stocgate 클래스에서 중간 게이트 함수를 만들지 않고 사이보스플러스 함수를 직접 호출한다. 사이보스플러스에서는 이벤트를 처리하기 위해서 CpDibEvent 클래스를 제공하므로 응용프로그램에서는 반드시 이벤트 관리자인 CpDibEvent 파일을 프로젝트에 포함시켜야 하고 헤더파일과 소스파일에서 이벤트용 코드를 삽입시켜 줘야 하는데 사이보스플러스 이벤트와 관련된 부분은 앞에서 설명하였기 때문에 여기서는 생략하고 호가창 동작원리만 설명하겠다.
사이보스플러스와 교신하면서 호가 데이터를 담당하는 CallTbl 클래스에서 처리과정은 다음과 같다. 논리적으로 특정 종목의 호가창을 보여주려면 종목을 선택하고 지정한 종목의 현재 상태 호가 데이터를 수신한 뒤에 이어서 호가 변동이 생길 때마다 수시로 이벤트를 받아야 한다. 사이보스플러스는 호가 데이터를 처리하기 위해서 종목 선택과 동시에 현재 순간 호가 데이터를 받는 StockJpbid2() 함수와 실시간 변하는 이벤트 호가 데이터를 받는 StockJpbid() 함수로 구분해서 제공하기 때문에 Request와 Subscribe 관계를 혼동하지 말아야 한다.

주요 계층

클래스

대신증권

연결부

CallTbl

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

CpDibEvent

이벤트교신기

CreateInstance 이벤트처리기 생성

Destroy 이벤트처리기 해제

StockJpbid

실시간 변동

Subscribe 호가 변동 이벤트 신청

OnReceived 호가 이벤트 수신

Unsubscribe 호가 이벤트 수신 중단

StockJpbid2

순간 상태

CreateInstance 호가 생성

BlockRequest 현재 순간 호가 요청

Release 호가 요청 해제

MFC 윈도우

CallFrm

CallTbl에다가 사용자 인터페이스 확장

CallDlg

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

트레이딩

……

Callinfo 수신한 호가 데이터 구조체

5 boolhts에서 호가창 계층 구조

<소스코드 호가 변동 이벤트 수신>
LONG ~~::OnReceived(WPARAM wParam, LPARAM lParam) {
strJongMokCode = (LPCTSTR)(_bstr_t)p_JpBid->GetHeaderValue(0);
time = (long)p_JpBid->GetHeaderValue(1); // 시각(시:분)
amount = (long)p_JpBid->GetHeaderValue(2); // 거래량
for(int tblindex = 0; tblindex < 5; tblindex++) {
calltbl_d[tblindex].sell_price = (long)p_JpBid->GetHeaderValue(recindex++); // 매도호가
calltbl_d[tblindex].buy_price = (long)p_JpBid->GetHeaderValue(recindex++); // 매수호가
calltbl_d[tblindex].sell_amount = (long)p_JpBid->GetHeaderValue(recindex++); // 매도잔량
calltbl_d[tblindex].buy_amount = (long)p_JpBid->GetHeaderValue(recindex++); // 매수잔량
}
sell_sum = (long)p_JpBid->GetHeaderValue(recindex++); // 총매도잔량
buy_sum = (long)p_JpBid->GetHeaderValue(recindex++); // 총매수잔량
for(; tblindex < 10; tblindex++) { // 10호가테이블
calltbl_d[tblindex].sell_price = (long)p_JpBid->GetHeaderValue(recindex++); // 매도호가
calltbl_d[tblindex].buy_price = (long)p_JpBid->GetHeaderValue(recindex++); // 매수호가
calltbl_d[tblindex].sell_amount = (long)p_JpBid->GetHeaderValue(recindex++); // 매도잔량
calltbl_d[tblindex].buy_amount = (long)p_JpBid->GetHeaderValue(recindex++); // 매수잔량
}
}

그림 2 종목선택, 호가창, 체결창

 

 


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

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