#. 상한가 전화기
상한가 따라잡기 기법으로 상한가 종목을 매수하려면 상한가에 진입하는 순간에 신호를 받아서 매수할 것인가를 결정해야 하는데 일반적으로 증권사 HTS에서도 장중에 실시간으로 상한가에 진입하는 종목을 알려주는 기능을 제공한다. 그런데 상한가에 진입하는 종목의 호가와 체결 상태를 관찰해보면 100m 달리기하듯이 한번에 완벽하게 상한가에 진입하는 것이 아니라 수시로 상한가에 넘나드는데 증권사에서 제공하는 상한가 신호 기능을 사용하면 너무 많은 상한가 신호를 보내기 때문에 되레 상한가 매수에 방해가 되기도 한다. 또한 증권사 HTS는 상한가 따라잡기에 적합한 거래량과 매수 흐름을 측정하지 않고 무조건 상한가 체결된 종목이 있을 때마다 반복적으로 신호를 보내주기 때문에 거래량과 차트를 확인하면서 2차로 종목 선별 과정이 필요한데 불필요한 상한가 신호에 붙잡혀서 엉뚱한 종목에서 시간을 낭비하다가 정작 중요한 상한가 종목을 놓치는 경우도 종종 있다. 이와 같이 증권사가 제공하는 상한가 신호기의 부족한 기능을 개선해서 좀더 편안하고 효과적으로 상한가 신호를 받을 수 있도록 필자는 상한가 전화기를 개발했다. 필자가 소개하는 상한가 전화기는 상대적으로 상한가 따랍잡기에 적합한 종목을 따로 선별하는 기능을 강화시킨 것으로 급등할 상한가 종목을 예측하는 것은 아니므로 너무 기대를 걸지 말았으면 한다. 단지 상한가 전화기라는 데이트레이딩 신호기를 어떻게 구현하고 응용하는지 이해하는데 도움이 되었으면 한다.
클래스 계층 |
기능 |
Findgate |
Find 기능으로 받은 종목 관리 |
WndFind |
사이보스플러스와 통신 관리 |
SangTbl |
상한가 출력용 테이블 |
SangFrm MultiSangFrm |
상한가 출력 테이블 UI 확장 여러 상한가를 동시에 사용 |
SangDlg |
사용자 대화상자 (껍데기) |
표 5 상한가 전화기 소스코드 계층 구조
대신증권 사이보스플러스를 포함하여 일반적인 증권사 HTS는 여러 방식으로 종목 검색을 지원하는데 그 중에서 가장 단순하면서 동시에 가장 많은 종목을 검색할 수 있는 것은 Find 기능이다. 증권사에서 제공하는 Find 기능은 그날의 상승 / 하락 종목을 기준으로 시장의 흐름을 쉽게 파악할 수 있는데 Find 기능은 실시간으로 상태를 전달해주는 것이 아니라 사용자가 필요해서 요청할 때마다 전달해준다. 반면 증권사 HTS에서 상한가 신호기는 Find 기능과는 다르게 실시간 체결 상태를 기준으로 상한가에 진입하는 순간마다 개별 종목별로 상한가 상태를 알려주기도 하지만 실시간으로 모든 종목의 상한가 체결 상태를 알려주는 신호기는 되레 잦은 신호 발생으로 인하여 노이즈가 포함되어 있으므로 상한가 따라잡기에 방해가 되기도 한다. 따라서 필자는 윈도의 타이머 기능을 이용해서 주기적으로 사이보스플러스의 Find 기능을 호출하여 정지 상태에서 상한가를 검색하는데 Find 함수의 사용법은 도움말에 나와 있으므로 생략하고 간단하게 소스코드로 대신한다. 또한 필자는 새로운 상한가 발견될 때마다 전화벨 소리를 울리게끔 만들어서 상한가 전화기라고 이름을 붙였는데 배포용 소스 코드에는 전화벨 소리 파일을 포함시키지 않았으므로 실행파일 폴더에서 Sound 라는 폴더를 찾아서 소리 파일을 넣어야만 소리가 난다.
<소스코드 상한가 검색을 위한 Find 호출>
p7043.CreateInstance(__uuidof(Cp7043));
p7043->SetInputValue(1, p_Cp7043Opt_w->Select); // 선택 구분
p7043->SetInputValue(2, p_Cp7043Opt_w->Day); // 전일-당일 구분
p7043->SetInputValue(3, (short)p_Cp7043Opt_w->Sort); // 결과 정열
p7043->SetInputValue(4, p_Cp7043Opt_w->AdminSt);
p7043->SetInputValue(5, p_Cp7043Opt_w->Amount);
p7043->SetInputValue(6, p_Cp7043Opt_w->Period); // 기간구분
do {
p7043->BlockRequest();
totalcount = (short)(_variant_t)p7043->GetHeaderValue(0);
datacount = (short)(_variant_t)p7043->GetHeaderValue(3);
for(int i = 0; i < datacount; i++) {
strCode = (LPCTSTR)(_bstr_t)p7043->GetDataValue(0, itempos);
strName = (LPCTSTR)(_bstr_t)p7043->GetDataValue(1, itempos);
curval = (long)p7043->GetDataValue(2, itempos); // 현재가
daebi= (long)p7043->GetDataValue(4, itempos);; // 대비
daebirate = (float)p7043->GetDataValue(5, itempos); // 등락율
amount = (long)p7043->GetDataValue(6, itempos); // 거래량
}
} while (p7043->Continue);
p7043.Release();
// 상한가 벨소리
cstrSoundFile = GetPathname() + “sound\\상한가.wav”;
::PlaySound(cstrSoundFile, NULL, ……);
주식투자 프로그래밍(시스템 트레이딩)
이 글은 필자가 2005 ~ 2007년 개발했던 내용을 2009.10 ~ 2010.1 (월간) [마이크로소프트웨어]에 투고했던 내용을 정리해서 올린 것입니다.
-
당시 가격제한폭(상한가/하한가)는 15% 적용(새로 고쳐야 함)
-
소스코드 모두 제공
-
실제 매매 가능