API 적용 예제 (파이썬)
주식시간대별 체결(t1301) 조회
주식시간대별 체결(t1301)를 조회하는 예제입니다. 우선 기본 정보값을 확인합니다.
t1301의 PATH는 "stock/market-data"입니다. API가이드에서 확인하실 수 있습니다.
BASE_URL = "https://openapi.ls-sec.co.kr:8080" PATH = "stock/market-data" URL = f"{BASE_URL}/{PATH}" ACCESS_TOKEN = "APP_KEY, APP_SECRET를 이용하여 발급받은 접근토큰"
다음으로는 header를 구성합니다.
header = { "content-type":"application/json; charset=utf-8", "authorization": f"Bearer {ACCESS_TOKEN}", "tr_cd":"t1301", "tr_cont":"N", "tr_cont_key":"", }
다음으로 주식시간대별 체결(t1301)의 입력값을 셋팅합니다.
종목코드 shcode는 078020(LS증권), 특이거래량 cvolume는 0이상 조건으로 조회합니다.
body = { "t1301InBlock" : { "shcode" : "078020", "cvolume" : 0, "starttime" : "", "endtime" : "", "cts_time" : "" } }
모든 입력값을 셋팅후 조회 요청을 합니다.
requset = requests.post(URL, headers=header, data=json.dumps(body)) requset.json()
*결과값
t1301은 두개의 t1301OutBlock, t1301OutBlock1으로 나누어져 있으며, 결과값 및 메세지코드, 메세지를 을 확인할 수 있습니다.
{ "t1301OutBlock": { "cts_time":"" }, "t1301OutBlock1":[ { "chetime":"090143", "price":3570, "sign":"5", "change":40, "diff":"-1.11", "cvolume":39, "chdegree":"0.00", "volume":1872, "mdvolume":1766, "mdchecnt":10, "msvolume":0, "mschecnt":0, "revolume":-1766, "rechecnt":-10 }, { "chetime":"090143", "price":3580, "sign":"5", "change":30, "diff":"-0.83", "cvolume":1, "chdegree":"0.00", "volume":1833, "mdvolume":1727, "mdchecnt":9, "msvolume":0, "mschecnt":0, "revolume":-1727, "rechecnt":-9 } ], "rsp_cd":"00000", "rsp_msg":"정상적으로 조회가 완료되었습니다." }
주식현재가호가(t1101) 조회
주식현재가호가(t1101)를 조회하는 예제입니다. 우선 기본 정보값을 확인합니다.
tt1101의 PATH는 "stock/market-data"입니다. API가이드에서 확인하실 수 있습니다.
BASE_URL = "https://openapi.ls-sec.co.kr:8080" PATH = "stock/market-data" URL = f"{BASE_URL}/{PATH}" ACCESS_TOKEN = "APP_KEY, APP_SECRET를 이용하여 발급받은 접근토큰"
다음으로는 header를 구성합니다.
header = { "content-type":"application/json; charset=utf-8", "authorization": f"Bearer {ACCESS_TOKEN}", "tr_cd":"t1101, "tr_cont":"N", "tr_cont_key":"", }
다음으로 주식현재가호가(t1101)의 입력값을 셋팅합니다.
종목코드 shcode는 078020(LS증권), 특이거래량 cvolume는 0이상 조건으로 조회합니다.
body = { "t1101InBlock" : { "shcode" : "078020", } }
모든 입력값을 셋팅후 조회 요청을 합니다.
requset = requests.post(URL, headers=header, data=json.dumps(body)) requset.json()
*결과값
t1101은 한개의 t1101OutBlock으로, 결과값 및 메세지코드, 메세지를 을 확인할 수 있습니다.
{ "t1101OutBlock":{ "hname":"LS증권", "price":4545, "sign":"2", "change":10, "diff":"0.22", "volume":2702, "jnilclose":4535, "offerho1":4550, "bidho1":4540, "offerrem1":507, "bidrem1":430, "preoffercha1":0, "prebidcha1":0, "offerho2":4560, "bidho2":4535, "offerrem2":111, "bidrem2":120, "preoffercha2":0, "prebidcha2":0, "offerho3":4575, "bidho3":4530, "offerrem3":5, "bidrem3":169, "preoffercha3":0, "prebidcha3":0, "offerho4":4590, "bidho4":4525, "offerrem4":4, "bidrem4":101, "preoffercha4":0, "prebidcha4":0, "offerho5":4600, "bidho5":4520, "offerrem5":309, "bidrem5":609, "preoffercha5":0, "prebidcha5":0, "offerho6":4605, "bidho6":4515, "offerrem6":5756, "bidrem6":301, "preoffercha6":0, "prebidcha6":0, "offerho7":4610, "bidho7":4510, "offerrem7":466, "bidrem7":603, "preoffercha7":0, "prebidcha7":0, "offerho8":4620, "bidho8":4505, "offerrem8":27, "bidrem8":1045, "preoffercha8":0, "prebidcha8":0, "offerho9":4625, "bidho9":4500, "offerrem9":20, "bidrem9":179, "preoffercha9":0, "prebidcha9":0, "offerho10":4630, "bidho10":4495, "offerrem10":22, "bidrem10":299, "preoffercha10":0, "prebidcha10":0, "offer":7227, "bid":3856, "preoffercha":0, "prebidcha":0, "hotime":"09535583", "yeprice":0, "yevolume":0, "yesign":"3", "yechange":0, "yediff":"0.00", "tmoffer":0, "tmbid":0, "ho_status":"1", "shcode":"078020", "uplmtprice":5890, "dnlmtprice":3175, "open":4555, "high":4555, "low":4525 }, "rsp_cd":"00000", "rsp_msg":"정상적으로 조회가 완료되었습니다." }
주식 잔고2(t0424) 조회
주식 잔고조회2(t0424)를 조회하는 예제입니다. 우선 기본 정보값을 확인합니다.
t0424의 PATH는 "stock/accno"입니다. API가이드에서 확인하실 수 있습니다.
BASE_URL = "https://openapi.ls-sec.co.kr:8080" PATH = "stock/accno" URL = f"{BASE_URL}/{PATH}" ACCESS_TOKEN = "APP_KEY, APP_SECRET를 이용하여 발급받은 접근토큰"
다음으로는 header를 구성합니다.
header = { "content-type":"application/json; charset=utf-8", "authorization": f"Bearer {ACCESS_TOKEN}", "tr_cd":"t0424", "tr_cont":"N", "tr_cont_key":"", }
다음으로 주식 잔고조회2(t0424)의 입력값을 셋팅합니다.
- prcgb 단가구분 (1:평균단가,2:BEP단가),
- chegb 체결구분 (0:결제기준잔고,2:체결기준잔고 - 잔고가 0이아 닌 종목만 조회) ,
- dangb 단일가구분 (0:정규장, 1:시간외단일가),
- charge 제비용 포함여부 (0:미포함,1:포함),
- CTS_expcode CTS_종목번호 처음조회시 Space 로 조회, 연속조회시에 이전 조회한 OutBlock의 cts_expcode값으로 설정합니다.
body = { "t0424InBlock" : { "prcgb" : "", "chegb" : "", "dangb" : "", "charge" : "", "cts_expcode" : "" } }
모든 입력값을 셋팅후 조회 요청을 합니다.
requset = requests.post(URL, headers=header, data=json.dumps(body)) requset.json()
*결과값
t0424은 두개의 t0424OutBlock, t0424OutBlock1으로 나누어져 있으며, 결과값 및 메세지코드, 메세지를 을 확인할 수 있습니다.
{ "rsp_cd": "00000", "t0424OutBlock": { "dtsunik": 0, "cts_expcode": "", "mamt": 258325842, "sunamt1": 0, "tappamt": 203287854, "sunamt": 203287854, "tdtsunik": -55037988 }, "t0424OutBlock1": [ { "sininter": 0, "fee": 12842, "mamt": 67730600, "sinamt": 0, "mpmd": 0, "mdposqt": 1091, "jsat": 0, "janqty": 1091, "loandt": "", "sysprocseq": 0, "price": 16400, "janrt": "26.22", "jdat": 0, "jpms": 0, "hname": "일동제약", "appamt": 17853933, "sunikrt": "-73.64", "jonggb": "3", "msat": 0, "tax": 35784, "pamt": 62081, "jpmd": 0, "marketgb": "", "jangb": "", "dtsunik": -49886826, "expcode": "249420", "mdat": 0, "mpms": 0, "lastdt": "" }, { "sininter": 0, "fee": 3081, "mamt": 13365000, "sinamt": 0, "mpmd": 0, "mdposqt": 891, "jsat": 0, "janqty": 891, "loandt": "", "sysprocseq": 0, "price": 8060, "janrt": "5.17", "jdat": 0, "jpms": 0, "hname": "프롬바이오", "appamt": 7166021, "sunikrt": "-46.39", "jonggb": "2", "msat": 0, "tax": 14362, "pamt": 15000, "jpmd": 0, "marketgb": "", "jangb": "", "dtsunik": -6200983, "expcode": "377220", "mdat": 0, "mpms": 0, "lastdt": "" }, { "sininter": 0, "fee": 53322, "mamt": 177218079, "sinamt": 0, "mpmd": 0, "mdposqt": 0, "jsat": 0, "janqty": 177218079, "loandt": "", "sysprocseq": 0, "price": 0, "janrt": "68.61", "jdat": 0, "jpms": 0, "hname": "CMA RP", "appamt": 178267900, "sunikrt": "0.59", "jonggb": "9", "msat": 0, "tax": 0, "pamt": 0, "jpmd": 0, "marketgb": "", "jangb": "0", "dtsunik": 1049821, "expcode": "CMARP", "mdat": 0, "mpms": 0, "lastdt": "" } ], "rsp_msg": "조회가 완료되었습니다." }
현물계좌 잔고내역(CSPAQ12300) 조회
주현물계좌 잔고내역(CSPAQ12300)를 조회하는 예제입니다. 우선 기본 정보값을 확인합니다.
CSPAQ12300의 PATH는 "stock/accno"입니다. API가이드에서 확인하실 수 있습니다.
BASE_URL = "https://openapi.ls-sec.co.kr:8080" PATH = "stock/accno" URL = f"{BASE_URL}/{PATH}" ACCESS_TOKEN = "APP_KEY, APP_SECRET를 이용하여 발급받은 접근토큰"
다음으로는 header를 구성합니다.
header = { "content-type":"application/json; charset=utf-8", "authorization": f"Bearer {ACCESS_TOKEN}", "tr_cd":"CSPAQ12300", "tr_cont":"N", "tr_cont_key":"", }
다음으로 현물계좌 잔고내역 조회(CSPAQ12300)의 입력값을 셋팅합니다.
- BalCreTp 잔고생성구분,
- CmsnAppTpCode 수수료적용구분,
- D2balBaseQryTp D2잔고기준 조회구분,
- UprcTpCode 단가구분
body = { "CSPAQ12300InBlock1" : { "RecCnt" : 1, "BalCreTp" : "0", "CmsnAppTpCode" : "0", "D2balBaseQryTp" : "0", "UprcTpCode" : "0" } }
모든 입력값을 셋팅후 조회 요청을 합니다.
requset = requests.post(URL, headers=header, data=json.dumps(body)) requset.json()
*결과값
CSPAQ12300은 세개의 CSPAQ12300OutBlock1, CSPAQ12300OutBlock2, CSPAQ12300OutBlock3 으로 나누어져 있으며, 결과값 및 메세지코드, 메세지를 을 확인할 수 있습니다.
{ "rsp_cd": "00136", "CSPAQ12300OutBlock2": { "BuyAdjstAmtD2": 0, "KdqOrdAbleAmt": 0, "PrdayKdqMnyMgn": 0, "D2CmsnAmt": 0, "D1EvrTax": 0, "CrdayFrbrdMnyMgn": 0, "RepayRqrdAmtD2": 0, "D1CmsnAmt": 0, "CrdayCrbmkMnyMgn": 0, "BrnNm": "", "PrdayFrbrdMnyMgn": 0, "BalEvalAmt": 0, "EvalPnlSum": 0, "PrdayFrbrdSubstMgn": 0, "CrdayKdqSubstMgn": 0, "RepayRqrdAmtD1": 0, "CrdayKseCrdtMnyMgn": 0, "PrdayKdqSubstMgn": 0, "PrdayKseMnyMgn": 0, "D2EvrTax": 0, "MnyOrdAbleAmt": 0, "DpspdgQty": 0, "SellAdjstAmtD2": 0, "PrcAdjstAmt": 0, "EtclndAmt": 0, "Evrprc": 0, "CrdayKdqCrdtSubstMgn": 0, "PrdaySellExecAmt": 0, "MnyMgn": 0, "MgnRat100pctOrdAbleAmt": 0, "PrdayKseSubstMgn": 0, "OrdDt": "", "CrdayCrbmkSubstMgn": 0, "InvstPlAmt": 0, "D1SettPrergAmt": 0, "D2SettPrergAmt": 0, "SeOrdAbleAmt": 0, "Dps": 0, "DpsastTotamt": 0, "PrdayBuyExecAmt": 0, "D2Dps": 0, "CrdtPldgOrdAmt": 0, "CrdayKdqMnyMgn": 0, "SubstMgn": 0, "LoanAmt": 0, "PrdayKdqCrdtSubstMgn": 0, "PrdayKdqCrdtMnyMgn": 0, "InvstOrgAmt": 0, "PchsAmt": 0, "CrdayFrbrdSubstMgn": 0, "PrdayKseCrdtMnyMgn": 0, "CrdayBuyExecAmt": 0, "PrdayCrbmkMnyMgn": 0, "CrdayKdqCrdtMnyMgn": 0, "RcvblAmt": 0, "HtsOrdAbleAmt": 0, "PrdayCrbmkSubstMgn": 0, "CrdayKseCrdtSubstMgn": 0, "D1Dps": 0, "RecCnt": 1, "PnlRat": "0.000000", "PrdayKseCrdtSubstMgn": 0, "AcntNm": "", "MnyoutAbleAmt": 0, "CrdaySellExecAmt": 0, "CrdayKseMnyMgn": 0, "SubstAmt": 0, "RuseAmt": 0, "CrdayKseSubstMgn": 0 }, "CSPAQ12300OutBlock1": { "RecCnt": 1, "UprcTpCode": "0", "AcntNo": "00000000000", "D2balBaseQryTp": "0", "Pwd": "********", "CmsnAppTpCode": "0", "BalCreTp": "0" }, "CSPAQ12300OutBlock3": [ { "BuyUnercQty": 0, "SecBalPtnNm": "유가KSE", "BuyUnsttQty": 0, "SellUnercQty": 0, "UnercQty": 0, "SecBalPtnCode": "00", "PrdayBuyExecAmt": 0, "LoanDtlClssCode": "", "BalEvalAmt": 17892400, "BuyPrc": "0.0000", "SellOrdQty": 0, "AvrUprc": "62081.21", "BnsBaseBalQty": 1091, "SellUnsttQty": 0, "PchsAmt": 67730600, "PrdaySellExecPrc": "0.00", "PrdayCprc": "16400.00", "BalQty": 1091, "PrdaySellQty": 0, "EvalPnl": -49838200, "CrdayBuyExecAmt": 0, "PrdayBuyExecPrc": "0.00", "SellAbleQty": 1091, "OrdAbleAmt": 0, "MnyOrdAbleAmt": 0, "NowPrc": "16400.00", "CrdtAmt": 0, "SellPrc": "0.0000", "IsuNm": "일동제약", "CrdayBuyExecQty": 0, "DueDt": "", "PnlRat": "-0.735830", "PrdaySellExecAmt": 0, "IsuNo": "A249420", "CrdaySellExecQty": 0, "CrdaySellExecAmt": 0, "RegMktCode": "10", "LoanDt": "", "UnsttQty": 0, "PrdayBuyQty": 0, "SellPnlAmt": -49838200, "DpspdgLoanQty": 0 }, { "BuyUnercQty": 0, "SecBalPtnNm": "유가KOSDAQ", "BuyUnsttQty": 0, "SellUnercQty": 0, "UnercQty": 0, "SecBalPtnCode": "00", "PrdayBuyExecAmt": 0, "LoanDtlClssCode": "", "BalEvalAmt": 7181460, "BuyPrc": "0.0000", "SellOrdQty": 0, "AvrUprc": "15000.00", "BnsBaseBalQty": 891, "SellUnsttQty": 0, "PchsAmt": 13365000, "PrdaySellExecPrc": "0.00", "PrdayCprc": "8160.00", "BalQty": 891, "PrdaySellQty": 0, "EvalPnl": -6183540, "CrdayBuyExecAmt": 0, "PrdayBuyExecPrc": "0.00", "SellAbleQty": 891, "OrdAbleAmt": 0, "MnyOrdAbleAmt": 0, "NowPrc": "8060.00", "CrdtAmt": 0, "SellPrc": "0.0000", "IsuNm": "프롬바이오", "CrdayBuyExecQty": 0, "DueDt": "", "PnlRat": "-0.462667", "PrdaySellExecAmt": 0, "IsuNo": "A377220", "CrdaySellExecQty": 0, "CrdaySellExecAmt": 0, "RegMktCode": "20", "LoanDt": "", "UnsttQty": 0, "PrdayBuyQty": 0, "SellPnlAmt": -6183540, "DpspdgLoanQty": 0 }, { "BuyUnercQty": 0, "SecBalPtnNm": "", "BuyUnsttQty": 0, "SellUnercQty": 0, "UnercQty": 0, "SecBalPtnCode": "", "PrdayBuyExecAmt": 0, "LoanDtlClssCode": "", "BalEvalAmt": 178267900, "BuyPrc": "0.0000", "SellOrdQty": 0, "AvrUprc": "0.00", "BnsBaseBalQty": 177218079, "SellUnsttQty": 0, "PchsAmt": 177218079, "PrdaySellExecPrc": "0.00", "PrdayCprc": "0.00", "BalQty": 177218079, "PrdaySellQty": 0, "EvalPnl": 1049821, "CrdayBuyExecAmt": 0, "PrdayBuyExecPrc": "0.00", "SellAbleQty": 0, "OrdAbleAmt": 0, "MnyOrdAbleAmt": 0, "NowPrc": "0.00", "CrdtAmt": 0, "SellPrc": "0.0000", "IsuNm": "CMA RP", "CrdayBuyExecQty": 0, "DueDt": "", "PnlRat": "0.005924", "PrdaySellExecAmt": 0, "IsuNo": "", "CrdaySellExecQty": 0, "CrdaySellExecAmt": 0, "RegMktCode": "", "LoanDt": "", "UnsttQty": 0, "PrdayBuyQty": 0, "SellPnlAmt": 1049821, "DpspdgLoanQty": 0 } ], "rsp_msg": "조회가 완료되었습니다." }
실시간 데이터 (NWS) 뉴스 제목 패킷 조회
뉴스 제목 패킷 조회 (NWS)를 조회하는 예제입니다.
실시간 데이터의 프로토콜은 https가 아닌 웹소켓의 wss 프로토콜을 사용합니다.
포트는 9443포트 (모의투자 포트 29443)를 사용합니다.
BASE_URL = "wss://openapi.ls-sec.co.kr:9443/websocket"
먼저 웹 소켓 연결 (connect)을 한 후에,
아래와 같이 실시간 데이터의 header와 Body값을 구성하여 json방식으로 전송(send)합니다.
header
- token : ACCESS_TOKEN
- tr_type : TR타입 (1:계좌등록, 2계좌해제, 3:실시간 시세등록, 4:실시간 시세해제)
Body
- tr_cd : 실시간 TR 코드 (계좌등록/해제 일경우 필수값 아님)
- tr_key : 실시간 TR 코드 값 (계좌등록/해제 일경우 필수값 아님)
{ "header":{ "token":"ZWd1RDVtcXFwYyJ9.SkZaYiVVJEnr4GCVezr_NGusyt7MhK2oaOrsdhkSNp4dlxtr6DUqofyRLjeNw....", "tr_type":"3" }, "body":{ "tr_cd": "NWS", "tr_key":"NWS001" } }
모든 입력값을 셋팅후 조회 요청을 합니다.
# 웹 소켓 모듈을 선언한다. import websockets async def connect(): # 웹 소켓에 접속을 합니다. async with websockets.connect("wss://openapi.ls-sec.co.kr:9443/websocket") as websocket: str = '{header":{"token":"ZWd1RDVtcXFwYyJ9.SkZaYiV....","tr_type":"3"},"body":{"tr_cd": "NWS","tr_key":"NWS001"}}' # 웹 소켓 서버로 데이터를 전송합니다. await websocket.send(str); # 웹 소켓 서버로 부터 메시지가 오면 콘솔에 출력합니다. data = await websocket.recv(); print(data);
*결과값
{ "header": { "tr_cd": "NWS", "tr_key": "NWS001" }, "body": { "date": "20230626", "code": "", "realkey": "202306261936442300001999", "bodysize": "4200", "time": "193644", "id": "23", "title": "삼성·한투증권, PF 신용공여 2조5000억원대… 업계 최대" } }