반응형

키움증권에서는 API 를 제공하여 사용자가 자동매수, 매도를 할 수 있는 프로그램을 직접 개발할 수 있도록 제공하고 있습니다. 

키움증권 API 를 이용하여 시작하는 방법은 여러 포스트에서 이미 다루고 있으므로 별도로 다루지는 않을 예정입니다.

많이 어렵지 않으므로 관련 포스트를 따라서 하시면 손쉽게 시작하실 수 있으며 이미 샘플 c# 코드도 키움증권에서 배포하고 있으므로 일일이 내용을 작성하지는 않을 것이고요. 제가 인터넷에서 쉽게 구하지 못한 코드들을 올려보려 합니다.

오늘은 키움증권 API 가 제공하는 전체 종목코드를 받아오는 코드를 소개해 드릴까 합니다.

 

키움증권 API 가 동작하는 방식

  • 필요한 커맨드를 인자와 함께 전달한다.
  • API 는 서버에서 해당 정보를 내려받는다. (이벤트가 발생하는 경우가 있고 직접 결과를 리턴하는 경우가 있다)
    • 결과를 리턴하는 경우 : 바로 처리
    • 이벤트를 발생시키는 경우 : 이벤트 핸들러를 이용하여 함수로 구현하여 처리

대충 이런식인데요. 전체 종목 코드를 받아오는 것은 결과를 바로 리턴해주는 방식 입니다.

 

키움증권에서 배포하는 open API 가이드를 보면 아래와 같은 커맨드가 있음을 알 수 있습니다.

키움 openAPI 개발 가이드에 있는 커맨드 리스트

바로 14번에 해당하는 GetCodeListByMarket 에 해당하는 커맨드죠.

해당 커맨드의 상세한 항목은 아래와 같이 나와 있습니다.

제어함수 명세서에 나와있는 전체 종목 코드 받기 설명

문자열로 결과가 리턴되는 것을 알 수 있고, sMarket 부분에 필요한 주식시장의 종류를 넣을 수 있게 되어 있네요.

전 "장내"에 해당하는 항목을 알아보려 합니다.

바로 한번 구현을 해볼까요?

private AxKHOpenAPILib.AxKHOpenAPI axKHOpenAPI; // 키움 샘플이라면 이건 적을 필요 없음.

private void getAllCodeList()
{
  string codelistResult = axKHOpenAPI.GetCodeListByMarket("0"); // 0: 장내
  //종목간 구분은 ";" 로 한다고 하였으므로 아래와 같이 각각의 종목을 쪼개 줍니다.
  string[] mylist = codelistResult.Split(';');
  foreach (string s in mylist)
  {
      Console.WriteLine("종목코드 : " + s);
  }
}

간단하죠?

이렇게하고 getAllCodeList 함수를 실행해 보면 아래와 같이 출력창에 종목 코드가 출력됩니다.

종목 코드가 받아진 모습

 

그런데 이렇게 하면 전체 코드는 얻었지만 해당 코드가 어떤 종목인지 알수가 없잖아요?

그래서 몇줄 추가해 보겠습니다. 해당 코드의 종목 명칭과 전일가격을 출력해보도록 하겠습니다.

private void getAllCodeList(ref List<string> rList)
{
  rList.Clear();

  string codelistResult = axKHOpenAPI.GetCodeListByMarket("0");
  string[] mylist = codelistResult.Split(';');
  MessageBox.Show("전체 종목 수는 " + mylist.Length.ToString() + "개 입니다");
  foreach (string s in mylist)
  {   
 	rList.Add(s); // rList 에 종목 코드를 넣어준다. (최종 결과 반환용)
    string stName = axKHOpenAPI.GetMasterCodeName(s);    // 종목 명칭 얻기
    string lastPrice = axKHOpenAPI.GetMasterLastPrice(s);  // 종목 전일가 얻기
    Console.WriteLine("종목코드 : " + s + ", 종목 명:" + stName + ", 전일가 :" + lastPrice);
  }
}

몇 줄 추가를 하였습니다. 먼저 rList 라는 리스트를 참조 인자로 받아서 나중에 사용하려고 합니다. 이전 코드와 달라진점은 메시지 팝업으로 전체 종목수를 알려주는 것과 종목 명칭, 종목의 전일가격을 받는 커맨드를 추가하여 콘솔창에 좀더 직관적으로 가격을 보여주도록 한 것이 달라진 점 입니다.

이렇게 하면 출력창에는 아래와 같이 결과가 출력됩니다.

종목 코드와 종목명, 전일가를 한번에 출력해본 모습

어떠신가요? 좀 더 직관적으로 볼 수 있겠죠?

프로그램을 직접 만드는 만큼 재가 가지고 있는 관심 종목만 살펴보기 보다는 전체 종목들의 추이를 보면서 내가 발견하지 못한 좋은 종목을 컴퓨터에게 분석을 시켜보려고 하는데요. 그러기 위해서는 전체 종목을 자동으로 받아오는 함수가 반드시 필요할 것 같아서 구현해 보았습니다. 

 

다음번에는 이벤트 핸들러를 이용하여 결과값을 처리하는 방법을 소개해 드려 보도록 하겠습니다.

다들 돈 많이 버세요~ ㅋ

 

 

2020.08.11 - [DEV/c#] - [c#] streamreader 를 이용하여 정확한 라인 위치 찾기

 

[c#] streamreader 를 이용하여 정확한 라인 위치 찾기

c# 을 이용하여 streamreader 개체로 텍스트를 읽는 방법은 매우 효율 적이고 손쉽게 작업을 수행하도록 해줍니다. 빠르고 간단하게 개발을 할 수 있어 저도 자주 사용하고는 합니다. 그런데 이번에

diy-dev-design.tistory.com

2020.01.03 - [DEV/c#] - [C#] C# APP 에서 엑셀 연동해보기

 

[C#] C# APP 에서 엑셀 연동해보기

엑셀에서 VBA 로 코드를 짜다 보면 막상 특정 엑셀 파일에만 VBA 가 적용이 가능하기 때문에 막상 다른 엑셀 파일에서 동일한 동작을 하려면 또 코드를 복사해 넣고 실행을 해야 하는 경우가 있습

diy-dev-design.tistory.com

 

반응형

+ Recent posts