반응형


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

          

          키움OpenAPI는 함수에서 리턴값으로 함수성공여부를 판단할 수 있는데 0이면 함수호출 성공, 0보다 작은 값은 에러를 나타냅니다.

          주요 에러코드는 -200번(시세과부하), -308번(주문전송 과부하)입니다.

          

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

              0         // 정상처리                                                                      

            -10        // 실패                                                                          

          -100        // 사용자정보교환 실패                                                           

          -101        // 서버 접속 실패                                                                

          -102        // 버전처리 실패                                                                 

          -103        // 개인방화벽 실패                                                               

          -104        // 메모리 보호실패                                                               

          -105        // 함수입력값 오류                                                               

          -106        // 통신연결 종료                                                                 

                                                                                                    

          -200        // 시세조회 과부하                                                               

          -201        // 전문작성 초기화 실패.                                                         

          -202        // 전문작성 입력값 오류.                                                         

          -203        // 데이터 없음.                                                                  

          -204        // 조회가능한 종목수 초과. 한번에 조회 가능한 종목개수는 최대 100종목.           

          -205        // 데이터 수신 실패                                                              

          -206        // 조회가능한 FID수 초과. 한번에 조회 가능한 FID개수는 최대 100개.               

          -207        // 실시간 해제오류                                                               

                                                                                                    

          -300        // 입력값 오류                                                                   

          -301        // 계좌비밀번호 없음.                                                            

          -302        // 타인계좌 사용오류.                                                            

          -303        // 주문가격이 20억원을 초과.                                                     

          -304        // 주문가격이 50억원을 초과.                                                     

          -305        // 주문수량이 총발행주수의 1% 초과오류.                                          

          -306        // 주문수량은 총발행주수의 3% 초과오류.                                          

          -307        // 주문전송 실패                                                                 

          -308        // 주문전송 과부하                                                               

          -309        // 주문수량 300계약 초과.                                                        

          -310        // 주문수량 500계약 초과.                                                        

          -340        // 계좌정보 없음.                                                                

          -500        // 종목코드 없음.                                                                


          



반응형
반응형


          [KOA_Functions() 함수]

          

          KOA_Functions(

          BSTR sFunctionName,   // 함수이름 혹은 기능이름

          BSTR sParam   // 함수 매개변수

          ))

          

          KOA_Function() 함수는 OpenAPI기본 기능외에 기능을 사용하기 쉽도록 만든 함수이며 두 개 인자값을 사용합니다. 이 함수가 

          제공하는 기능과 필요한 인자값은 공지를 통해 제공할 예정입니다.

          

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

          

          [KOA_Functions() 함수 사용예시]

          OpenAPI.KOA_Functions(_T("ShowAccountWindow"), _T(""));// 계좌비밀번호 설정을 출력한다.

          

          OpenAPI.KOA_Functions(_T("GetServerGubun"), _T(""));// 접속서버 구분을 알려준다. 1 : 모의투자 접속, 나머지 : 실서버 접속 

          

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

          



반응형
반응형


          [GetCodeListByMarket() 함수]

          

          GetCodeListByMarket(

          BSTR sMarket    // 시장구분값

          )

          

          국내 주식 시장별 종목코드를 ';'로 구분해서 전달합니다. 만일 시장구분값이 NULL이면 전체 시장코드를 전달합니다.

          로그인 한 후에 사용할 수 있는 함수입니다.

          

          [시장구분값]

          0 : 장내

          10 : 코스닥

          3 : ELW

          8 : ETF

          50 : KONEX

          4 :  뮤추얼펀드

          5 : 신주인수권

          6 : 리츠

          9 : 하이얼펀드

          30 : K-OTC

          

          



          [GetMasterCodeName() 함수]

          

          GetMasterCodeName(

          BSTR strCode    // 종목코드

          )

          

          종목코드에 해당하는 종목명을 전달합니다.

          로그인 한 후에 사용할 수 있는 함수입니다.

          



          [GetMasterListedStockCnt() 함수]

          

          GetMasterListedStockCnt(

          BSTR strCode  // 종목코드

          )

          

          입력한 종목코드에 해당하는 종목 상장주식수를 전달합니다.

          로그인 한 후에 사용할 수 있는 함수입니다.

          



          [GetMasterConstruction() 함수]

          

          GetMasterConstruction(

          BSTR strCode  // 종목코드

          }

          

          입력한 종목코드에 해당하는 종목의 감리구분(정상, 투자주의, 투자경고, 투자위험, 투자주의환기종목)을 전달합니다.

          로그인 한 후에 사용할 수 있는 함수입니다.

          



          [GetMasterListedStockDate() 함수]

          

          GetMasterListedStockDate(

          BSTR strCode    // 종목코드

          )

          

          입력한 종목의 상장일을 전달합니다.

          로그인 한 후에 사용할 수 있는 함수입니다.

          

          



          [GetMasterLastPrice() 함수]

          

          GetMasterLastPrice(

          BSTR strCode    // 종목코드

          )

          

          입력한 종목의 전일가를 전달합니다.

          로그인 한 후에 사용할 수 있는 함수입니다.

          



          [GetMasterStockState() 함수]

          

          GetMasterStockState(

          BSTR strCode  // 종목코드

          )

          

          입력한 종목의 증거금 비율, 거래정지, 관리종목, 감리종목, 투자융의종목, 담보대출, 액면분할, 신용가능 여부를 전달합니다.

          로그인 한 후에 사용할 수 있는 함수입니다.

          



          [GetFutureList() 함수]

          

          지수선물 종목코드 리스트를 ';'로 구분해서 전달합니다.

          로그인 한 후에 사용할 수 있는 함수입니다.

          



          [GetActPriceList() 함수]

          

          지수옵션 행사가에 100을 곱해서 소수점이 없는 값을 ';'로 구분해서 전달합니다.

          로그인 한 후에 사용할 수 있는 함수입니다.

          

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

          

          [지수옵션 행사가 사용예시]

          CString strActPriceList(OpenAPI.GetActPriceList());

          "19000;19250;19500;19750;20000;20250;20500;20750;21000;21250;21500;21750;..."

          

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

          



          [GetMonthList() 함수]

          

          지수옵션 월물정보를 ';'로 구분해서 전달하는데 순서는 콜 11월물 ~ 콜 최근월물 풋 최근월물 ~ 풋 최근월물가 됩니다.

          로그인 한 후에 사용할 수 있는 함수입니다.

          

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

          

          [지수옵션 월물조회 사용예시]

          CString strMonthList(OpenAPI.GetMonthList());

          "201812;201806;201712;201706;201703;201612;201611;201610;201609;201608;201607;..."

          

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

          



          [GetOptionCode() 함수]

          

          GetOptionCode(

          BSTR strActPrice,   // 소수점을 포함한 행사가

          int nCp,    // 콜풋구분값, 콜:2, 풋:3

          BSTR strMonth   // 6자리 월물

          )

          

          인자로 지정한 지수옵션 코드를 전달합니다.

          로그인 한 후에 사용할 수 있는 함수입니다.

          

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

          

          [지수옵션 코드 사용예시]

          

          CString strOptCode = OpenAPI.GetOptionCode(_T("247.50"), 2, _T("201607"));

          

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

          



          [GetOptionATM() 함수]

          

          지수옵션 소수점을 제거한 ATM값을 전달합니다. 예를들어 ATM값이 247.50 인 경우 24750이 전달됩니다.

          로그인 한 후에 사용할 수 있는 함수입니다.

          



반응형
반응형


          [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자리 코드번호가 포함되는데 이 코드번호는 통보없이 수시로 변경될 수 있습니다. 따라서 주문이나 오류관련처리를

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

          



반응형

+ Recent posts