티스토리 뷰

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

* 특정 종목에 대해 기간별 시세 데이터를 조회함.

* 해당 종목의 주가 흐름을 파악하여 당일 또는 미래 주가를 예측하는 데에 활용

 

 

[Source Code]

    def GetItemPrice_byPeriod(self, paramIn): # 국내 주식 기간별 시세
        # paramIn = {'ItemCode', 'StartDate', 'EndDate'}

        days0 = paramIn.get('Days')
        if not days0: days0 = -100
        else: days0 = -1*days0
        itemCode = paramIn.get('ItemCode')
        startDate = paramIn.get('StartDate')
        if not startDate:
            sDate11 = bTime.CalDateTime({'Day': days0})
            startDate = bTime.GetDateString(sDate11)
        endDate = paramIn.get('EndDate')
        if not endDate:
            endDate = bTime.GetDateString()

        url1 = "/uapi/domestic-stock/v1/quotations/inquire-daily-itemchartprice"
        acceccURL = self.URL0 + url1
        #'https://openapivts.koreainvestment.com:29443/uapi/domestic-stock/v1/quotations/inquire-daily-itemchartprice'

        header1 = {
            'Content-Type': "application/json; charset=UTF-8",
            'authorization': f"Bearer {self.AccessToken}",
            #'authorization': self.AccessToken,
            'appkey': self.AppKey,
            'appsecret': self.AppSecret,
            'tr_id': "FHKST03010100", ## TTTC8001R(주식 일별 주문 체결 조회)
            'custtype': "P",
        }

        param1 = {
            'FID_COND_MRKT_DIV_CODE': "J", # J(주식, ETF, EFN)
            'FID_INPUT_ISCD': itemCode,
            'FID_INPUT_DATE_1': startDate, # 시작일자
            'FID_INPUT_DATE_2': endDate, # 종료일자
            'FID_PERIOD_DIV_CODE': "D", # D(일봉), W(주봉), M(월봉), Y(년봉)
            'FID_ORG_ADJ_PRC': "1", # 0(수정주가), 1(원주가)
        }

        #res1 = requests.post(acceccURL, data=json.dumps(param1), headers=header1)
        res1 = requests.get(acceccURL, params=param1, headers=header1)
        #print(res1.text)
        try:
            inquiryResults = json.loads(res1.text)
        except:
            print("[?? in ] GetItemPrice_byDate()", )
            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')
        outputs1 = inquiryResults.get('output1')
        if not outputs1: return;
        # prdy_vrss, prdy_vrss_sign, prdy_ctrt, stck_prdy_clpr, acml_vol, acml_tr_pbmn, 
        # hts_kor_isnm, stck_prpr, stck_shrn_iscd, prdy_vol, stck_mxpr, stck_llam, stck_oprc, 
        # stck_hgpr, stck_lwpr, stck_prdy_oprc, stck_prdy_hgpr, stck_prdy_lwpr, askp
        # askp, prdy_vrss_vol, vol_tnrt, stck_fcam, lstn_stcn, cpfn, hts_avls, per, eps, pbr, itewhol_loan_rmnd_ratem
        outputs2 = inquiryResults.get('output2')
        # stck_bsop_date(주식 종가), stck_clpr(주식 종가), stck_oprc(주식 시가), stck_hgpr(주식 최고가), stck_lwpr(주식 최저가), 
        # acml_vol(누적 거래량), acml_tr_pbmn(락 구분 코드), flng_cls_code(락 구분 코드), prtt_rate(분할 비율), 
        # mod_yn(분할변경여부), prdy_vrss_sign(전일 대비 부호), prdy_vrss(전일 대비), revl_issu_reas(재평가사유코드)
        '''
        if outputs2:
            for output2 in outputs2:
                print(output2)
        '''

        return inquiryResults
반응형