대신증권 API - cybos marketeye 사용하기 (C#)

MarketEye class

 

 MarketEye

 

설명

주식,지수,선물/옵션 등의 여러종목의 필요 항목들을 한번에 수신합니다.

통신종류

Request/Reply

연속여부

X

관련 SB/PB

StockCur, FutureCurOnly, OptionCurOnly

관련CYBOS

[7059] MarketEye

모듈 위치

cpsysdib.dll

Method

object.SetInputValue(type,value)

type 해당하는 입력 데이터를 value 값으로 지정합니

  • type: 입력 데이터

0 - (long or long array) 필드 또는 필드 배열. 최대 64개의 필드까지 요청가

필드

0:종목코드(string)

1:시간( ulong) - hhmm

2:대비부호(char)

코드

내용

'1'

상한

'2'

상승

'3'

보합

'4'

'5'

3:전일대비(long or float) - 주의) 반드시 대비부호(2) 같이 요청을 하여야

4:현재가(long or float)

5:시가(long or float)

6:고가(long or float)

7:저가(long or float)

8:매도호가(long or float)

9:매수호가(long or float)

10:거래량( ulong)

11:거래대금(ulonglong) - 단위:

12:장구분(char or empty)

코드

내용

'0'

장전

'1'

동시호가

'2'

장중

13:총매도호가잔량(ulong)

14:총매수호가잔량(ulong)

15:최우선매도호가잔량(ulong)

16:최우선매수호가잔량(ulong)

17:종목명(string)

20:총상장주식수(ulonglong) - 단위:

21:외국인보유비율(float)

22:전일거래량(ulong)

23:전일종가(long or float)

24:체결강도(float)

25:체결구분(char or empty)

코드

내용

'1'

매수체결

'2'

매도체

27:미결제약정(long)

28:예상체결가(long)

29:예상체결가대비(long) - 주의) 반드시 예샹체결가대비부호(30) 같이 요청을 하여야

30:예상체결가대비부호(char or empty)

코드

내용

'1'

상한

'2'

상승

'3'

보합

'4'

'5'

31:예상체결수량(ulong)

32:19일종가합(long or float)

33:상한가(long or float)

34:하한가(long or float)

35:매매수량단위(ushort)

36:시간외단일대비부호(char or empty)

코드

내용

'+'

양수

'-'

음수

37:시간외단일전일대비(long) - 주의) 반드시 시간외단일대비부호(36) 같이 요청을 하여야

38:시간외단일현재가(long)

39:시간외단일시가(long)

40:시간외단일고가(long)

41:시간외단일저가(long)

42:시간외단일매도호가(long)

43:시간외단일매수호가(long)

44:시간외단일거래량(ulong)

45:시간외단일거래대금(ulonglong) - 단위:

46:시간외단일총매도호가잔량(ulong)

47:시간외단일총매수호가잔량(ulong)

48:시간외단일최우선매도호가잔량(ulong)

49:시간외단일최우선매수호가잔량(ulong)

50:시간외단일체결강도(float)

51:시간외단일체결구분(char or empty)

코드

내용

'1'

매수체결

'2'

매도체

53:시간외단일예상/실체결구분(char)

코드

내용

'1'

예상체결

'2'

54:시간외단일예상체결가(long)

55:시간외단일예상체결전일대비(long) - 주의) 반드시 시간외예상체결대비부호(56) 같이 요청을 하여야

56:시간외단일예상체결대비부호(char or empty)

코드

내용

'1'

상한

'2'

상승

'3'

보합

'4'

하락

'5'

하한

57:시간외단일예상체결수량(ulong)

59:시간외단일기준가(long)

60:시간외단일상한가(long)

61:시간외단일하한가(long)

62:외국인순매매(long)

63:52주최고가(long or float)

64:52주최저가(long or float)

65:연중주최저가(long or float)

66:연중최저가(long or float)

67:PER(float)

68:시간외매수잔량(ulong)

69:시간외매도잔량(ulong)

70:EPS(ulong)

71:자본금(ulonglong)- 단위:백만

72:액면가(ushort)

73:배당률(float)

74:배당수익률(float)

75:부채비율(float)

76:유보율(float)

77:자기자본이익률(float)

78:매출액증가율(float)

79:경상이익증가율(float)

80:순이익증가율(float)

81:투자심리(float)

82: VR(float)

83:5 회전율(float)

84:4 종가합(ulong)

85:9 종가합(ulong)

86:매출액(ulonglong) - 단위: 백만

87:경상이익(ulonglong) - 단위:

88:당기순이익(ulonglog) - 단위:

89:BPS(ulong) - 주당순자

90:영업이익증가율(float)

91:영업이익(ulonglong) - 단위:

92:매출액영업이익률(float)

93:매출액경상이익률(float)

94:이자보상비율(float)

95:결산년월(ulong) - yyyymm

96:분기BPS(ulong) - 분기주당순자

97:분기매출액증가율(float)

98:분기영업이액증가율(float)

99:분기경상이익증가율(float)

100:분기순이익증가율(float)

101:분기매출액(ulonglong) - 단위:

102:분기영업이익(ulonglong) - 단위:

103:분기경상이익(ulonglong) - 단위:

104:분기당기순이익(ulonglong) - 단위:

105:분개매출액영업이익률(float)

106:분기매출액경상이익률(float)

107:분기ROE(float) - 자기자본순이익

108:분기이자보상비율(float)

109:분기유보율(float)

110:분기부채비율(float)

111:최근분기년월(ulong) - yyyymm

112:BASIS(float)

113:현지날짜(ulong) - yyyymmdd

114:국가명(string) - 해외지수 국가

 

1 - (string or string array) 종목코드 또는 종목코드 배열. 최대 200종목까지 가능.
주의) 해외지수와 환율은 심볼코드를 입력하여야 ) JP#NI225:니케이지

 

2 - (char) 체결비교방식

코드

내용

'1'

체결가비교방식(default)

'2'

호가비교방

 

  • value: 새로 지정할

value = object.GetHeaderValue(type)

type 해당하는 헤더 데이터를 반환합니

  • type: 데이터

0 - (long) 필드

1 - (string array) 필드명의 배열 - 필드는 요청한 필드 값의 오름차순으로 정렬되어

2 - (long) 종목

  • 반환값: 데이터 종류에 해당하는

value = object.GetDataValue (Type,index)

type 해당하는 데이터를 반환합니

  • type: 요청한 필드의 index - 필드는 요청한 필드 값으로 오름차순으로 정렬되어

  • index: 요청한 종목의 index

object.Subscribe()

사용하지

object.Unsubscribe()

사용하지

object.Request()

해당하는 데이터를 요청한

object.BlockRequest()

데이터 요청.Blocking Mode

Event

Object.Received

해당하는 데이터를 수신했을 발생하는 이벤

 

 

대신증권의 cybos API를 사용해서 주식에 관련된 다양한 정보들을 수집할 수 있다.

일단 주식에서 수급 및 재무제표의 여러  항목들을 한번에 수신할 수 있는 MarketEye 클래스에 대해 알아보자.

 

사용 언어: C#

개발 툴: visual studio

 

 

static CPSYSDIBLib.MarketEye market = new CPSYSDIBLib.MarketEye();
 

 

 

new를 이용해 MarketEye의 인스턴스를 생성한다.

이제 MarketEye의 함수들을 사용할 수 있다.

물론 해당 라이브러리(CPSYSDIBLib)는 참조추가로 프로젝트에 추가가 되어있어야한다.

 

위 레퍼런스에 적혀있듯이 SetInputValue(type,value) 함수는 두 개의 input을 받는다.

Type은 원하는 정보 type을 지정하는 데 사용되며 long 또는 long array를 입력으로 넣을 수 있다.

각각의 type값은 위 클래스 함수 설명을 참조하기 바란다.

두번째 input은 종목코드 또는 종목코드 배열로 string 이나  string array를 사용한다. 

 

데이터 요청은 BlockRequest함수로 하고 반환받은 데이터는 GetDataValue 함수를 사용해서 사용할 수 있다.

첫번째 input값은 요청한 필드의 인덱스, 두번째 input값은 요청한 회사의 인덱스 값이다.

 

 

케이스 1) 액토즈소프트 회사의 EPS를 알아보자

 

     try
            {
                market.SetInputValue(0, 70);
                market.SetInputValue(1, "A003540");
                market.BlockRequest();
            }
            catch (Exception e)
            {
                return marketList;
            }
          

 

long EPS = market.GetDataValue(0, 0);

 

 

하나의 회사의 하나의 필드 정보만 필요하기에 배열없이 그대로 입력한다.

이럴 경우 GetDataValue의 인풋값은 0,0이 된다.

 

케이스 2) 여러 게임 회사들의 다양한 값들을 배열로 받아온다.

 

요청하는 타입을 배열로 저장하고 회사 종목코드들을 배열로 저장하여 setInputValue의 input값으로 전달한다.

GetHeaderValue 함수로 반환된 타입과 회사의 개수를 알 수 있다. 함수 대신 그냥 요청했던 배열 사이즈로 대신해도 된다.  

GetDataValue (Type,index)는 요청했던 데이터를 돌려주는 함수로

Type배열과 회사코드 배열의 인덱스 값을 인자로 사용하여 해당 회사코드의 타입 값을 리턴한다.  

 

회사 코드별로 파일을 따로 만들어 요일별로 요청했던 데이터를 해당 파일에 추가하려고 한다.

아래 코드를 보면 회사코드로 파일 이름을 만들고 요청했던 필드값들을 , 를 구분자로 하여 하나의 라인으로 만들어 파일에 추가하는 것을 확인할 수 있다.

 

            int[] type_array = { 0, 1, 2, 3, 4, 10, 11, 12, 17, 20, 21, 22, 23, 24, 25, 62, 67, 68, 69 };
            string[] company_array = { "A052790", "A078340", "A112040", "A181710" };
            try
            {
           
                    market.SetInputValue(0, type_array);
                market.SetInputValue(1, company_array);
                market.BlockRequest();

            }
            catch (Exception e)
            {
                string line = string.Format("{0},", e);
                MessageBox.Show(line);
              

            }


            int field_total = market.GetHeaderValue(0);
          int company_total = market.GetHeaderValue(2);


 

             for (int company_num = 0; company_num < company_total; company_num++)
            {
                string company_name = company_array[company_num];
                string filename = string.Format("marketeye_{0}.csv", company_name);
                string total_line = "";
                for (int field_num = 0; field_num < field_total; field_num++)
                {
                    string line = string.Format("{0},", market.GetDataValue(field_num, company_num));
                    total_line += line;

                }
                System.IO.File.AppendAllText(filename, total_line, Encoding.UTF8);
                System.IO.File.AppendAllText(filename, Environment.NewLine);
            
            }