반응형
✅ 왜 실시간 시세 수신이 중요한가요?
- 자동매매 시스템에서 실시간 체결가/호가 정보를 수신하지 못하면
전략 실행의 정확도와 타이밍이 무너집니다. - 키움 OpenAPI는 이벤트 기반 비동기 구조이므로
반드시 이벤트 핸들러 구현이 필요합니다.
🧩 STEP 1. 실시간 시세 등록 (SetRealReg)
🔹 실시간 등록 함수
C#
axKHOpenAPI1.SetRealReg("1000", "005930", "10;11;12;13;15", "0");
인자 | 설명 |
"1000" | 화면번호 (임의의 문자열) |
"005930" | 종목코드 (삼성전자) |
"10;11;12..." | 실시간 필드 (현재가, 전일대비, 등락률 등) |
"0" | 기존 등록 여부 (0: 추가 등록, 1: 기존 화면번호 대체) |
🔔 STEP 2. 실시간 데이터 수신 이벤트 구현
🔹 이벤트 핸들러 등록
C#
private void axKHOpenAPI1_OnReceiveRealData(object sender, _DKHOpenAPIEvents_OnReceiveRealDataEvent e)
{
if (e.sRealType == "주식체결")
{
string currentPrice = axKHOpenAPI1.GetCommRealData(e.sRealKey, 10).Trim();
string volume = axKHOpenAPI1.GetCommRealData(e.sRealKey, 15).Trim();
listBox1.Items.Add($"[실시간 체결] 현재가: {currentPrice} / 체결량: {volume}");
}
}
💬 주요 실시간 필드 코드 (일부)
코드 | 설명 |
10 | 현재가 |
11 | 전일대비 |
12 | 등락률 |
13 | 누적거래량 |
15 | 체결량 |
전체 필드는 키움 OpenAPI 실시간 필드표에서 확인 가능
🧠 STEP 3. 실시간 등록 해제 및 변경
- 다른 종목으로 실시간 추적 전환 시 SetRealRemove() 또는 SetRealReg() 사용
C#
axKHOpenAPI1.SetRealRemove("ALL", "ALL"); // 전체 해제
📦 실전 예제: 버튼 하나로 실시간 시작하기
C#
private void btnWatch_Click(object sender, EventArgs e)
{
string code = txtCode.Text.Trim(); // 종목코드 입력
axKHOpenAPI1.SetRealReg("1001", code, "10;11;12;13;15", "0");
listBox1.Items.Add($"▶ 실시간 등록: {code}");
}
🔁 고급 구조: 다중 종목 실시간 감시
- ;로 종목코드를 나열할 수 없음
→ 여러 번 SetRealReg() 호출해야 다중 종목 감시 가능
C#
string[] codes = { "005930", "000660", "035420" };
int screenNo = 1000;
foreach (var code in codes)
{
axKHOpenAPI1.SetRealReg(screenNo.ToString(), code, "10;11;12", "0");
screenNo++;
}
🧪 실시간 체결 출력 예시 (ListBox 출력)
[실시간 체결] 현재가: 78,400 / 체결량: 1,200
[실시간 체결] 현재가: 78,500 / 체결량: 800
📷 실시간 시세 흐름도
버튼 클릭 → SetRealReg → 서버로부터 실시간 데이터 → 이벤트 핸들러(OnReceiveRealData) → 화면 출력
반응형