이 강의에서는 C# 기반의 WinForms 또는 WPF를 사용하여 키움증권의 OpenAPI를 활용한 자동매매 프로그램을 만드는 방법을 단계별로 상세히 설명합니다.
1. 프로젝트 생성
먼저 Visual Studio에서 새로운 C# 프로젝트를 생성합니다. Windows Forms 앱(.NET Framework)를 선택합니다.
프로젝트 이름(KiwoomExample)과 솔루션 이름을 기입하고 프레임워크는 .NET Framework 4.7.2를 선택하고, 만들기를 클릭합니다.
2. COM 추가하기
도구 - 도구 상자 항목 선택을 클릭합니다.
COM 구성 요소 탭으로 넘어가서 이전에 설치한 키움API(KHOpenAPI Control)를 선택 후 확인을 누릅니다.
- 만약 존재하지 않는 경우 [찾아보기] 버튼을 클릭하여 C:\OpenAPI\khopenapi.ocx를 등록합니다.
3. Form(Control)과 이벤트 바인딩
도구 상자 탭에서 KHOpenAPI Control을 드래그 앤 드롭하여 Control에 추가합니다.
이벤트 바인딩
주요 이벤트는 다음과 같습니다.
- OnEventConnect
- 로그인 처리 이벤트
- 인자형식: AxKHOpenAPILib._DKHOpenAPIEvents_OnEventConnectEvent
- OnReceiveTrData
- TR 요청 데이터 수신 이벤트
- 인자형식: AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent
- OnReceiveRealData
- 실시간 데이터 수신 이벤트
- 인자형식: AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveRealDataEvent
- OnReceiveChejanData
- 주문처리 실시간 수신 이벤트
- 인자형식: AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveChejanDataEvent
- OnReceiveMsg
- 서버 메시지 수신 이벤트
- 인자형식: AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveMsgEvent
각각의 이벤트에 이벤트 핸들러를 연결해주고, 그에 적합한 인자들을 설정해줍니다.
예시코드
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 이벤트 바인딩
axKHOpenAPI1.OnEventConnect += AxKHOpenAPI1_OnEventConnect;
axKHOpenAPI1.OnReceiveTrData += AxKHOpenAPI1_OnReceiveTrData;
axKHOpenAPI1.OnReceiveRealData += AxKHOpenAPI1_OnReceiveRealData;
axKHOpenAPI1.OnReceiveChejanData += AxKHOpenAPI1_OnReceiveChejanData;
axKHOpenAPI1.OnReceiveMsg += AxKHOpenAPI1_OnReceiveMsg;
int loginResult = axKHOpenAPI1.CommConnect();
}
private void AxKHOpenAPI1_OnEventConnect(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnEventConnectEvent e)
{
// 로그인 처리 이벤트
}
private void AxKHOpenAPI1_OnReceiveTrData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e)
{
// TR 요청 데이터 수신 이벤트
}
private void AxKHOpenAPI1_OnReceiveRealData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveRealDataEvent e)
{
// 실시간 데이터 수신 이벤트
}
private void AxKHOpenAPI1_OnReceiveChejanData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveChejanDataEvent e)
{
// 주문처리 실시간 수신 이벤트
}
private void AxKHOpenAPI1_OnReceiveMsg(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveMsgEvent e)
{
// 계좌관련 조회요청에 대한 서버 메시지 수신 이벤트
}
}
4. 로그인 및 연결 테스트
키움 OpenAPI에 로그인하고 연결을 테스트하는 방법입니다.
로그인 요청
로그인 요청은 CommConnect() 메소드를 호출하여 진행합니다.
// 로그인 요청
int loginResult = axKHOpenAPI1.CommConnect();
연결 상태 확인
로그인 상태를 확인하려면 GetConnectState()를 사용합니다.
// 연결 상태 확인
if (axKHOpenAPI1.GetConnectState() == 1)
{
MessageBox.Show("연결 성공!");
}
else
{
MessageBox.Show("연결 실패!");
}
로그인 성공 이벤트 처리
로그인 결과는 OnEventConnect 이벤트를 통해 전달됩니다.
private void AxKHOpenAPI1_OnEventConnect(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnEventConnectEvent e)
{
if (e.nErrCode == 0)
{
MessageBox.Show("로그인 성공!");
}
else
{
MessageBox.Show("로그인 실패: " + e.nErrCode);
}
}
이 코드를 통해 로그인 성공 여부를 확인할 수 있습니다.
5. 예제 프로그램 코드
지금까지 설정한 내용을 테스트하여 키움증권 서버와 연결이 잘 되는지 확인해보세요. 연결이 정상적으로 이루어지면 자동매매 로직을 구현할 수 있는 환경이 준비된 것입니다.
아래는 지금까지 작성한 예시 소스코드 입니다.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 이벤트 바인딩
axKHOpenAPI1.OnEventConnect += AxKHOpenAPI1_OnEventConnect;
axKHOpenAPI1.OnReceiveTrData += AxKHOpenAPI1_OnReceiveTrData;
axKHOpenAPI1.OnReceiveRealData += AxKHOpenAPI1_OnReceiveRealData;
axKHOpenAPI1.OnReceiveChejanData += AxKHOpenAPI1_OnReceiveChejanData;
axKHOpenAPI1.OnReceiveMsg += AxKHOpenAPI1_OnReceiveMsg;
int loginResult = axKHOpenAPI1.CommConnect();
}
private void AxKHOpenAPI1_OnEventConnect(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnEventConnectEvent e)
{
// 로그인 처리 이벤트
if (e.nErrCode == 0)
{
MessageBox.Show("로그인 성공!");
}
else
{
MessageBox.Show("로그인 실패: " + e.nErrCode);
}
if (axKHOpenAPI1.GetConnectState() == 1)
{
MessageBox.Show("연결 성공!");
}
else
{
MessageBox.Show("연결 실패!");
}
}
private void AxKHOpenAPI1_OnReceiveTrData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e)
{
// TR 요청 데이터 수신 이벤트
}
private void AxKHOpenAPI1_OnReceiveRealData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveRealDataEvent e)
{
// 실시간 데이터 수신 이벤트
}
private void AxKHOpenAPI1_OnReceiveChejanData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveChejanDataEvent e)
{
// 주문처리 실시간 수신 이벤트
}
private void AxKHOpenAPI1_OnReceiveMsg(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveMsgEvent e)
{
// 계좌관련 조회요청에 대한 서버 메시지 수신 이벤트
}
}
읽어볼만한 글
'자동매매 강의' 카테고리의 다른 글
2강. 키움증권 OpenAPI 주식 자동매매 프로그램 개발을 위한 준비 사항 및 환경 설정 (0) | 2025.03.10 |
---|---|
1강. 오리엔테이션 및 전체 개요 (1) | 2025.03.10 |
강의 내용 정리 (0) | 2025.03.09 |
시스템 트레이딩에서 C#을 사용하는 이유: 속도와 안정성 (0) | 2025.03.09 |