xing-plus package¶
xing.xachartdata module¶
-
class
xing.xachartdata.
Chartdata
(shcode)¶ Bases:
object
차트 데이터를 추출 및 관리하고, 이를 통해 보조지표를 생성하는 클래스
param shcode: 종목 코드 type shcode: str chart = Chartdata("012510")
-
DAY
= 99997¶ Chartdata ‘일’에 대한 상수
-
MONTH
= 99999¶ Chartdata ‘월’에 대한 상수
-
WEEK
= 99998¶ Chartdata ‘주’에 대한 상수
-
clean
(type=None)¶ load와 process에 의해 처리된 데이터를 삭제한다.
param type: 차트의 종류 (예, 일,주,월,1분, 5분, ...). 기본값 None type type: str, int chart.clean() # 전체 데이터를 삭제한다. chart.clean(5) # 5분 차트 데이터를 삭제한다. chart.get(Chartdata.DAY) # 일 차트 데이터를 삭제한다.
-
get
(type=None)¶ load와 process에 의해 처리된 데이터를 반환한다.
param type: 차트의 종류 (예, 일,주,월,1분, 5분, ...). 기본값은 None type type: str, int return: 데이터를 반환한다. rtype: DataFrame, None chart.get() # 전체 데이터를 반환한다. chart.get(5) # 5분 차트 데이터를 반환한다. chart.get(Chartdata.DAY) # 일 차트 데이터를 반환한다.
-
load
(param)¶ 차트 데이터를 조회하여 누적한다.
Parameters: param (object { 조회할차트정보 : [시작일(yyyymmdd), 종료일(yyyymmdd)]}) – 조회할 차트 종류(분,일,월,주)와 조회할 기간 Returns: self Note
한번 load한 데이터는 load는 clean 하지 않는 이상, 기존 데이터를 갱신하지 않고, 존재하지 않는 기간만 추가한다.
chart = Chartdata("012510") chart.load({ Chartdata.DAY : [ startdate , enddate ] Chartdata.WEEK : [ startdate , enddate ] Chartdata.MONTH : [ startdate ] 1 : startdate })
-
process
(param)¶ load에 의해 누적된 데이터를 기준으로 보조 지표를 계산한다.
param param: 보조지표 정보를 전달한다. type param: object { “SMA” : [], “BBANDS” : [], “ATR” : number, “STOCH” : [], “MACD” : [], “RSI” : number } Warning
process는 load 이후에 호출되어야 의미가 있다.
chart.process({ "SMA" : [ 5, 10, 20, 60], # 이동평균선 "BBANDS" : [20, 2], #볼랜져 밴드 period, 승수 "ATR" : 14, #ATR 지표 period "STOCH" : [ 5, 3, 0], #스토케스틱 K period, D period, D type "MACD" : [12, 26, 9], # short, long, signal "RSI" : 14, # period })
-
xing.xaquery module¶
-
class
xing.xaquery.
Query
(type, callNext=True)¶ Bases:
object
TR 조회를 위한 XAQuery 확장 클래스
Parameters: - type (str) – TR 번호
- callNext (bool) – callNext가 False인 경우, 한번만 조회, True일 경우, 다음(occur)이 있으면 계속 조회 (기본값은 True)
query = Query("t8407") query = Query("t1101", False)
-
request
(input, output, isNext=False)¶ TR을 요청한다.
Parameters: - input (object { “InBlock” : { ... } }) – TR의 input block 정보
- output (object { “OutBlock” : DataFrame or tuple, “OutBlock1” : DataFrame or tuple} }) – TR의 output block 정보. output block을 여러개가 존재할 수 있으며, DataFrame타입일 경우, occur 데이터를 반환한다.
- isNext – 연속 조회를 사용하기 위한 내부 파라미터로서 직접 사용하지 않는다.
Returns: output으로 지정한 형태로 값이 채워져서 반환된다.
Return type: object
Note
input 키값이 “Service”인 경우, RequestService 로 요청할 수 있다. 예) 종목검색(씽API용), ChartIndex(차트지표데이터 조회) TR
Warning
절대 개발자가 isNext값을 지정하지 않는다.
Query("t8407").request({ "InBlock" : { "nrec" : 2, "shcode" : "".join(["005930","035420"]) } },{ "OutBlock1" : DataFrame(columns=("shcode","hname","price","open","high", "low","sign","change","diff","volume")) }) # 반환값 { # output에서 지정한 DataFrame에 row값이 채워진 DataFrame이 반환된다. "OutBlock1" : DataFrame } Query("t1101", False).request({ "InBlock" : { "shcode" : "005930" } },{ "OutBlock" : ("hname","price", "sign", "change", "diff", "volume", "jnilclose", "offerho1", "bidho1", "offerrem1", "bidrem1", "preoffercha1","prebidcha1", "offerho2", "bidho2", "offerrem2", "bidrem2", "preoffercha2","prebidcha2", "offerho3", "bidho3", "offerrem3", "bidrem3", "preoffercha3","prebidcha3", "offerho4", "bidho4", "offerrem4", "bidrem4", "preoffercha4","prebidcha4", "offerho5", "bidho5", "offerrem5", "bidrem5", "preoffercha5","prebidcha5", "offerho6", "bidho6", "offerrem6", "bidrem6", "preoffercha6","prebidcha6", "offerho7", "bidho7", "offerrem7", "bidrem7", "preoffercha7","prebidcha7", "offerho8", "bidho8", "offerrem8", "bidrem8", "preoffercha8","prebidcha8", "offerho9", "bidho9", "offerrem9", "bidrem9", "preoffercha9","prebidcha9", "offerho10", "bidho10", "offerrem10", "bidrem10", "preoffercha10","prebidcha10", "offer", "bid", "preoffercha", "prebidcha", "uplmtprice", "dnlmtprice", "open", "high", "low", "ho_status", "hotime" ) }) # 반환값 { # output에서 지정한 DataFrame에 row값이 채워진 DataFrame이 반환된다. "OutBlock" : DataFrame } Query("t1833").request({ "Service" : filepath }, { "OutBlock" : ("JongCnt",), "OutBlock1" : DataFrame(columns=("shcode", "hname", "close", "change","diff")) }) # 반환값 { # output에서 지정한 tuple은 키와 값이 있는 direction으로 변경되어 반환된다. "OutBlock" : { "JongCnt": ... }, # output에서 지정한 DataFrame에 row값이 채워진 DataFrame이 반환된다. "OutBlock1" : DataFrame }
-
static
sleep
()¶ 최소 TR 요청 시간까지 sleep
직전 TR 호출 경과시간이 1초 미만일 경우, 1초가 경과할때까지 sleep
Note
일반적으로는 1초에 하나의 TR만 전송 가능함. 연속조회인 경우에만 연속조회 실패를 방지하기 위하여 초당 요청 수가 임시로 5개로 확장된다.
Query.sleep()
xing.xareal module¶
-
class
xing.xareal.
Real
(type, outputStyle, queue)¶ Bases:
threading.Thread
실시간 TR을 모니터링하는 작업 클래스
Parameters: - type (str) – 실시간 TR 코드
- outputStyle (tuple) – 실시간 TR 반환 데이터 컬럼
- queue (Queue) – 실시간 TR 반환 데이터를 저장할 큐 객체
Returns: self
real = Real("SC1", ("eventid", "ordxctptncode", "ordmktcode", "ordptncode", "mgmtbrnno", "accno1","Isuno", "Isunm", "ordno", "orgordno", "execno", "ordqty", "ordprc", "execqty", "execprc", "ordtrxptncode", "secbalqty", "avrpchsprc", "pchsant"), Queue(100))
-
addTarget
(value=None, name='shcode')¶ 타겟을 등록한다. 여기서 타겟은 모니터링하는 대상이다.
Parameters: - value (None, str) – 모니터링할 대상. 기본값은 None
- name (str) – 모니터링할 대상의 속성. 기본값은 “shcode”
Returns: self
Note
- 타겟에 정보를 전달할 필요가 없는 ‘주문 체결’과 같은 작업도 addTarget를 호출하여 모니터링을 시작해야한다.
- ‘코스피 호가’는 타겟(종목코드(shcode))를 추가로 여러개 모니터링 할 수 있다.
real.addTarget() real.addTarget("005930") real.addTarget(["005930","035420"])
-
removeAllTargets
()¶ 모든 타겟의 모니터링을 제거한다.
real.removeAllTargets()
-
removeTarget
(key)¶ 특정 타겟의 모니터링을 제거한다.
Parameters: key (str) – 특정 타겟 real.removeAllTargets()
-
run
()¶ 실시간 TR을 모니터링 한다
real.run()
-
class
xing.xareal.
RealManager
¶ Bases:
object
실시간 TR을 모니터링하는 작업 클래스(Real)을 관리하는 클래스
manager = RealManager()
-
addTask
(type, outputStyle, maxQueue)¶ 실시간 작업을 추가한다
param type: 실시간 TR 코드 type type: str param outputStyle: 실시간 TR 반환 데이터 컬럼 type outputStyle: tuple param maxQueue: 실시간 TR 반환 데이터를 저장할 큐의 개수 type maxQueue: int return: Real # 주문 체결 manager.addTask("SC1", ("Isuno", "Isunm", "ordno", "orgordno", "eventid", "ordxctptncode", "ordmktcode", "ordptncode", "mgmtbrnno", "accno1", "execno", "ordqty", "ordprc", "execqty", "execprc", "ordtrxptncode", "secbalqty", "avrpchsprc", "pchsant"), 50).addTarget() # 코스피 호가 manager.addTask("H1_", ("shcode", "hottime","totofferrem", "totbidrem", "offerho1", "bidho1", "offerrem1", "bidrem1", "offerho2", "bidho2", "offerrem2", "bidrem2", "offerho3", "bidho3", "offerrem3", "bidrem3", "offerho4", "bidho4", "offerrem4", "bidrem4", "offerho5", "bidho5", "offerrem5", "bidrem5", "offerho6", "bidho6", "offerrem6", "bidrem6", "offerho7", "bidho7", "offerrem7", "bidrem7", "offerho8", "bidho8", "offerrem8", "bidrem8", "offerho9", "bidho9", "offerrem9", "bidrem9", "offerho10", "bidho10", "offerrem10", "bidrem10" ), 100).addTarget(["005930","035420"]) # 코스닥 호가 manager.addTask("HA_", ("shcode", "hottime","totofferrem", "totbidrem", "offerho1", "bidho1", "offerrem1", "bidrem1", "offerho2", "bidho2", "offerrem2", "bidrem2", "offerho3", "bidho3", "offerrem3", "bidrem3", "offerho4", "bidho4", "offerrem4", "bidrem4", "offerho5", "bidho5", "offerrem5", "bidrem5", "offerho6", "bidho6", "offerrem6", "bidrem6", "offerho7", "bidho7", "offerrem7", "bidrem7", "offerho8", "bidho8", "offerrem8", "bidrem8", "offerho9", "bidho9", "offerrem9", "bidrem9", "offerho10", "bidho10", "offerrem10", "bidrem10" ), 100).addTarget("168330")
-
getQueue
(type)¶ 실시간 작업의 큐를 얻는다.
param type: 실시간 TR 코드 type type: str return: 실시간 작업 객체의 큐 rtype: Queue manager.getQueue("SC1")
-
getTask
(type)¶ 실시간 작업을 얻는다.
param type: 실시간 TR 코드 type type: str return: 실시간 작업 객체 rtype: Real manager.getTask("SC1")
-
removeTask
(type)¶ 실시간 작업을 제거한다.
param type: 실시간 TR 코드 type type: str manager.removeTask("SC1")
-
run
(cb=None)¶ 실시간 TR별 큐의 정보를 추출하여 callback 함수로 전달한다.
param cb: 큐에서 추출된 정보를 받을 callback 함수 type type: def Note
callback 함수는 type(실시간 TR코드)와 data(실시간 TR의 outputStyle의 데이터)를 파라미터로 갖는다.
def callback(type, data): for i in range(len(data)): if type == "SC1": # ... elif type == "JIF": # ... else: # ... manager.run(callback)
-
xing.xasession module¶
-
class
xing.xasession.
Session
¶ Bases:
object
세션 관리를 XASession 확장 클래스
session = Session()
-
account
()¶ 계좌 정보를 반환한다.
Returns: 계좌 정보를 반환한다. Return type: object {no:”계좌번호”,name:”계좌이름”,detailName:”계좌상세이름”} session.account()
-
heartbeat
()¶ 서버에 시간을 조회해서 서버 연결여부를 확인한다.
Returns: 연결될 경우, time과 dt를 포함한 dictionary를 반환한다. 연결이 끊어졌을 경우, None을 반환한다 Return type: None, object - 서버와의 연결이 끊어졌으면 None
- 서버와의 연결이 유효하면 { time:”mmhhss”, dt:”yyyymmdd”}
session.heartbeat()
-
login
(server, user)¶ 서버 연결을 요청한다
Parameters: - server (object {address:”서버주소”, port:서버포트, type: 서버타입}) – 서버 정보
- user (object {id:”아이디”, passwd:”비밀번호”, account_passwd:”계좌비밀번호”, certificate_passwd:”공인인증서비밀번호”}) – 사용자 정보
Returns: 로그인이 성공하면 True, 실패하면 Fasle
Return type: bool
server = { "address" :"hts.ebestsec.co.kr", # 서버주소 "port" : 20001, # 서버포트 "type" : 0 # 서버 타입 } user = { "id" : "sculove", # 아이디 "passwd" : "12345678", # 비밀번호 "account_passwd" : "1234", # 계좌 비밀번호 "certificate_passwd" : "12345678" # 공인인증서 비밀번호 } session = Session() session.login(server, user)
-
logout
()¶ 서버와의 연결을 끊는다.
session.logout()
-
xing.xacom module¶
-
xing.xacom.
parseErrorCode
(code)¶ 에러코드 메시지
Parameters: code (str) – 에러 코드 Returns: 에러코드 메시지를 반환 parseErrorCode("00310") # 모의투자 조회가 완료되었습니다
-
xing.xacom.
parseJstatus
(jstatus)¶ 장 운영시간 파싱
Parameters: jstatus (str) – 장 운영시간 코드 Returns: 장 운영시간 내역을 반환 parseJstatus("66") # 사이드카 매수발동
Note
- 코스피로 장시간을 확인해야함.
- 선물/옵션 장마감 5분전, 1분전, 10초전은 들어오지 않음
-
xing.xacom.
parseMarket
(jangubun)¶ 장 구분
Parameters: jangubun (str) – 시장 구분 코드 Returns: 시장 내역을 반환 parseMarket("1") # 코스피
-
xing.xacom.
parseTR
(trCode)¶ 요청 TR 코드 파싱
Parameters: trCode (str) – TR 코드 Returns: TR코드 내역을 반환 parseTR("t0425") # 주식체결/미체결
xing.logger module¶
-
xing.logger.
Logger
(name)¶ 파일 로그 클래스
Parameters: name (str) – 로그 이름 log = Logger(__name__)
xing.util module¶
-
xing.util.
latestBusinessDay
()¶ 가장 최근 영업일을 yyyymmdd 형태로 반환
latestBusinessDay() # 20160104
-
xing.util.
timeType
(base=None)¶ 장 전,후 시간을 반환
Parameters: base (datetime) – 기준일시 Returns: 기준일시에 맞는 타입문자를 반환 BEFORE(장시작 전),SHOWTIME(장 운영시간),AFTER(장종료 후)
timeType() timeType(datetime.today())
-
xing.util.
today
()¶ 오늘 날자를 yyyymmdd 형태로 반환
today() # 20160101