본문 바로가기
키움자동매매

GetRepeatCnt 샘플

by Knowledge Store In Hyunsoft 2024. 10. 7.
using System;
using AxKHOpenAPILib;

namespace KiwoomOpenAPIExample
{
    class Program
    {
        static AxKHOpenAPI axKHOpenAPI;

        static void Main(string[] args)
        {
            // Kiwoom API 초기화
            axKHOpenAPI = new AxKHOpenAPI();
            axKHOpenAPI.OnReceiveTrData += AxKHOpenAPI_OnReceiveTrData;

            // 로그인
            axKHOpenAPI.CommConnect();

            // 로그인 대기
            while (axKHOpenAPI.GetConnectState() != 1)
            {
                System.Threading.Thread.Sleep(1000);
            }

            // 일봉 데이터 조회 시작
            RequestStockData("005930", "20231006", 0); // 삼성전자, 기준일자 2023년 10월 6일, 첫 요청
        }

        static void RequestStockData(string stockCode, string baseDate, int prevNext)
        {
            axKHOpenAPI.SetInputValue("종목코드", stockCode);
            axKHOpenAPI.SetInputValue("기준일자", baseDate);
            axKHOpenAPI.SetInputValue("수정주가구분", "1"); // 1: 수정주가
            axKHOpenAPI.CommRqData("opt10081_req", "opt10081", prevNext, "0101");
        }

        static void AxKHOpenAPI_OnReceiveTrData(object sender, _DKHOpenAPIEvents_OnReceiveTrDataEvent e)
        {
            if (e.sRQName == "opt10081_req")
            {
                int dataCount = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName);

                for (int i = 0; i < dataCount; i++)
                {
                    string date = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "일자").Trim();
                    string openPrice = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "시가").Trim();
                    string highPrice = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "고가").Trim();
                    string lowPrice = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "저가").Trim();
                    string closePrice = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "현재가").Trim();
                    string volume = axKHOpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "거래량").Trim();

                    Console.WriteLine($"날짜: {date}, 시가: {openPrice}, 고가: {highPrice}, 저가: {lowPrice}, 종가: {closePrice}, 거래량: {volume}");
                }

                // 연속 조회 처리
                string next = e.sPrevNext;
                if (next == "2")
                {
                    // nPrevNext 값을 2로 설정하여 연속 데이터 요청
                    RequestStockData("005930", "20231006", 2);
                }
            }
        }
    }
}
728x90

댓글