반응형


          [GetConditionLoad() 함수]

          

          사용자 조건검색 목록을 서버에 요청합니다. 조건검색 목록을 모두 수신하면 OnReceiveConditionVer()이벤트 함수가 호출됩니다.

          조건검색 목록 요청을 성공하면 1, 아니면 0을 리턴합니다.

          



          [GetConditionNameList() 함수]

          

          서버에서 수신한 사용자 조건식을 조건명 인덱스와 조건식 이름을 한 쌍으로 하는 문자열들로 전달합니다.

          조건식 하나는 조건명 인덱스와 조건식 이름은 '^'로 나뉘어져 있으며 각 조건식은 ';'로 나뉘어져 있습니다.

          이 함수는 반드시 OnReceiveConditionVer()이벤트 함수안에서 사용해야 합니다.

          



          [SendCondition() 함수]

          

          SendCondition(

          BSTR strScrNo,    // 화면번호

          BSTR strConditionName,  // 조건식 이름

          int nIndex,     // 조건명 인덱스

          int nSearch   // 조회구분, 0:조건검색, 1:실시간 조건검색

          )

          

          서버에 조건검색을 요청하는 함수로 맨 마지막 인자값으로 조건검색만 할것인지 실시간 조건검색도 할 것인지를 지정할 수 있습니다.

          여기서 조건식 인덱스는 GetConditionNameList()함수가 조건식 이름과 함께 전달한 조건명 인덱스를 그대로 사용해야 합니다.

          리턴값 1이면 성공이며, 0이면 실패입니다.

          요청한 조건식이 없거나 조건명 인덱스와 조건식이 서로 안맞거나 조회횟수를 초과하는 경우 실패하게 됩니다.

          

          ------------------------------------------------------------------------------------------------------------------------------------

          

          [조건검색 사용예시]

          GetConditionNameList()함수로 얻은 조건식 목록이 "0^조건식1;3^조건식1;8^조건식3;23^조건식5"일때 조건식3을 검색

          

          long lRet = SendCondition("0156", "조건식3", 8, 1);

          

          ------------------------------------------------------------------------------------------------------------------------------------

          



          [SendConditionStop() 함수]

          

          SendConditionStop(

          BSTR strScrNo,    // 화면번호

          BSTR strConditionName,    // 조건식 이름 

          int nIndex    // 조건명 인덱스

          )

          

          조건검색을 중지할 때 사용하는 함수입니다.

          조건식 조회할때 얻는 조건식 이름과 조건명 인덱스 쌍을 맞춰서 사용해야 합니다.

          

          


          [SetRealReg() 함수]
          
          SetRealReg(
          BSTR strScreenNo,   // 화면번호
          BSTR strCodeList,   // 종목코드 리스트
          BSTR strFidList,  // 실시간 FID리스트
          BSTR strOptType   // 실시간 등록 타입, 0또는 1
          )
          
          실시간 시세를 받으려는 종목코드와 FID 리스트를 이용해서 실시간 시세를 등록하는 함수입니다.
          한번에 등록가능한 종목과 FID갯수는 100종목, 100개 입니다.
          실시간 등록타입을 0으로 설정하면 등록한 종목들은 실시간 해지되고 등록한 종목만 실시간 시세가 등록됩니다.
          실시간 등록타입을 1로 설정하면 먼저 등록한 종목들과 함께 실시간 시세가 등록됩니다
          
          ------------------------------------------------------------------------------------------------------------------------------------
          
          [실시간 시세등록 예시]
          OpenAPI.SetRealReg(_T("0150"), _T("039490"), _T("9001;302;10;11;25;12;13"), "0");  // 039490종목만 실시간 등록
          OpenAPI.SetRealReg(_T("0150"), _T("000660"), _T("9001;302;10;11;25;12;13"), "1");  // 000660 종목을 실시간 추가등록
          
          ------------------------------------------------------------------------------------------------------------------------------------
          


          [SetRealRemove() 함수]

          

          SetRealRemove(

          BSTR strScrNo,    // 화면번호 또는 ALL

          BSTR strDelCode   // 종목코드 또는 ALL

          )

          

          실시간 시세해지 함수이며 화면번호와 종목코드를 이용해서 상세하게 설정할 수 있습니다.

          

          ------------------------------------------------------------------------------------------------------------------------------------


          [실시간 시세해지 예시]

          OpenAPI.SetRealRemove("0150", "039490");  // "0150"화면에서 "039490"종목해지

          OpenAPI.SetRealRemove("ALL", "ALL");  // 모든 화면에서 실시간 해지

          OpenAPI.SetRealRemove("0150", "ALL");  // 모든 화면에서 실시간 해지

          OpenAPI.SetRealRemove("ALL", "039490");  // 모든 화면에서 실시간 해지

          

          ------------------------------------------------------------------------------------------------------------------------------------

          


          [OnReceiveConditionVer() 이벤트]
          
          OnReceiveConditionVer(
          LONG lRet, // 호출 성공여부, 1: 성공, 나머지 실패
          BSTR sMsg  // 호출결과 메시지
          )
          
          사용자 조건식요청에 대한 응답을 서버에서 수신하면 호출되는 이벤트 함수입니다.
          
          ------------------------------------------------------------------------------------------------------------------------------------
          
          [사용자 조건식 호출결과 수신예시]
          OnReceiveConditionVer(long lRet, LPCTSTR sMsg)
          {
              if(lRet != 0) return;
              
              CString strCondList(m_KOA.GetConditionNameList());
              CString strOneCond, strItemID, strCondName;
              while(AfxExtractSubString(strOneCond, strCondList, nIndex++, _T(';')))  // 조건식을 하나씩 분리한다.
              {
                  if(strOneCond.IsEmpty()) continue;
                  AfxExtractSubString(strItemID , strOneCond, 0, _T('^'));  // 조건명 인덱스를 분리한다.
                  AfxExtractSubString(strCondName , strOneCond, 1, _T('^'));  // 조건식 이름을 분리한다.
              }
          }
          
          ------------------------------------------------------------------------------------------------------------------------------------
          
          


          [OnReceiveTrCondition() 이벤트]

          

          OnReceiveTrCondition(

          BSTR sScrNo,    // 화면번호

          BSTR strCodeList,   // 종목코드 리스트

          BSTR strConditionName,    // 조건식 이름

          int nIndex,   // 조건명 인덱스

          int nNext   // 연속조회 여부

          )

          

          조건검색 요청으로 검색된 종목코드 리스트를 전달하는 이벤트 함수입니다. 

          종목코드 리스트는 각 종목코드가 ';'로 구분되서 전달됩니다.

          

          ------------------------------------------------------------------------------------------------------------------------------------

          

          [조건검색 결과 수신예시]

          OnReceiveTrCondition(LPCTSTR sScrNo,LPCTSTR strCodeList, LPCTSTR strConditionName, int nIndex, int nNext)

          {

              if(strCodeList == "") return;

              CString strCode, strCodeName;

              int   nIdx = 0;

              while(AfxExtractSubString(strCode, strCodeList, nIdx++, _T(';')))// 하나씩 종목코드를 분리

              {

                  if(strCode == _T("")) continue;

                  strCodeName = OpenAPI.GetMasterCodeName(strCode); // 종목명을 가져온다.

              }

          }

          

          ------------------------------------------------------------------------------------------------------------------------------------

          


          [OnReceiveRealCondition() 이벤트]
          
          OnReceiveRealCondition(
          BSTR strCode,   // 종목코드
          BSTR strType,   //  이벤트 종류, "I":종목편입, "D", 종목이탈
          BSTR strConditionName,    // 조건식 이름 
          BSTR strConditionIndex    // 조건명 인덱스
          )
          
          실시간 조건검색 요청으로 신규종목이 편입되거나 기존 종목이 이탈될때 마다 호출됩니다.
          
          ------------------------------------------------------------------------------------------------------------------------------------
          
          [실시간 조건검색 수신예시]
          OnReceiveRealCondition(LPCTSTR sCode, LPCTSTR sType, LPCTSTR strConditionName, LPCTSTR strConditionIndex)
          {
              CString strCode(sCode), strCodeName;
              int   nIdx = 0;
              CString strType(sType);
              if(strType == _T("I"))// 종목편입
              {
                strCodeName = OpenAPI.GetMasterCodeName(strCode); // 종목명을 가져온다.
                long lRet = OpenAPI.SetRealReg(strSavedScreenNo, strCode, _T("9001;302;10;11;25;12;13"), "1");// 실시간 시세등록
              }
              else if(strType == _T("D")) // 종목이탈
              {
                OpenAPI.SetRealRemove(strSavedScreenNo, strCode);// 실시간 시세해지
              }
          }
          
          ------------------------------------------------------------------------------------------------------------------------------------
          
          


반응형
반응형

        

        [조건검색 개요]

        키움OpenAPI에서 제공하는 조건검색 기능은 영웅문HTS에서 작성 조건식을 불러서 사용하는 방식이며 OpenAPI에서 조건검색 수식작성이나

        수식편집은 지원하지 않습니다.

        

        조건검색 관련 6개 함수와 3개 이벤트 함수가 제공되며 이를 이용해서 조건검색과 실시간 조건검색(반복적인 조건검색 요청없이 

        자동으로 신규종목 편입, 이탈되는 기능)을 설정할수 있습니다.

        영웅문HTS와 동일하게 실시간 조건검색은 최대 10개 조건식만 실시간 조건검색으로 요청할수 있는데 조건검색 결과가 100종목을 

        넘게 되면 실시간 조건검색을 할수가 없습니다.

        

        [조건검색 제한]

        조건검색(실시간 조건검색 포함)은 시세조회와 관심종목조회와 합산해서 1초에 5회만 요청 가능하며 1분에 1회로 조건검색 제한됩니다.

        조건검색 제한에 대한 자세한 내용은 하단을 참고해 주세요.

        

        10개 조건검색식을 한번에 모두 조회하는 프로그램이 있으며 조건검색만 요청한다고 가정해서 설명하면 다음과 같습니다.

        

        ------------------------------------------------------------------------------------------------------------------------------------

        

        첫번째 제한조건 : 1초에 5회만 조회가능

        두번째 제한조건 : 조건별 1분당 1회로 제한(실시간 조건검색 수신에는 영향없음)

        

        09:00:00  조회 시작

        1번부터 5번 조건식은 조회성공(첫번째 제한조건, 두번째 제한조건 모두 만족)

        6번부터 10번 조건식은 조회실패(첫번째 제한조건)

        

        09:00:01 조회 재시작(1초후 재조회)

        1번부터 5번 조건식은 조회실패(두번째 제한조건)

        6번부터 10번 조건식은 조회성공(첫번째 제한조건, 두번째 제한조건 모두 만족)

        ... ... ...

        

        09:01:00 조회시작 (첫조회 1분후)

        1번부터 5번 조건식은 조회성공(첫번째 제한조건, 두번째 제한조건 모두 만족)

        6번부터 10번 조건식은 조회실패(첫번째 제한조건)

        

        09:00:01 조회 재시작(1분 1초후 재조회)

        1번부터 5번 조건식은 조회실패(두번째 제한조건)

        6번부터 10번 조건식은 조회성공(첫번째 제한조건, 두번째 제한조건 모두 만족)

        

        ------------------------------------------------------------------------------------------------------------------------------------

        

        [실시간 조건검색]

        실시간 조건검색 결과로 100종목 이상이 검색되는 조건식은 실시간 조건검색 실행이 안됩니다.그리고 실시간 조건검색은 모두 10개 

        조건식만 사용할 수 있습니다.

        

        



반응형
반응형


          [SendOrder() 함수]

          

          SendOrder(

          BSTR sRQName, // 사용자 구분명

          BSTR sScreenNo, // 화면번호

          BSTR sAccNo,  // 계좌번호 10자리

          LONG nOrderType,  // 주문유형 1:신규매수, 2:신규매도 3:매수취소, 4:매도취소, 5:매수정정, 6:매도정정

          BSTR sCode, // 종목코드

          LONG nQty,  // 주문수량

          LONG nPrice, // 주문가격

          BSTR sHogaGb,   // 거래구분(혹은 호가구분)은 아래 참고

          BSTR sOrgOrderNo  // 원주문번호입니다. 신규주문에는 공백, 정정(취소)주문할 원주문번호를 입력합니다.

          )

          

          9개 인자값을 가진 국내 주식주문 함수이며 리턴값이 0이면 성공이며 나머지는 에러입니다.

          1초에 5회만 주문가능하며 그 이상 주문요청하면 에러 -308을 리턴합니다.

          

          [거래구분]

          모의투자에서는 지정가 주문과 시장가 주문만 가능합니다.

          

          00 : 지정가

          03 : 시장가

          05 : 조건부지정가

          06 : 최유리지정가

          07 : 최우선지정가

          10 : 지정가IOC

          13 : 시장가IOC

          16 : 최유리IOC

          20 : 지정가FOK

          23 : 시장가FOK

          26 : 최유리FOK

          61 : 장전시간외종가

          62 : 시간외단일가매매

          81 : 장후시간외종가

          

          



          [SendOrderFO() 함수]

          

          SendOrderFO(

          BSTR sRQName,     // 사용자 구분명

          BSTR sScreenNo,   // 화면번호

          BSTR sAccNo,      // 계좌번호 10자리 

          BSTR sCode,       // 종목코드 

          LONG lOrdKind,    // 주문종류 1:신규매매, 2:정정, 3:취소

          BSTR sSlbyTp,     // 매매구분 1: 매도, 2:매수

          BSTR sOrdTp,      // 거래구분(혹은 호가구분)은 아래 참고

          LONG lQty,        // 주문수량 

          BSTR sPrice,      // 주문가격 

          BSTR sOrgOrdNo    // 원주문번호

          )

          

          코스피지수200 선물옵션, 주식선물 전용 주문함수입니다.

          

          [거래구분]

          1 : 지정가

          2 : 조건부지정가

          3 : 시장가

          4 : 최유리지정가

          5 : 지정가(IOC)

          6 : 지정가(FOK)

          7 : 시장가(IOC)

          8 : 시장가(FOK)

          9 : 최유리지정가(IOC)

          A : 최유리지정가(FOK)

          



          [SendOrderCredit() 함수]

          

          SendOrderCredit(

          BSTR sRQName,   // 사용자 구분명

          BSTR sScreenNo,   // 화면번호 

          BSTR sAccNo,    // 계좌번호 10자리 

          LONG nOrderType,    // 주문유형 1:신규매수, 2:신규매도 3:매수취소, 4:매도취소, 5:매수정정, 6:매도정정

          BSTR sCode,   // 종목코드

          LONG nQty,    // 주문수량

          LONG nPrice,    // 주문가격

          BSTR sHogaGb,   // 거래구분(혹은 호가구분)은 아래 참고

          BSTR sCreditGb, // 신용거래구분

          BSTR sLoanDate,   // 대출일

          BSTR sOrgOrderNo    // 원주문번호

          )

          

          국내주식 신용주문 전용함수입니다. 대주거래는 지원하지 않습니다.


          [거래구분]

          모의투자에서는 지정가 주문과 시장가 주문만 가능합니다.

          

          00 : 지정가

          03 : 시장가

          05 : 조건부지정가

          06 : 최유리지정가

          07 : 최우선지정가

          10 : 지정가IOC

          13 : 시장가IOC

          16 : 최유리IOC

          20 : 지정가FOK

          23 : 시장가FOK

          26 : 최유리FOK

          61 : 장전시간외종가

          62 : 시간외단일가매매

          81 : 장후시간외종가

          

          [신용거래]

          신용거래 구분은 다음과 같습니다.

          03 : 신용매수 - 자기융자

          33 : 신용매도 - 자기융자

          99 : 신용매도 자기융자 합

          

          대출일은 YYYYMMDD형식이며 신용매도 - 자기융자 일때는 종목별 대출일을 입력하고 신용매도 - 융자합이면 "99991231"을 입력합니다.

          


          [GetChejanData() 함수]
          
          GetChejanData(
          long nFid   // 실시간 타입에 포함된FID
          )
          
          OnReceiveChejan()이벤트 함수가 호출될때 체결정보나 잔고정보를 얻어오는 함수입니다.
          이 함수는 반드시 OnReceiveChejan()이벤트 함수가 호출될때 그 안에서 사용해야 합니다.
          


          [OnReceiveChejanData() 이벤트]

          

          OnReceiveChejanData(

          BSTR sGubun, // 체결구분 접수와 체결시 '0'값, 국내주식 잔고전달은 '1'값, 파생잔고 전달은 '4'

          LONG nItemCnt,

          BSTR sFIdList

          )

          

          주문요청후 주문접수, 체결통보, 잔고통보를 수신할 때 마다 호출되며 GetChejanData()함수를 이용해서 상세한 정보를 얻을수 있습니다.

          



          [OnReceiveMsg() 이벤트 함수]

          

          OnReceiveMsg(

          BSTR sScrNo,   // 화면번호

          BSTR sRQName,  // 사용자 구분명

          BSTR sTrCode,  // TR이름

          BSTR sMsg     // 서버에서 전달하는 메시지

          )

          

          서버통신 후 수신한 메시지를 알려줍니다.

          메시지에는 6자리 코드번호가 포함되는데 이 코드번호는 통보없이 수시로 변경될 수 있습니다. 따라서 주문이나 오류관련처리를

          이 코드번호로 분류하시면 안됩니다.

          



          [OnReceiveTrData() 이벤트]

          

          void OnReceiveTrData(

          BSTR sScrNo,       // 화면번호

          BSTR sRQName,      // 사용자 구분명

          BSTR sTrCode,      // TR이름

          BSTR sRecordName,  // 레코드 이름

          BSTR sPrevNext,    // 연속조회 유무를 판단하는 값 0: 연속(추가조회)데이터 없음, 1:연속(추가조회) 데이터 있음

          LONG nDataLength,  // 사용안함.

          BSTR sErrorCode,   // 사용안함.

          BSTR sMessage,     // 사용안함.

          BSTR sSplmMsg     // 사용안함.

          )

          

          조회요청 응답을 받거나 조회데이터를 수신했을때 호출됩니다.

          조회데이터는 이 이벤트 함수내부에서 GetCommData()함수를 이용해서 얻어올 수 있습니다.

          



반응형
반응형


        [개요]

        키움OpenAPI를 이용하면 국내주식과 코스피200 지수선물/옵션, 주식선물을 거래할 수 있습니다.

        상품별로 전용 주문함수가 있으며 국내주식 주문의 경우 SendOrderCredit()함수를 이용해서 대주를 제외한 신용주문도 지원합니다.

        정정주문은 원주문에 대한 수량정정과 가격정정만 가능하며 거래구분을 변경하는 정정주문은 지원하지 않습니다.

        

        [주문]

        주문을 내면 OnReceiveTRData(), OnReceiveMsg(), OnReceiveChejan()이벤트 함수가 차례로 호출됩니다.

        OnReceiveTRData()이벤트 함수는 주로 조회요청후 호출되는 함수이지만 주문시에도 호출되는데 이 이벤트내부에서 주문번호를

        얻어올 수 있습니다.그런데 만일 주문이 실패하게 되면 주문번호는 공백("")으로 전달됩니다.

        상품별 주문함수는 리턴값이 0(성공)이여도 장 개시전 주문이나 호가범위를 벗어난 주문등 주문이 실패할 경우는 다양합니다.

        

        보유하고 있는 현금을 넘는 수량으로 주문한 경우 자동으로 미수로 계산되므로 [0398] 계좌증거금률 변경등록 화면을 통해 

        100%현금 주문만 가능하도록 설정할 수도 있습니다.

        이러한 경우에도 적은 비용에 대해선 비수발생가능 하며 자세한 내용은 해당화면 설명을 참고하시기 바랍니다.

        미수거래는 주문매체별로 설정 할 수 있는 것이 아니라 계좌별로 설정가능한 것이라서 키움OpenAPI에서도 가능한 점 알려드립니다.


        [주문제한]

        국내 주식주문과 국내 주식신용주문, 선물옵션주문은 모두 1초당 5회로 제한 됩니다.

        

        [주문체결, 잔고]

        주문과 관련한 이벤트 함수는 OnReceiveMsg(), OnReceiveTRData(), OnReceiveChejan()이렇게 3개입니다.

        OnReceiveMsg()이벤트 함수는 주문성공, 실패 메시지를 코드와 함께 전달하므로 상세한 내용을 파악할 수 있습니다.

        OnReceiveTRData()이벤트 함수는 주문후 호출되며 주문번호를 얻을수 있습니다.만약 이 이벤트 함수에서 주문번호를 얻을수 없으면

        해당 주문은 실패한 것입니다.

        마지막으로 소개할 OnReceiveChejan()이벤트 함수는 주문접수, 체결, 잔고발생시 호출되며 이 이벤트 함수를 통해 대부분의 주문관련

        정보를 얻을 수 있습니다.

        

        주문요청에 대한 응답은 주문접수, 주문체결, 잔고수신 순서로 진행됩니다.이때 주문번호는 처음 접수됬을때 한번 부여되지만 

        체결번호는 체결될때 마다 체번되서 전달됩니다. 이상의 과정을 간단히 정리하면 다음과 같습니다.

        

        주문 ---> 접수 ---> 체결1 ---> 잔고1  ---> 체결2  ---> 잔고2... ---> 체결n  ---> 잔고n

        

        주문에 대한 자세한 내용은 OnReceiveChejanData()이벤트 함수가 호출될때 전달되는 sGubun값, sFidList값을 이용하는데 

        sGubun값은 접수와 체결시 '0'값, 잔고전달은 '1'값을 가지게 됩니다. 이값에 따라 ';'로 연결된 sFidList값도 달라지는데 이 값을

        파싱해서 GetChejanData()함수호출시 인자로 사용하시면 보다 상세한 내용을 얻을 수 있습니다.

        

        [OnReceiveChejan()이벤트 함수로 전달되는 FID목록정리]

        

        "9201" : "계좌번호" 

        "9203" : "주문번호" 

        "9001" : "종목코드" 

        "913" : "주문상태" 

        "302" : "종목명" 

        "900" : "주문수량" 

        "901" : "주문가격" 

        "902" : "미체결수량" 

        "903" : "체결누계금액" 

        "904" : "원주문번호" 

        "905" : "주문구분" 

        "906" : "매매구분" 

        "907" : "매도수구분" 

        "908" : "주문/체결시간" 

        "909" : "체결번호" 

        "910" : "체결가" 

        "911" : "체결량" 

        "10" : "현재가" 

        "27" : "(최우선)매도호가" 

        "28" : "(최우선)매수호가" 

        "914" : "단위체결가" 

        "915" : "단위체결량" 

        "919" : "거부사유" 

        "920" : "화면번호" 

        "917" : "신용구분" 

        "916" : "대출일" 

        "930" : "보유수량" 

        "931" : "매입단가" 

        "932" : "총매입가" 

        "933" : "주문가능수량" 

        "945" : "당일순매수수량" 

        "946" : "매도/매수구분" 

        "950" : "당일총매도손일" 

        "951" : "예수금" 

        "307" : "기준가" 

        "8019" : "손익율" 

        "957" : "신용금액" 

        "958" : "신용이자" 

        "918" : "만기일" 

        "990" : "당일실현손익(유가)" 

        "991" : "당일실현손익률(유가)" 

        "992" : "당일실현손익(신용)" 

        "993" : "당일실현손익률(신용)" 

        "397" : "파생상품거래단위" 

        "305" : "상한가" 

        "306" : "하한가"

        



반응형
반응형


          [CommRqData() 함수]

          

          CommRqData(

          BSTR sRQName,    // 사용자 구분명

          BSTR sTrCode,    // 조회하려는 TR이름

          long nPrevNext,  // 연속조회여부

          BSTR sScreenNo  // 화면번호

          )

          

          조회요청함수이며 빈번하게 조회요청하면 시세과부하 에러값으로 -200이 전달됩니다.

          리턴값

          0이면 조회요청 정상 나머지는 에러

          -200 시세과부하

          -201 조회전문작성 에러

          

          

          



          [SetInputValue() 함수]

          

          SetInputValue(

          BSTR sID,     // TR에 명시된 Input이름

          BSTR sValue   // Input이름으로 지정한 값

          )

          

          조회요청시 TR의 Input값을 지정하는 함수이며 조회 TR 입력값이 많은 경우 이 함수를 반복적으로 호출합니다.

          

          ------------------------------------------------------------------------------------------------------------------------------------

          

          [OPT10081 : 주식일봉차트조회요청예시]

          

          SetInputValue("종목코드" ,  "039490"); // 첫번째 입력값 설정

          SetInputValue("기준일자" ,  "20160101");// 두번째 입력값 설정

          SetInputValue("수정주가구분" ,  "1"); // 세번째 입력값 설정

          LONG lRet = CommRqData( "RQName","OPT10081", "0","0600");// 조회요청

          

          ------------------------------------------------------------------------------------------------------------------------------------

          



          [CommGetData() 함수]

          

          일부 TR에서 사용상 제약이 있음므로 이 함수 대신 GetCommData()함수를 사용하시기 바랍니다.

          



          [DisconnectRealData() 함수]

          

          DisconnectRealData(

          BSTR sScnNo // 화면번호 

          )

          

          화면번호 설정한 실시간 데이터를 해지합니다.

          



          [GetRepeatCnt() 함수]

          

          GetRepeatCnt(

          BSTR sTrCode, // TR 이름

          BSTR sRecordName // 레코드 이름

          )

          

          조회수신한 멀티데이터의 갯수(반복)수를 얻을수 있습니다. 예를들어 차트조회는 한번에 최대 900개 데이터를 수신할 수 있는데 

          이렇게 수신한 데이터갯수를 얻을때 사용합니다.

          이 함수는 반드시 OnReceiveTRData()이벤트 함수가 호출될때 그 안에서 사용해야 합니다.

          

          ------------------------------------------------------------------------------------------------------------------------------------

          

          [OPT10081 : 주식일봉차트조회요청예시]

          

          OnReceiveTrDataKhopenapictrl(...)

          {

            if(strRQName == _T("주식일봉차트"))

            {

              int nCnt = OpenAPI.GetRepeatCnt(sTrcode, strRQName);

              for (int nIdx = 0; nIdx < nCnt; nIdx++)

              {

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("종목코드"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("거래량"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("시가"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("고가"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("저가"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("현재가"));   strData.Trim();

              }

            }

          }

          

          ------------------------------------------------------------------------------------------------------------------------------------

          



          [CommKwRqData() 함수]

          

          CommKwRqData(

          BSTR sArrCode,    // 조회하려는 종목코드 리스트

          BOOL bNext,   // 연속조회 여부 0:기본값, 1:연속조회

          int nCodeCount,   // 종목코드 갯수

          int nTypeFlag,    // 0:주식 관심종목, 3:선물옵션 관심종목

          BSTR sRQName,   // 사용자 구분명

          BSTR sScreenNo    // 화면번호

          )

          

          한번에 100종목을 조회할 수 있는 관심종목 조회함수인데 영웅문HTS [0130] 관심종목 화면과는 이름만 같은뿐 전혀관련이 없습니다.

          함수인자로 사용하는 종목코드 리스트는 조회하려는 종목코드 사이에 구분자';'를 추가해서 만들면 됩니다.          

          

          



          [GetCommData() 함수]

          

          GetCommData(

          BSTR strTrCode,   // TR 이름

          BSTR strRecordName,   // 레코드이름

          long nIndex,      // TR반복부

          BSTR strItemName) // TR에서 얻어오려는 출력항목이름

          

          OnReceiveTRData()이벤트 함수가 호출될때 조회데이터를 얻어오는 함수입니다.

          이 함수는 반드시 OnReceiveTRData()이벤트 함수가 호출될때 그 안에서 사용해야 합니다.

          

          ------------------------------------------------------------------------------------------------------------------------------------

          

          [OPT10081 : 주식일봉차트조회요청예시]

          

          OnReceiveTrDataKhopenapictrl(...)

          {

            if(strRQName == _T("주식일봉차트"))

            {

              int nCnt = OpenAPI.GetRepeatCnt(sTrcode, strRQName);

              for (int nIdx = 0; nIdx < nCnt; nIdx++)

              {

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("종목코드"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("거래량"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("시가"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("고가"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("저가"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("현재가"));   strData.Trim();

              }

            }

          }

          

          ------------------------------------------------------------------------------------------------------------------------------------

          



          [GetCommData() 함수]

          

          GetCommData(

          BSTR strTrCode,   // TR 이름

          BSTR strRecordName,   // 레코드이름

          long nIndex,      // TR반복부

          BSTR strItemName) // TR에서 얻어오려는 출력항목이름

          

          OnReceiveTRData()이벤트 함수가 호출될때 조회데이터를 얻어오는 함수입니다.

          이 함수는 반드시 OnReceiveTRData()이벤트 함수가 호출될때 그 안에서 사용해야 합니다.

          

          ------------------------------------------------------------------------------------------------------------------------------------

          

          [OPT10081 : 주식일봉차트조회요청예시]

          

          OnReceiveTrDataKhopenapictrl(...)

          {

            if(strRQName == _T("주식일봉차트"))

            {

              int nCnt = OpenAPI.GetRepeatCnt(sTrcode, strRQName);

              for (int nIdx = 0; nIdx < nCnt; nIdx++)

              {

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("종목코드"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("거래량"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("시가"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("고가"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("저가"));   strData.Trim();

                strData = OpenAPI.GetCommData(sTrcode, strRQName, nIdx, _T("현재가"));   strData.Trim();

              }

            }

          }

          

          ------------------------------------------------------------------------------------------------------------------------------------

          



          [GetCommDataEx() 함수]

          

          GetCommDataEx(

          BSTR strTrCode,   // TR 이름

          BSTR strRecordName  // 레코드이름

          )

          

          조회 수신데이터 크기가 큰 차트데이터를 한번에 가져올 목적으로 만든 전용함수입니다.

          

          ------------------------------------------------------------------------------------------------------------------------------------

          

          [차트일봉데이터 예시]

          

          OnReceiveTrDataKhopenapictrl(...)

          {

            if(strRQName == _T("주식일봉차트"))

            {

              VARIANT   vTemp = OpenAPI.GetCommDataEx(strTrCode, strRQName);

              long lURows, lUCols;

              long nIndex[2]

              COleSafeArray saMatrix(vTemp);

              VARIANT vDummy;

              VariantInit(&vDummy);

              saMatrix.GetUBound(1, &lURows); // 데이터 전체갯수(데이터 반복횟수)

              saMatrix.GetUBound(2, &lUCols); // 출력항목갯수


              for(int nRow = 0; nRow <= lURows; nRow ++)

              {

                for(int nCol = 0; nCol <= lUCols; nCol ++)

                {

                  nIndex[0] = lURows;

                  nIndex[1] = lUCols;

                  saMatrix.GetElement(nIndex, &vDummy);

                  ::SysFreeString(vDummy.bstrVal);

                }

              }

              saMatrix.Clear();

              VariantClear(&vTemp);

            }

          }

          

          ------------------------------------------------------------------------------------------------------------------------------------

          

          


          [OnReceiveTrData() 이벤트]
          
          void OnReceiveTrData(
          BSTR sScrNo,       // 화면번호
          BSTR sRQName,      // 사용자 구분명
          BSTR sTrCode,      // TR이름
          BSTR sRecordName,  // 레코드 이름
          BSTR sPrevNext,    // 연속조회 유무를 판단하는 값 0: 연속(추가조회)데이터 없음, 1:연속(추가조회) 데이터 있음
          LONG nDataLength,  // 사용안함.
          BSTR sErrorCode,   // 사용안함.
          BSTR sMessage,     // 사용안함.
          BSTR sSplmMsg     // 사용안함.
          )
          
          조회요청 응답을 받거나 조회데이터를 수신했을때 호출됩니다.
          조회데이터는 이 이벤트 함수내부에서 GetCommData()함수를 이용해서 얻어올 수 있습니다.
          
          


          [OnReceiveRealData()이벤트]

          

          OnReceiveRealData(

          BSTR sCode,        // 종목코드

          BSTR sRealType,    // 리얼타입

          BSTR sRealData    // 실시간 데이터 전문

          )

          

          실시간 데이터를 수신할때마다 호출되며 SetRealReg()함수로 등록한 실시간 데이터도 이 이벤트 함수에 전달됩니다.

          GetCommRealData()함수를 이용해서 실시간 데이터를 얻을수 있습니다.

          

          


          [OnReceiveMsg()이벤트 함수]
          
          OnReceiveMsg(
          BSTR sScrNo,   // 화면번호
          BSTR sRQName,  // 사용자 구분명
          BSTR sTrCode,  // TR이름
          BSTR sMsg     // 서버에서 전달하는 메시지
          )
          
          서버통신 후 수신한 메시지를 알려줍니다.
          메시지에는 6자리 코드번호가 포함되는데 이 코드번호는 통보없이 수시로 변경될 수 있습니다. 따라서 주문이나 오류관련처리를
          이 코드번호로 분류하시면 안됩니다.
          


반응형
반응형


      [조회처리(조회요청)]

      키움OpenAPI가 제공하는 데이터중에서 원하는 데이터를 서버에 요청해서 가져오는 것을 말하는데 TR(Transaction)단위로 처리됩니다.

      TR이란 서버와 데이터를 주고받을때 정의한 약속된 규약이며 입력부분(Input)과 데이터를 수신하는 출력부분(Output)을 가지고 있습니다.

      입력부분은 요청하는 데이터에 따라 입력갯수(입력항목)가 달라지며 출력부분은 보통 데이터갯수(출력항목)가 여러개로 구성됩니다.

      

      출력부분은 출력항목이 한번씩만 전달되는 싱글데이터와 복수로 전달되는 멀티데이터가 있고 TR에 따라 싱글데이터(또는 멀티데이터)만

      있거나 둘다 있는 경우도 있습니다.

      키움OpenAPI가 제공하는 TR은 KOA Studio의 TR목록 탭에서 찾아볼 수 있고 각 TR별로 조회도 가능합니다.

      OPT10070 : 당일주요거래원요청 - 싱글데이터

      OPT10081 : 주식일봉차트조회요청 - 싱글 + 멀티데이터

      

      [조회제한]

      키움OpenAPI에서 시세조회는 1초당 5회로 제한되는데 관심종목 조회와 조건검색 조회 횟수가 합산됩니다.

      가령 1초 동안 시세조회2회 관심종목 1회 조건검색 2회 순서로 조회를 했다면 모두 합쳐서 5회이므로 모두 조회성공하겠지만 

      조건검색을 3회 조회하면 맨 마지막 조건검색 조회는 실패하게 됩니다.

      

      [연속조회]

      TR별로 한번에 전달할 수 있는 데이터 갯수가 정해져 있습니다. 그런데 이 갯수보다 데이터가 많을때 연속조회를 써서 모든 데이터를 

      조회하게 됩니다.연속조회는 모든 조회처리에 적용되는 공통사항임을 알려드립니다.

      연속조회하는 방법은 CommRqData()에서 인자값만 바꿔주면 비교적 쉽게 처리할 수 있습니다.

      

      아래처럼 설정해서 맨 처음 조회했을때 추가로 조회할 데이터가 있다면

      axKHOpenAPI.CommRqData("일별데이터조회", "OPT10086" , 0, "0001");

      OnReceiveTRData()이벤트 함수에서 5번째 인자값(sPrevNext)에 "2"가 전달됩니다.

      그렇다면 연속조회하실때는 CommRqData("일별데이터조회", "OPT10086" , 2, "0001"); 3번째 인자값을 2로 설정해서 조회하시면 됩니다.

      정리하면 다음과 같습니다.

      CommRqData("일별데이터조회", "OPT10086" , 0, "0001"); // 처음조회시 혹은 연속데이터가 없을때

      CommRqData("일별데이터조회", "OPT10086" , 2, "0001"); // 연속조회시

      

      [실시간 데이터]

      조회요청이 성공하면 관련 실시간 데이터를 서버에서 자동으로 OnReceiveRealData()이벤트 함수로 전달해줍니다.

      키움OpenAPI에서는 실시간 데이터가 전달될때 실시간 타입단위로 전달됩니다.

      여기서 실시간 타입이란 KOA Studio의 실시간 탭의 실시간 목록에서 Real Type에 주식시세에서 종목프로그램매매까지 나열되어 있는데

      이들 하나하나를 실시간 타입(Real Type)이라고 부릅니다.

      이 실시간 타입은 관련있는 FID를 모아놓은 것입니다.

      예를 들어 실시간 타입 "주식시세"가 전달된다고 하면 현재가 부터 하한가발생시간까지 전달되는 것이며 실시간 타입 "주식체결"가 

      전달될때는 체결시간부터 하한가발생시간까지가 전달되는 것입니다.


      



반응형
반응형


          [LONG CommConnect()]

          

          수동 로그인설정인 경우 로그인창을 출력해서 로그인을 시도하거나 자동로그인 설정인 경우 로그인창 출력없이 로그인을 시도합니다.



          [void CommTerminate()]

          

          더 이상 사용할 수 없는 함수입니다.



          [LONG GetConnectState()]

          

          현재 로그인 상태를 알려줍니다.

          리턴값 1:연결, 0:연결안됨

          



          [LONG GetLoginInfo()]

          

          로그인 후 사용할 수 있으며 인자값에 대응하는 정보를 얻을 수 있습니다.

          

          인자는 다음값을 사용할 수 있습니다.

          

          "ACCOUNT_CNT" : 보유계좌 수를 반환합니다.

          "ACCLIST" 또는 "ACCNO" : 구분자 ';'로 연결된 보유계좌 목록을 반환합니다.

          "USER_ID" : 사용자 ID를 반환합니다.

          "USER_NAME" : 사용자 이름을 반환합니다.

          "KEY_BSECGB" : 키보드 보안 해지여부를 반환합니다.(0 : 정상, 1 : 해지)

          "FIREW_SECGB" : 방화벽 설정여부를 반환합니다.(0 : 미설정, 1 : 설정, 2 : 해지)

          "GetServerGubun" : 접속서버 구분을 반환합니다.(0 : 모의투자, 나머지 : 실서버)

          

          리턴값

          인자값에 대응하는 정보를 얻을 수 있습니다.

          ------------------------------------------------------------------------------------------------------------------------------------

          

          [보유계좌 목록 예시]

          

          CString   strAcctList = GetLoginInfo("ACCLIST");

          여기서 strAcctList는 ';'로 분리한 보유계좌 목록임

          예) "3040525910;567890;3040526010"

          

          ------------------------------------------------------------------------------------------------------------------------------------

          

          



          [OnEventConnect()이벤트 함수]

          

          OnEventConnect(

          long nErrCode   // 로그인 상태를 전달하는데 자세한 내용은 아래 상세내용 참고

          )

          

          로그인 처리 이벤트 함수입니다. 성공이면 인자값 nErrCode가 0이며 에러는 다음과 같은 값이 전달됩니다.

 

          nErrCode별 상세내용

          -100 사용자 정보교환 실패

          -101 서버접속 실패

          -102 버전처리 실패

          



          [OnReceiveMsg()이벤트 함수]

          

          OnReceiveMsg(

          BSTR sScrNo,   // 화면번호

          BSTR sRQName,  // 사용자 구분명

          BSTR sTrCode,  // TR이름

          BSTR sMsg     // 서버에서 전달하는 메시지

          )

          

          서버통신 후 수신한 메시지를 알려줍니다.

          메시지에는 6자리 코드번호가 포함되는데 이 코드번호는 통보없이 수시로 변경될 수 있습니다. 따라서 주문이나 오류관련처리를

          이 코드번호로 분류하시면 안됩니다.

          



반응형
반응형


        [로그인 개요]

        키움OpenAPI에서 로그인기능은 단순히 CommConnect()함수를 호출하면 됩니다.

        로그인과 관련한 이벤트 함수는 OnEventConnect()이며 이 함수에 전달되는 인자값이 0이면 로그인 성공이며 나머지 경우엔 에러코드와 

        에러메시지 내용으로 원인을 파악 할 수 있습니다.

        로그인은 로그인창에서 운영서버(실제서버)와 모의투자 접속을 선택할 수있습니다.

        

        [수동 로그인]

        로그인창에 로그인ID와 비밀번호를 직접입력해서 로그인을 하는것을 말하며 기본적으로 이 로그인방법을 사용하게 됩니다.

        수동 로그인중에 버전처리내용이 있는 경우 버전처리도 함께 진행됩니다.

        

        [자동 로그인]

        로그인한 다음 계좌비밀번호 입력창을 통해 자동로그인을 설정할 수 있습니다.

        트레이 메뉴(모니터 오른쪽 하단)에서 "계좌비밀번호 저장" 메뉴를 선택하면 화면이 표시되는데 여기서 로그인 이후 사용할 계좌와

        계좌비밀번호를 입력하고 등록버튼을 눌러서 저장한 다음 계좌번호 아래에 있는 AUTO체크 박스를 선택하시면 자동 로그인을 위한

        설정이 모두 끝납니다.

        로그인 설정을 자동으로 하면 종목정보를 제외한 버전처리를 모두 무시하게 되며 버전처리를 다시 받으려면 AUTO버튼을 체크

        해지하고 프로그램을 재 실행 하시면 됩니다.

        

        [버전 처리]

        로그인중에는 버전처리가 함께 처리될 수 있는데 이때"버전처리를 받으시려면 현재 실행 중인 OpenAPI OCX를 탑재한 프로그램을 종료하신후

        확인버튼을 눌러주시기 바랍니다.

        그대로 진행시 버전처리가 정상적으로 실행되지 않습니다."안내 메시지창을 출력됩니다.

        이 메시지창에 소개된 대로 KOA Studio를 포함해서 실행중인 모든 OpenAPI프로그램을 먼저 종료해주시고 버전처리를 진행하셔야 합니다.

        그렇지 않으면 버전처리가 안되며 버전처리가 완료될때까지 같은 메시지 창이 출력됩니다.

        

        [모의투자]

        로그인 창에서 모의투자접속을 선택을 체크하면 모의투자로 접속하며 체크를 풀면 운영서버로 접속합니다.

        단 키움OpenAPI에서 제공하는 TR목록(서비스)과 실시간 목록등을 점검해볼 수 있는 KOA Studio 프로그램은 항상 모의투자로만 

        접속가능해서 모의투자접속 체크 해지가 않됩니다.

        모의투자 사용은 키움증권 홈페이지에서 사용신청을 해야 하며 한번 신청으로 2달간 사용할 수 있습니다. 

        받아야 하며 주식투자만 할지 선물옵션도 함께 사용할지를 선택할 수 있습니다.

        모의투자에서 주문이나 수수료는 운영서버와 차이가 있으므로 상세한 내용은 홈페이지 내용을 참고해 주세요.

        

        [기타]

        한 PC에 같은ID로 중복해서 운영서버에 로그인하면 마지막에 로그인한 경우만 유지되고 이전에 로그인한 프로그램은 자동으로 로그오프됩니다.

        그러나 다른 PC를 이용해서 중복로그인 하거나 같은 PC에 모의투자로 로그인하게 되면 모두 로그인 상태를 유지하게 됩니다.


        



반응형
반응형


        [통신동작]

        키움OpenAPI는 모두 비동식으로 동작하며 서버에 시세조회나 주문등을 요청하는 함수를 호출해서 그 결과가 수신되면

        각 요청에 대응하는 전용 이벤트가 호출되며 이 이벤트 함수 내부에서 데이터를 얻기위한 함수를 호출해서 데이터를 얻을 수 있습니다.

        수신데이터를 가져오려면 반드시 이벤트 함수 리턴전에 데이터 획득함수를 통해선 얻어와야 합니다. 

        이벤트 함수 호출전에 데이터 획득함수를 호출하거나 이벤트 함수가 리턴된 다음 호출하게 되면 혹은 임의로 이벤트 함수를 호출하면

        정상적인 데이터를 얻을수 없습니다. 지금까지 설정한 내용을 간단히 정리하면 다음과 같습니다.

        요청함수 ---> 이벤트 함수 ---> 데이터 획득 함수

        

        [화면번호]

        화면번호는 서버에 시세조회나 주문을 요청할때 이 요청을 구별하기 위한 키값으로 이해하시면 됩니다.

        0000(혹은 0)을 제외한 임의의 숫자를 사용하시면 되는데 갯수가 200개로 한정되어 있기 때문에 이 갯수를 넘지 않도록 관리하셔야 합니다.

        만약 사용하는 화면번호가 200개를 넘는 경우 조회결과나 주문결과에 다른 데이터가 섞이거나 원하지 않는 결과를 나타날 수 있습니다.


        [이벤트 함수]

        시세조회나 조건검색요청등 서버에 데이터를 요청해서 키움OpenAPI가 데이터를 수신하게 되면 사용자 프로그램에 특정함수를 자동으로 호출해서 알려줍니다.

        이렇게 어떤 조건이 맞으면 키움OpenAPI에서 자동으로 호출해서 알려주며 OnReceiveTRData(), OnEventConnect(), OnReceiveRealData()

        처럼 함수이름 앞에 On~이 붙어있어서 일반적인 함수와 구별됩니다.

        로그인, 시세조회, 주문등 각 요청별로 요청함수, 이벤트와 데이터획득함수가 분류되어 있으니 용도에 맞는 함수를 사용해야 합니다.

        



반응형
반응형

        [개요]

        키움OpenAPI(Application Programing Interface)는 

        국내주식상품과 코스피200 지수선물/옵션, 주식선물을 거래할 수 있는 거래/분석프로그램을 개발 할 수 있는 일종의 프로그램이며 

        COM형태로 제공합니다.

        

        주요기능은 시세데이터 조회와 실시간 데이터제공, 주문기능, 조건검색기능(주식만 가능)을 제공하며 모두 로그인 이후 가능합니다.

        



반응형

+ Recent posts