Package: xingapi
xingapi for python usersInstallationpip install xingapieBest xingAPI com guide이베스트 xingAPI 가이드(링크)Requirementspython 32bit environmentxingAPI installationDevCenter installationDownload res filesUsage1. Session1) 기본사용법importxingapiasxasession=xa.Session()session.login(id='아이디',pw='비밀번호',cert='공인인증비밀번호')2) account.txt를 활용하는법account.txt를 아래와같이 생성하여 현재터미널위치에 두고아이디
비밀번호
공인인증비밀번호아래스크립트를 실행importxingapiasxawithopen('account.txt')asf:id,pw,cert=f.read().split()session=xa.Session()session.login(id,pw,cert)2. Query 사용법1) 기본적인 사용예시삼성전자(005930)의 주식 분별 주가 조회('t1302)를 예로 들어보겠다query=xa.Query('t1302')data=query(shcode='005930',cnt=900)xa.Query 오브젝트 생성시 trcode를 입력
오브젝트를 다시__call__할 때, 필드이름과, 필드값을 keyword=value 페어로 전달한다
반환된 데이터는 { 블록이름1 : 블록데이터1, 블록이름2 : 블록데이터2 } 의dict형태로
반환되고, 블록데이터는pandas.DataFrame오브젝트이다.2) 한줄로도 가능df=xa.Query('t1302')(shcode='005930',cnt=900)['t1302OutBlock1']3) 조회/연속조회query=xa.Query('t1302')data1=query.call(shcode='005930',cnt=100).datadata2=query.nextcall(cts_time=data1['t1302OutBlock']['시간CTS'][0]).dataquery=xa.Query('t1302')data3=query.call(shcode='005930',cnt=100).datadata4=query.nextcall(shcode='005930',cnt=100,cts_time=cts_time=data1['t1302OutBlock']['시간CTS'][0]).dataDevCenter에서 TR 확인창을 사용하면 조회버튼/다음조회버튼이 있다xa.Query.call(**input_kwargs)함수는 조회버튼에 해당하며, 오브젝트 자신을 반환한다.xa.Query.nextcall(**input_kwargs)함수는 다음조회버튼에 해당하며, 역시 오브젝트 자신을 반환한다.nextcall(다음조회)의 경우data3처럼 call(조회)에 사용한 키값과 함께 사용해도 되지만,
call(조회)를 한 경우엔data2처럼 다음조회 에사용할 새로운 키값만 입력해도 동작한다.4) 연속조회 (자동 끝까지)query=xa.Query('t1302')data=query.call(shcode='005930',cnt=100).next(keypairs={'time':'cts_time'})위에서 사용한call(조회),nextcall(연속조회)를 조합한next함수를 이용하면query.isnext가 False가 될때까지 스스로 반복한다.
여기서 keypairs란 InBlock에 다시 넣어줄 필드이름과, OutBlock에서 가져올 필드 값의 필드이름을 이야기한다. 예를들어t1302의 경우 InBlock의timekey 에 OutBlock의cts_time의 value를 가져와야하므로 keypairs={'time':'cts_time'} 로전달한다.5) 연속조회 (자동 주어진 횟수만큼만)query=xa.Query('t1302')data=query.call(shcode='005930',cnt=100).next(keypairs={'time':'cts_time'},total=5)total을 명시해주면 다음조회의 반복회수를 몇번까지 할 것인지 정해준다.
과거 데이터가 양이 너무 많은 경우, dataframe객체 안에 담지 못하고 Out of memory가 발생
할 수 있으므로 그런경우 유용하게 사용가능하다.Real 사용법4. App 사용법로그인 방법app=xa.App('../account.txt')app=xa.App('아이디','패스워드','공인인증패스워드')app=xa.App(id='아이디',pw='패스워드',cert='공인인증패스워드')종목코드조회종목코드 전체(코스피+코스닥) 리스트로 받아오기app.종목코드.전체종목코드 코스피 리스트로 받아오기app.종목코드.코스피종목코드 투자주의 리스트로 받아오기app.종목코드.투자주의종목명으로 코드 검색하기app.종목코드.종목명으로검색('삼성전자')종목코드로 종목명 검색하기app.종목코드.종목코드로검색('005930')간편검색app.종목코드('삼성전자')app.종목코드('005930')종목정보조회일/월/주봉조회# 일봉 500개 조회app.종목정보('005930').일봉(500)# 주봉 100개 조회app.종목정보('005930').주봉(100)# 월봉 끝까지(가능한데이터) 전부 조회app.종목정보('005930').월봉()# 일봉 끝까지(데이터 허용되는 데까지) 조회일/월/주봉의 경우 request 한번에 300개씩 요청하므로 300개 단위로 끊어서 요청하면 효율적이다
일/월/주봉은 동작방식이 같지만 분봉은 동작방식이 다름분봉조회 (30초/1분/3분/5분/10분/30분/60분 가능)app.종목정보('005930').분봉()# 30초봉app.종목정보('005930').분봉(1)# 1분봉app.종목정보('삼성전자').분봉(2)# 3분봉app.종목정보('삼성전자').분봉(5)# 30분봉체결조회# 당일체결조회 (전일: 구분=1)app.종목정보('005930').체결(구분=0)# 9시30분에서 10시30분까지 데이터app.종목정보('005930').체결(종료시간='103000',개수=1000)호가조회 (30초/1분/3분/5분/10분/30분/60분 가능)app.종목정보('005930').호가()# 30초봉app.종목정보('005930').호가(1)# 1분봉app.종목정보('삼성전자').호가(2)# 3분봉app.종목정보('삼성전자').호가(5)# 30분봉테마app.종목정보('005930').테마# 30초봉신호조회app.종목정보('삼성전자').신호조회(30)매물대app.종목정보('삼성전자').매물대()# 당일app.종목정보('삼성전자').매물대(2)# 전일app.종목정보('삼성전자').매물대(3)# 당일+전일분별/일별 체결강도app.종목정보('삼성전자').분별체결강도()# 당일, 380개 이하app.종목정보('005930').일별체결강도(2500)# 2500개, 약 10년치틱차트/분차트# 오늘날짜조회app.종목정보('삼성전자').틱차트(N틱=1)# 오늘날짜 1틱차트app.종목정보('005930').분차트(N분=3)# 오늘날짜 3분차트# 기간조회app.종목정보('삼성전자').틱차트(N틱=10,시작일='20200503')# 10틱 '20200503'부터 오늘까지 조회app.종목정보('삼성전자').분차트(시작일='20200501',종료일='20200504')# 1분봉 시작일부터 종료일까지조회일차트/주차트/봉차트app.종목정보('삼성전자').일차트(시작일='20200503')# 일차트 '20200503'부터 오늘까지 조회app.종목정보('삼성전자').주차트(시작일='20190101',종료일='20191231')# 주차트 2019년도 조회app.종목정보('삼성전자').월차트(시작일='20000101',종료일='20191231')# 월차트 2000년부터 2019년까지 조회