반응형

목표: C# 학습

 

OpenAPI를 사용해서 주식 프로그래밍을 연습중인데, 드디어 첫 데이터를 수신했다.
(MDI도 제대로 쓸줄 몰라서 해맸다...😅)

하루종일한게 이정도;;;

API가 C++ ActiveX 컨트롤로 만들어져서 Form에 컨트롤 개체를 삽입해야 참조에 등록 된다.
(그 외 방법은 복잡해서 비추)

(별도의 사용자 클래스 DLL을 만들어서 Ax 컨트롤을 넣고 클래스를 참조해서 사용해도 된다.)

메시지가 두 줄씩 나오는 것은 하나의 OpenAPI 컨트롤에 부모, 자식 메서드를 다 등록해서, 수신 이벤트가 다 처리되는지 확인하려고 그런 것. 잘 되네~

자식폼도 이벤트 처리를 하고, 부모폼에서도 이벤트 처리를 한다.

실시간 데이터 수신

장중일 때는 실시간 데이터 수신이 잘 된다.

 

OpenAPI 동작 방식

서버에서 이벤트(값이 변하는 현상)가 발생하면 API를 통해 전달 되고, 이벤트 핸들러에 등록된 메서드가 실행 된다.

인기 종목은 초당 수십회 메서드가 실행되고, 장종료나 인기 없으면 수신이 안 된다.(주기적 실행이 아님)

 

문제는 SetInputValue, GetCommData 등의 명령에 필요한 문자열 상수 인자값이 너무 많다는 것.

GetCommRealData 명령은 숫자형 인자값을 사용하기 때문에 에러가 매우 적다.

 

그래서 코딩 오류를 없애고, 개발하기 쉽게 IntelliSense가 동작하도록 새 라이브러리를 만드는 중이다.

"OPT10001", "주식기본정보요청", "종목코드"를 직접 타이핑할 필요없이 키워드만 입력하면 자동 완성 된다.
(메뉴얼을 볼 필요도 없고, 에러도 발생하지 않는다)

 

최근 작업

종목을 등록하면 실시간 수신

 

Simulz API for Kiwoom OpenAPI

요청 예제

// 분봉차트 데이터 요청
_ = new Query.AutoRequest(Enums.RQNames.OPT10080_주식분봉차트조회요청).SetInputData(
new string[] { textEdit1.Text, "1", "0" })
.Request();

 

수신 예제

// 전체 수신 처리
Query.AutoResponse response = new Query.AutoResponse(e);
// 데이터 종류별 수신 처리
Query.AutoResponse response = new Query.AutoResponse(e, RQNames.OPT10080_주식분봉차트조회요청);
// 요청 명령별 수신 처리
Query.AutoResponse response = new Query.AutoResponse(e, "1234");

// 데이터 반환 형식
List<Dictionary<string,string>> Query.OutputData { get; private set; }
// ex
_ = Query.OutputData[index]["항목"]

 

 

다음 목표

  • 키움 OpenAPI용 개발 클래스
  • 키움에서 구현되지 않은 기능들 (예: KB HTS에 있는 기능)
  • 통계, 분석, 알람
반응형

관련글