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__)
class xing.logger.LoggerSetting

파일 로그 환경을 설정하는 클래스

LoggerSetting.LEVEL = "INFO"
LoggerSetting.FILE = "logfile.log"
BACK_COUNT = 10

로그 파일 유지 개수

FILE = 'xingplus.log'

로그 파일명

LEVEL = 'DEBUG'

로그 레벨

MAX_MBYTE = 10

로그 파일 하나의 최대 크기 (MByte)

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