티스토리 뷰

<한국투자증권의 OpenAPI를 활용한 주식 자동 주문 프로그램 만들기>

* '주식 일별 주문 체결 조회' 기능을 이용한 거래 데이터 가져오기

 

[Source Code]

    def InquiryDailyItems(self, paramIn): # 주식 일별 주문 체결 조회
        # paramIn = {'StartDate', 'EndDate'}

        startDate = paramIn.get('StartDate')
        if not startDate:
            sDate11 = bTime.CalDateTime({'Day': -50})
            startDate = bTime.GetDateString(sDate11)
        endDate = paramIn.get('EndDate')
        if not endDate:
            endDate = bTime.GetDateString()

        url1 = "/uapi/domestic-stock/v1/trading/inquire-daily-ccld"
        acceccURL = self.URL0 + url1
        header1 = {
            'content-type': "application/json; chartset=UTF-8",
            'authorization': f"Bearer {self.AccessToken}",
            #'authorization': self.AccessToken,
            'appkey': self.AppKey,
            'appsecret': self.AppSecret,
            'tr_id': "TTTC8001R", ## TTTC8001R(주식 일별 주문 체결 조회)
            'tr_cont': None,
            'custtype': "P",
            'mac_address': None,
            'hashkey': None
        }

        param1 = {
            'CANO': self.AccountNo, # Account No.(8 digits)
            'ACNT_PRDT_CD': cConstants.KIS_ACCOUNTSUB, # Account No. (2 digits)
            'INQR_STRT_DT': startDate, # 조회시작일자(8, YYYYMMDD)
            'INQR_END_DT': endDate, # 조회 종료 일자(8, YYYYMMDD)
            'SLL_BUY_DVSN_CD': "00", # 00(전체), 01(매도), 02(매수)
            'INQR_DVSN': "00", # OO(역순), 01(정순)
            'PDNO': "", # Item Code(6 digits), None(전체)
            'CCLD_DVSN': "00", # 00(전체), 01(체결), 02(미체결)
            'ORD_GNO_BRNO': "", # 영업점 코드
            'ODNO': "", # 주문번호
            'INQR_DVSN_3': "00", # 00(전체), 01(현금), 02(융자), 03(대출), 04(대주)
            'INQR_DVSN_1': None,
            'CTX_AREA_FK100': None,
            'CTX_AREA_NK100': None
        }

        #-res1 = requests.post(acceccURL, data=json.dumps(param1), headers=header1)
        res1 = requests.get(acceccURL, data=param1, headers=header1)
        #print(res1.text)
        try:
            inquiryResults = json.loads(res1.text)
        except:
            print("[?? in ] InquiryDailyItems()", )
            return;
        success2 = inquiryResults.get('rt_cd') # if "0": SUCCESS
        if success2!="0": 
            print("Inquiry FAILED")
            return;
        responseCode2 = inquiryResults.get('msg_cd')
        message2 = inquiryResults.get('msg1')
        output21 = inquiryResults.get('output1')
        outputs1 = json.loads(output21)
        # ord_dt(주문일자), ord_gno_brno(주문채번번호), odno(주문번호), ord_dvsn_name(주문구분명), sll_buy_dvsn_cd(매도매수구분코드), sll_buy_dvsn_cd_name(매도매수구분코드명)
        # pdno(상품번호), prdt_name(상품명), ord_qty(주문수량), ord_unpr(주문단가), ord_tmd(주문시각), tot_ccld_qty(총체결수량), avg_prvs(평균가)
        # cncl_yn(취소여부), tot_ccld_amt(총체결금액), loan_dt(대출일자), ord_dvsn_cd(주문구분코드), cncl_cfrm_qty(취소확인수량), rmn_qty(잔여수량)
        # rjct_qty(거부수량), ccld_cndt_name(체결조건명), infm_tmd(통보시각), ctac_tlno(연락전화번호), prdt_type_cd(상품유형코드), excg_dvsn_cd(거래소구분코드)
        output22 = inquiryResults.get('output2')
        outputs2 = json.loads(output22)
        # tot_ord_qty(총주문수량), tot_ccld_qty(총체결수량), pchs_avg_pric(매입평균금액), tot_ccld_amt(총체결금액), prsm_tlex_smtl(추정제비용합계)

        return inquiryResults
반응형