def stock_search(self, stock_category, is_continue):
        # 쿼리핸들러를 이용해 DevCenter에 접근하기
        pythoncom.CoInitialize()
        inst_xaquery_t8430 = win_client.DispatchWithEvents(
            "XA_DataSet.XAQuery", XAQueryEventHandlerT8430)
        pythoncom.CoUninitialize()

        # 가져올 데이터가 들어있는 res파일 생성해주기
        inst_xaquery_t8430.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t8430.res"
        # 서버에 request보낼 데이터 세팅하기
        inst_xaquery_t8430.SetFieldData(
            "t8430InBlock", "gubun", 0,
            stock_category)  # 주식 카테고리 선택(0 : 전체, 1: 코스피, 2: 코스닥)

        # 입력한 데이터로 서버에 request요청
        req_number = inst_xaquery_t8430.Request(is_continue)
        print("요청 성공 유무? : ", req_number)
        # 응답이 올 때까지 대기
        print("T8430 응답 대기 : ", XAQueryEventHandlerT8430.data_flag)
        result = self.watting(self, XAQueryEventHandlerT8430)
        print("T8430 응답 결과 : ", result)
        if result == TimeoutError:
            return result
        # 내보낼 데이터 목록
        stock_list = []

        # 전체 데이터가 몇개인지 체크
        count = inst_xaquery_t8430.GetBlockCount("t8430OutBlock")

        # 원하는 만큼 데이터 추출하기
        for i in range(count):
            hname = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "hname",
                                                    i)  # 종목명
            shcode = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "shcode",
                                                     i)  # 단축코드
            recprice = inst_xaquery_t8430.GetFieldData("t8430OutBlock",
                                                       "recprice", i)  # 기준가
            uplmtprice = inst_xaquery_t8430.GetFieldData(
                "t8430OutBlock", "uplmtprice", i)  # 상한가
            dnlmtprice = inst_xaquery_t8430.GetFieldData(
                "t8430OutBlock", "dnlmtprice", i)  # 하한가
            stock = {
                'hname': hname,
                'shcode': shcode,
                'recprice': recprice,
                'uplmtprice': uplmtprice,
                'dnlmtprice': dnlmtprice
            }
            # expcode = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "expcode", 0)   # 확장코드
            # etfgubun = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "etfgubun", 0)   # ETF구분
            # jnilclose = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "jnilclose", 0)   # 전일가
            # memedan = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "memedan", 0)   # 주문수량단위
            stock_list.append(stock)

        print(
            "종목 조회 완료되었습니다. ========================================================="
        )
        self.stock_lists = stock_list
        self.stock_lists_code = stock_category
        return stock_list
Exemplo n.º 2
0
 def __init__(self, path=None):
     self.outlook = client.DispatchWithEvents("Outlook.Application",
                                              OutlookHandler)
     if path:
         self.path = path
     else:
         self.path = os.getcwd()
Exemplo n.º 3
0
 def StartMeasurement(self, enable=True):
     if self.Measurement is not None:
         if self.MeasuremnetRuning == enable:
             self.log.info("Measurement is in correct state.")
         else:
             mEvent = comclient.DispatchWithEvents(self.Measurement,
                                                   MeasurementEvents)
             if enable:
                 self.Measurement.Start()
             else:
                 self.Measurement.Stop()
             rc = win32event.WaitForSingleObject(mEvent.measuermenStarted,
                                                 60000)
             self.MeasuremnetRuning = mEvent.measurementIsRunning
             if rc != win32event.WAIT_OBJECT_0:
                 self.log.error("Measurement %s time out." %
                                ("START" if enable else "STOP"))
             else:
                 if enable:
                     self.log.info("Measurement is started, waiting 5 "
                                   "seconds to have active bus stable "
                                   "state...")
                     time.sleep(5)
     else:
         self.log.error("Measurement object not initialized. Check whether "
                        "the CNOoe is runnig.")
Exemplo n.º 4
0
def query_XA_dataset_with_occurs(TR: str, field_data: dict, out_field_list: list, occurs: int = 0) -> list:
    IN_BLOCK = TR + "InBlock"
    OUT_BLOCK = TR + "OutBlock"
    OUT_BLOCK1 = TR + "OutBlock1"
    xa_query = winAPI.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEvents)
    xa_query.ResFileName = "C:\\eBEST\\xingAPI\\Res\\" + TR + ".res"

    for (field_name, input_value) in field_data.items():
        xa_query.SetFieldData(IN_BLOCK, field_name, occurs, input_value)

    request_to_server(xa_query)

    result = []
    while True:
        row_count = xa_query.GetBlockCount(OUT_BLOCK1)
        if row_count == 0:
            break

        for i in range(0, row_count):
            block_data = []
            for field_name in out_field_list:
                block_data.append(xa_query.GetFieldData(OUT_BLOCK1, field_name, i))
            result.append(block_data)

        next = xa_query.GetFieldData(OUT_BLOCK, "idx", 0)
        field_data["idx"] = next
        for (field_name, input_value) in field_data.items():
            xa_query.SetFieldData(IN_BLOCK, field_name, occurs, input_value)
        request_to_server(xa_query, True)

    return result
Exemplo n.º 5
0
class XAQueryEvents:
    query_state = STAND_BY

    def OnReceiveData(self, code):
        XAQueryEvents.query_state = RECEIVED

    def OnReceiveMessage(self, error, nMessageCode, szMessage):
        print(szMessage)


    SERVER_PORT = 20001
    SHOW_CERTIFICATE_ERROR_DIALOG = False
    REPEATED_DATA_QUERY = 1
    TRANSACTION_REQUEST_EXCESS = -21
    TODAY = datetime.datetime.now().strftime('%Y%m%d')

    if __name__ == "__main__":
        id = "아이디"
        password = "******"
        certificate_password = "******"
        xa_session = winAPI.DispatchWithEvents("XA_Session.XASession", XASessionEvents)
        if xa_session.IsConnected() is True:
            xa_session.DisconnectServer()

    # demo.ebestsec.co.kr => 모의투자
    # hts.ebestsec.co.kr => 실투자
    xa_session.ConnectServer("hts.ebestsec.co.kr", SERVER_PORT)
    xa_session.Login(id, password, certificate_password, SERVER_PORT, SHOW_CERTIFICATE_ERROR_DIALOG)

    while XASessionEvents.login_state is STAND_BY:
        pythoncom.PumpWaitingMessages()
        XASessionEvents.login_state = STAND_BY
Exemplo n.º 6
0
def query_XA_dataset_with_sequence(TR: str, field_data: dict, out_field_list: list, occurs: int = 0) -> list:
    IN_BLOCK = TR + "InBlock"
    OUT_BLOCK = TR + "OutBlock"
    OUT_BLOCK1 = TR + "OutBlock1"
    xa_query = winAPI.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEvents)
    xa_query.ResFileName = "C:\\eBEST\\xingAPI\\Res\\" + TR + ".res"

    for (field_name, input_value) in field_data.items():
        xa_query.SetFieldData(IN_BLOCK, field_name, occurs, input_value)

    request_to_server(xa_query)

    result = []
    while True:

        for idx in range(xa_query.GetBlockCount(OUT_BLOCK1)):
            block_data = []
            for field_name in out_field_list:
                block_data.append(xa_query.GetFieldData(OUT_BLOCK1, field_name, idx))
            result.append(block_data)

        cts_shcode = xa_query.GetFieldData(OUT_BLOCK, "cts_shcode", 0)
        if not cts_shcode:
            break

        field_data["cts_shcode"] = cts_shcode
        for (field_name, input_value) in field_data.items():
            xa_query.SetFieldData(IN_BLOCK, field_name, occurs, input_value)
        request_to_server(xa_query, True)

    return result
Exemplo n.º 7
0
    def __init__(self):
        self.pdx = _wc.DispatchWithEvents('PdCommATL.PdCommX.1', self.PdEvents)

        # Set data associated with callback functions
        self.data = self.pdx.data

        # Set default instrument as Vectrino
        self.pdx.DefaultInstrument = 6
Exemplo n.º 8
0
def connect_server():
    global xa_session
    print("\n\n서버연결 시도합니다. xa_session: ", xa_session,  "is_connected: ", is_connected(), "\n\n")
    print("접속상태 확인 : ", xa_session)
    pythoncom.CoInitialize()
    xa_session = win_client.DispatchWithEvents("XA_Session.XASession", XASessionEventHandler)
    pythoncom.CoUninitialize()
    
    return xa_session.ConnectServer(DEMO_SERVER, SERVER_PORT)
Exemplo n.º 9
0
def Connect():
    global NOTIFY, GATE
    #the below is required in order to establish the com-object links
    #that way you don't need to run makepy first
    gencache.EnsureModule('{A9595CA1-4980-11D5-ADF6-00508BAFB07F}', 0, 1, 0)

    GATE = gencache.EnsureDispatch('TradingTechnologies.TTAPI.TTAPI')
    NOTIFY = client.DispatchWithEvents('TTAPI.TTInstrNotify', InstrNotify)
    print('connected... ')
Exemplo n.º 10
0
def connect_server():
    global xa_session
    print('서버연결 시도합니다.\n     xa_session: ', xa_session, 'is_connected: ',
          is_connected())
    pythoncom.CoInitialize()
    xa_session = win_client.DispatchWithEvents("XA_Session.XASession",
                                               XASessionEventHandler)
    pythoncom.CoUninitialize()
    return xa_session.ConnectServer(DEMO_SERVER, SERVER_PORT)
Exemplo n.º 11
0
def stockTraddingState(acnt_no, input_pw, isu_no, ord_dt):
    # TODO Print 지우기
    if is_connected() == None:
        return ConnectionRefusedError

    # 쿼리핸들러를 이용해 DevCenter에 접근하기
    pythoncom.CoInitialize()
    inst_xaquery_cspaq13700 = win_client.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEventHandlerCSPAQ13700)
    pythoncom.CoUninitialize()

    # 가져올 데이터가 들어있는 res파일 생성해주기
    inst_xaquery_cspaq13700.ResFileName = "C:\\eBEST\\xingAPI\\Res\\CSPAQ13700.res"

    # input할 데이터 정리 => 그냥 입력되어 있는 내용은 전체 출력을 하겠다는 의미
    count = 500
    inst_xaquery_cspaq13700.SetFieldData("CSPAQ13700InBlock1", "RecCnt", 0, count)          # 레코드 개수
    inst_xaquery_cspaq13700.SetFieldData("CSPAQ13700InBlock1", "AcntNo", 0, acnt_no)       # 계좌번호
    inst_xaquery_cspaq13700.SetFieldData("CSPAQ13700InBlock1", "InptPwd", 0, input_pw)     # 입력비밀번호
    inst_xaquery_cspaq13700.SetFieldData("CSPAQ13700InBlock1", "OrdMktCode", 0, 00)       # 주문시장코드
    inst_xaquery_cspaq13700.SetFieldData("CSPAQ13700InBlock1", "BnsTpCode", 0, 0)         # 매매구분
    inst_xaquery_cspaq13700.SetFieldData("CSPAQ13700InBlock1", "IsuNo", 0, "A"+isu_no)     # 종목번호 => A는 주식을 의미
    inst_xaquery_cspaq13700.SetFieldData("CSPAQ13700InBlock1", "ExecYn", 0, 0)            # 체결여부
    inst_xaquery_cspaq13700.SetFieldData("CSPAQ13700InBlock1", "OrdDt", 0, ord_dt)         # 주문일 
    inst_xaquery_cspaq13700.SetFieldData("CSPAQ13700InBlock1", "SrtOrdNo2", 0, 000000000) # 시작주문번호 : 정순
    inst_xaquery_cspaq13700.SetFieldData("CSPAQ13700InBlock1", "BkseqTpCode", 0, 1)       # 역순구분 : 정순
    inst_xaquery_cspaq13700.SetFieldData("CSPAQ13700InBlock1", "OrdPtnCode", 0, 00)       # 주문유형코드
    
    # 입력한 데이터로 서버에 request요청
    inst_xaquery_cspaq13700.Request(0)

    # 응답이 올 때까지 대기
    print("CSPAQ13700 응답 대기 : ", XAQueryEventHandlerCSPAQ13700.data_flag)
    result = waiting(XAQueryEventHandlerCSPAQ13700)
    print("CSPAQ13700 응답 결과 : ", result)
    if result == TimeoutError:
        return TimeoutError

    # 원하는 데이터 받기
    tradding_list = []
    for i in range(count):
        stock_bns_tp_nm = inst_xaquery_cspaq13700.GetFieldData("CSPAQ13700OutBlock3", "BnsTpNm", i)      # 매매구분
        if stock_bns_tp_nm == "":
            break
        stock_ord_qty = inst_xaquery_cspaq13700.GetFieldData("CSPAQ13700OutBlock3", "OrdQty", i)        # 주문수량
        stock_ord_prc = inst_xaquery_cspaq13700.GetFieldData("CSPAQ13700OutBlock3", "OrdPrc", i)        # 주문가격
        stock_exec_qty = inst_xaquery_cspaq13700.GetFieldData("CSPAQ13700OutBlock3", "ExecQty", i)      # 체결수량
        stock_exec_prc = inst_xaquery_cspaq13700.GetFieldData("CSPAQ13700OutBlock3", "ExecPrc", i)      # 체결가격
        if stock_ord_qty == "":
            stock_ord_qty = 0
        if stock_exec_qty == "":
            stock_exec_qty = 0
        stock_non_exec_qty = int(stock_ord_qty) - int(stock_exec_qty)                                      # 미체결량
        data = {"stockBnsTpNm": stock_bns_tp_nm, "stockOrdQty": stock_ord_qty, "stockOrdPrc": stock_ord_prc, "stockExecQty": stock_exec_qty, "stockExecPrc": stock_exec_prc, "stockNonExecQty": stock_non_exec_qty}
        tradding_list.append(data)
    
    return tradding_list
 def connect_server(self):
     print('서버연결 시도합니다.\n     self.xa_session: ', self.xa_session,
           '\n     self.ebest_address: ', self.ebest_address,
           '\n     self.is_connected: ', self.is_connected())
     if self.xa_session is None or self.ebest_address is None or self.is_connected(
     ) is None:
         pythoncom.CoInitialize()
         self.xa_session = win_client.DispatchWithEvents(
             "XA_Session.XASession", XASessionEventHandler)
         pythoncom.CoUninitialize()
     return self.xa_session.ConnectServer(DEMO_SERVER, SERVER_PORT)
Exemplo n.º 13
0
def high_volume_stock_search():
    # TODO Print 지우기
    print("접속상태 확인 : ", xa_session)
    if is_connected() == None:
        return ConnectionRefusedError
    

    # 쿼리핸들러를 이용해 DevCenter에 접근하기
    pythoncom.CoInitialize()
    inst_xaquery_t1452 = win_client.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEventHandlerT1452)
    pythoncom.CoUninitialize()

    # 가져올 데이터가 들어있는 res파일 생성해주기
    inst_xaquery_t1452.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t1452.res"

    # input할 데이터 정리 => 그냥 입력되어 있는 내용은 전체 출력을 하겠다는 의미
    inst_xaquery_t1452.SetFieldData("t1452InBlock", "gubun", 0, "0")                  # 구분(전체)
    inst_xaquery_t1452.SetFieldData("t1452InBlock", "jnilgubun", 0, "1")              # 전일구분(당일)
    inst_xaquery_t1452.SetFieldData("t1452InBlock", "sdiff", 0, "1")                 # 시작등락율
    inst_xaquery_t1452.SetFieldData("t1452InBlock", "ediff", 0, "100000")                 # 종료등락율
    inst_xaquery_t1452.SetFieldData("t1452InBlock", "jc_num", 0, "000000000768")    # 대상 제외
    inst_xaquery_t1452.SetFieldData("t1452InBlock", "sprice", 0, "1")                # 시작 가격
    inst_xaquery_t1452.SetFieldData("t1452InBlock", "eprice", 0, "10000000000")                # 종료 가격
    inst_xaquery_t1452.SetFieldData("t1452InBlock", "volume", 0, "15000000")          # 거래량
    inst_xaquery_t1452.SetFieldData("t1452InBlock", "idx", 0, " ")                  # idx

    # 입력한 데이터로 서버에 request요청
    inst_xaquery_t1452.Request(0)
    print("이거 존재하니? : ", inst_xaquery_t1452)
    # 응답이 올 때까지 대기
    print("T1452 응답 대기 : ", XAQueryEventHandlerT1452.data_flag)
    result = waiting(XAQueryEventHandlerT1452)
    print("T1452 응답 결과 : ", result)
    if result == TimeoutError:
        return TimeoutError

    # 원하는 데이터 받기
    count = 500
    stock_lists = []
    for i in range(count):
        hname = inst_xaquery_t1452.GetFieldData("t1452OutBlock1", "hname", i)    
        if hname == "" or hname == None:
            break
        price = inst_xaquery_t1452.GetFieldData("t1452OutBlock1", "price", i)    
        shcode = inst_xaquery_t1452.GetFieldData("t1452OutBlock1", "shcode", i)
        volume = inst_xaquery_t1452.GetFieldData("t1452OutBlock1", "volume", i)
        jnilvolume = inst_xaquery_t1452.GetFieldData("t1452OutBlock1", "jnilvolume", i)
        stock_list = {"hname": hname, "price": price, "shcode": shcode, "volume": volume, "jnilvolume": jnilvolume}
        stock_lists.append(stock_list)
        print("거래량 두개 구분 volume : ", volume, ", \tjnilvolume : ", jnilvolume)

    print("사용될 거래량 상위 데이터 : ", stock_lists)
    return stock_lists
Exemplo n.º 14
0
def stock_item_search(stock_category, is_continue):

    # 쿼리핸들러를 이용해 DevCenter에 접근하기
    pythoncom.CoInitialize()
    inst_xaquery_t8430 = win_client.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEventHandlerT8430)
    pythoncom.CoUninitialize()

    # 가져올 데이터가 들어있는 res파일 생성해주기
    inst_xaquery_t8430.ResFileName = "C:\\eBEST\\xingAPI\\debug\\xingAPI_Program_Debug(2020.10.08)\\Res\\t8430.res"
    # 서버에 request보낼 데이터 세팅하기
    inst_xaquery_t8430.SetFieldData("t8430InBlock", "gubun", 0, stock_category) # 주식 카테고리 선택(0 : 전체, 1: 코스피, 2: 코스닥)
    
    # 입력한 데이터로 서버에 request요청
    print("\n\nrequest직전!")
    print("IsConnected : ", xa_session.IsConnected())
    print("GetAccountListCount : ", xa_session.GetAccountListCount())
    print("IsLoadAPI : ", xa_session.IsLoadAPI())
    print("GetServerName : ", xa_session.GetServerName())
    errorCode = xa_session.GetLastError()
    print("GetLastError : ", errorCode)
    print("GetErrorMessage : ", xa_session.GetErrorMessage(errorCode))
    
    req_number = inst_xaquery_t8430.Request(is_continue)
    print("\n\ndll 요청 성공 유무? : ", req_number)
    
    print("T8430 응답 대기 : ", XAQueryEventHandlerT8430.data_flag)
    result = waiting(XAQueryEventHandlerT8430)
    print("T8430 응답 결과 : ", result)
    if result == TimeoutError:
        return result
    # 내보낼 데이터 목록
    stock_list = []

    # 전체 데이터가 몇개인지 체크
    count = inst_xaquery_t8430.GetBlockCount("t8430OutBlock")

    # 원하는 만큼 데이터 추출하기
    for i in range(count):
        hname = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "hname", i)   # 종목명
        shcode = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "shcode", i)   # 단축코드
        recprice = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "recprice", i)   # 기준가
        uplmtprice = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "uplmtprice", i)   # 상한가
        dnlmtprice = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "dnlmtprice", i)   # 하한가
        stock = {"hname" : hname, "shcode" : shcode, "recprice" : recprice, "uplmtprice" : uplmtprice, "dnlmtprice" : dnlmtprice}
        # expcode = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "expcode", 0)   # 확장코드
        # etfgubun = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "etfgubun", 0)   # ETF구분
        # jnilclose = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "jnilclose", 0)   # 전일가
        # memedan = inst_xaquery_t8430.GetFieldData("t8430OutBlock", "memedan", 0)   # 주문수량단위
        stock_list.append(stock)

    print("종목 조회 완료되었습니다. =========================================================")
    XAQueryEventHandlerT8430.data_flag = False
    return stock_list
Exemplo n.º 15
0
def do_stock_tradding(acnt_no, input_pw, isu_no, ord_qty, ord_prc, bns_tp_code, ordprc_ptn_code):
    # TODO Print 지우기
    if is_connected() == None:
        return ConnectionRefusedError
    

    # 쿼리핸들러를 이용해 DevCenter에 접근하기
    pythoncom.CoInitialize()
    inst_xaquery_cspat00600 = win_client.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEventHandlerCSPAT00600)
    pythoncom.CoUninitialize()

    # 가져올 데이터가 들어있는 res파일 생성해주기
    inst_xaquery_cspat00600.ResFileName = "C:\\eBEST\\xingAPI\\Res\\CSPAT00600.res"

    # input할 데이터 정리
    inst_xaquery_cspat00600.SetFieldData("CSPAT00600InBlock1", "AcntNo", 0, acnt_no)
    inst_xaquery_cspat00600.SetFieldData("CSPAT00600InBlock1", "InptPwd", 0, input_pw)
    inst_xaquery_cspat00600.SetFieldData("CSPAT00600InBlock1", "IsuNo", 0, isu_no)
    inst_xaquery_cspat00600.SetFieldData("CSPAT00600InBlock1", "OrdQty", 0, ord_qty)
    inst_xaquery_cspat00600.SetFieldData("CSPAT00600InBlock1", "OrdPrc", 0, ord_prc)
    inst_xaquery_cspat00600.SetFieldData("CSPAT00600InBlock1", "BnsTpCode", 0, bns_tp_code)
    inst_xaquery_cspat00600.SetFieldData("CSPAT00600InBlock1", "OrdprcPtnCode", 0, ordprc_ptn_code)
    inst_xaquery_cspat00600.SetFieldData("CSPAT00600InBlock1", "MgntrnCode", 0, "000")
    inst_xaquery_cspat00600.SetFieldData("CSPAT00600InBlock1", "LoanDt", 0, "")
    inst_xaquery_cspat00600.SetFieldData("CSPAT00600InBlock1", "OrdCndiTpCode", 0, "0")
    
    # 입력한 데이터로 서버에 request요청
    inst_xaquery_cspat00600.Request(0)

    # 응답이 올 때까지 대기
    print("CSPAT00600 응답 대기 : ", XAQueryEventHandlerCSPAT00600.data_flag)
    result = waiting(XAQueryEventHandlerCSPAT00600)
    print("CSPAT00600 응답 결과 : ", result)
    if result == TimeoutError:
        return TimeoutError

    # 원하는 데이터 받기

    mbr_no = inst_xaquery_cspat00600.GetFieldData("CSPAT00600OutBlock1", "MbrNo", 0)
    acnt_no = inst_xaquery_cspat00600.GetFieldData("CSPAT00600OutBlock1", "AcntNo", 0)
    isu_no = inst_xaquery_cspat00600.GetFieldData("CSPAT00600OutBlock1", "IsuNo", 0)
    ord_prc = inst_xaquery_cspat00600.GetFieldData("CSPAT00600OutBlock1", "OrdPrc", 0)
    ord_qty = inst_xaquery_cspat00600.GetFieldData("CSPAT00600OutBlock1", "OrdQty", 0)
    bns_tp_code = inst_xaquery_cspat00600.GetFieldData("CSPAT00600OutBlock1", "BnsTpCode", 0)

    # TODO 
    # 추후 운용관리가 용의하도록 위 데이터들을 디비에 저장

    # 데이터 보내기
    data = {"MbrNo": mbr_no, "AcntNo": acnt_no, "IsuNo": isu_no, "OrdPrc": ord_prc, "OrdQty": ord_qty, "BnsTpCode": bns_tp_code}
    return data
Exemplo n.º 16
0
def query_XA_dataset(TR: str, field_data: dict, out_field_list: list, occurs: int = 0, block_type: int = 0) -> list:
    IN_BLOCK = TR + "InBlock"
    if block_type == 0:
        OUT_BLOCK = TR + "OutBlock"
    else:
        OUT_BLOCK = TR + "OutBlock1"
    xa_query = winAPI.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEvents)
    xa_query.ResFileName = "C:\\eBEST\\xingAPI\\Res\\" + TR + ".res"
    for (field_name, input_value) in field_data.items():
        xa_query.SetFieldData(IN_BLOCK, field_name, occurs, input_value)

    request_to_server(xa_query)

    result = []
    count = xa_query.GetBlockCount(OUT_BLOCK)
    for idx in range(count):
        block_data = []
        for field_name in out_field_list:
            block_data.append(xa_query.GetFieldData(OUT_BLOCK, field_name, idx))
        result.append(block_data)

    return result
Exemplo n.º 17
0
    def __init__(self, debug):
        if debug:
            return
        print('init')

        self.instXASession = winAPI.DispatchWithEvents("XA_Session.XASession",
                                                       XASessionEvents)
        if self.instXASession.IsConnected() is True:
            self.instXASession.DisconnectServer()

        # demo.ebestsec.co.kr => 모의투자
        # hts.ebestsec.co.kr => 실투자
        self.instXASession.ConnectServer("hts.ebestsec.co.kr", SERVER_PORT)
        self.instXASession.Login(id, password, certificate_password,
                                 SERVER_PORT, SHOW_CERTIFICATE_ERROR_DIALOG)

        while XASessionEvents.login_state is STAND_BY:
            pythoncom.PumpWaitingMessages()
        XASessionEvents.login_state = STAND_BY

        self.계좌 = []
        계좌수 = self.instXASession.GetAccountListCount()

        for i in range(계좌수):
            self.계좌.append(self.instXASession.GetAccountList(i))

        print(self.계좌)

        df0, df = self.t0424(계좌번호=self.계좌[0],
                             비밀번호=password,
                             단가구분='1',
                             체결구분='0',
                             단일가구분='0',
                             제비용포함여부='1',
                             CTS_종목번호='')
        print(df0)
        print(df)
Exemplo n.º 18
0
    def ActivateTestConfigTest(self, WaitForFinish=True, TimeOut=120 * 60):
        """
        TCname = name of the test
        WaitForFinish = True if we want to wait for test to finish
        Number of seconds for waiting = TimeOut
        """
        # self.CANoe.UI.Write.Output("ActivateSingleTest " + TCname)
        TestConfiguration = self.CANoe.Configuration.TestConfigurations.Item(1)

        if WaitForFinish:
            tEvents = comclient.DispatchWithEvents(
                TestConfiguration, CANoeTestConfigurationEvents)

            self.log.info("TestConfiguration Test START/PLAY")
            # starting CANoe tests made in vTestStudio...
            TestConfiguration.Start()
            # waiting for test to finish in CANoe
            rc = win32event.WaitForSingleObject(tEvents.testDone,
                                                TimeOut * 1000)
            if rc != win32event.WAIT_OBJECT_0:
                self.log.error("TEST TIME OUT!!!")
            # wait for report generation 5 sec should be enough
            rc = win32event.WaitForSingleObject(tEvents.reportDone, 5000)
            if rc != win32event.WAIT_OBJECT_0:
                self.log.error("REPORT NOT GENERATED!!!")

            self.ReportGenerated = tEvents.CTRInfo["success"]
            if self.ReportGenerated:
                tcReport, unused_ext = splitext(tEvents.CTRInfo["reportPath"])
                self.ReportPath = ("%s.xml" % tcReport)
            if _CANOE_API_DEBUG_:
                self.log.info("Test report --> %s" % self.ReportPath)
        else:
            self.log.info("TestConfiguration Test START/PLAY")
            # starting CANoe tests made in vTestStudio...
            TestConfiguration.Start()
Exemplo n.º 19
0
 def __init__(self, events_cls=IEEvents):
     self._ie = com.DispatchWithEvents("InternetExplorer.Application",
                                       IEEvents)
     self._evt = self._ie._obj_
     if hasattr(self._evt, '_init'):
         self._evt._init(self)
Exemplo n.º 20
0
		ReadyState = 1
	def OneError(self):
		ReadyState = 0
		global PDFCreator
		PDFCreator.cErrorDetail("Description")
		errNum = PDFCreator.cErrorDetail("Number")
		PDFCreator = None
		os._exit(errNum)

if len(sys.argv) <= 2:
	os._exit(-255)

# Initialize the driver

PDFCreator = com.Dispatch('PDFCreator.clsPDFCreator')
PDFCreatorEvents = com.DispatchWithEvents(PDFCreator, clsPDFCreatorEvents)
ProgramIsRunning = PDFCreator.cProgramIsRunning
PDFCreator.cStart("/NoProcessingAtStartup", 1)

options = PDFCreator.cOptions
oldOptions = PDFCreator.cOptions
options.UseAutosave = 1
options.UseAutosaveDirectory = 1
options.AutosaveFormat = 0                            # 0 = PDF
SetDefaultPrinter('PDFCreator')
PDFCreator.cClearCache
PDFCreator.cPrinterStop = 0

ifname = str(sys.argv[1])
ofname = str(sys.argv[2])
Exemplo n.º 21
0
def get_smartcom4_server():
    CoInitializeEx(COINIT_MULTITHREADED)
    clnt = client.DispatchWithEvents('SmartCOM4.StServer.1', StClientEvents)
    CoUninitialize()
    return clnt
Exemplo n.º 22
0
# TestEvents.py script
# Part of PDFCreator
# License: GPL
# Homepage: http://www.pdfforge.org/products/pdfcreator
# python 2.5, pywin32 2.5.1
# Version: 1.0.0.0
# Date: December, 24. 2007
# Author: Frank Heindörfer
# Comments: Test the events of the com interface of PDFCreator.

import win32com.client as com


class PDFCreatorEvents(object):
    def OneReady(self):
        print "Ready."

    def OneError(self):
        print "An error is occured!\r\n Error [" + \
        str(PDFCreator.cErrorDetail("Number")) + "]: " + \
        PDFCreator.cErrorDetail("Description")


PDFCreator = com.DispatchWithEvents('PDFCreator.clsPDFCreator',
                                    PDFCreatorEvents)
PDFCreator.cTestEvent("Ready")
PDFCreator.cTestEvent("Error")
PDFCreator.cTestEvent("Unknown")
PDFCreator.cClose
PDFCreator = None
Exemplo n.º 23
0
    def ActivateSingleTest(
            self,
            TCname,
            WaitForFinish=True,
            TimeOut=(120 * 60),  # default time-out 2h
            testEnvName="APHFlashReboot",
            restart_measurement_if_time_out=True):
        """
        This method activates single TestModule from selected test environment.
        If test environment is no passed as argument default test envronment
        name is used. Default time-ot is 2h because several test modules in
        default test environment can run for a while.
        TCname = name of the test module.
        WaitForFinish = True if we want to wait for test to finish
        TimeOut - time-out in seconds
        testEnvName - name of the test environment which holds test case module
        """
        nodeFound = 0
        verdict = -1  # timeout
        self.ReportPath = ""
        ProblematicTests = ""
        tstCnt = 0
        self.log.info("Running test %s.%s" % (testEnvName, TCname))
        canoeCfg = self.CANoe.Configuration
        tstEnvCnt = canoeCfg.TestSetup.TestEnvironments.Count + 1
        for i in range(1, tstEnvCnt):
            tstEnv = canoeCfg.TestSetup.TestEnvironments.Item(i)
            tEnvName = tstEnv.Name.encode("ascii")
            if tEnvName == testEnvName:
                tstCnt = tstEnv.Items.Count
                break
        else:
            self.log.error("CANoe test environment '%s' not found!" %
                           testEnvName)

        for j in range(tstCnt):
            selTest = tstEnv.Items(j + 1)
            Name = selTest.Name.encode("ascii")
            if Name == TCname:
                nodeFound = 1
                SelectedTest = comclient.CastTo(selTest, "ITSTestModule")
                self.ReportGenerated = False
                self.ReportPath = SelectedTest.Report.FullName
                if WaitForFinish:
                    tEvents = comclient.DispatchWithEvents(
                        SelectedTest, CANoeTestConfigurationEvents)

                    SelectedTest.Start()
                    # waiting for test to finish in CANoe
                    rc = win32event.WaitForSingleObject(
                        tEvents.testDone, TimeOut * 1000)
                    if rc != win32event.WAIT_OBJECT_0:
                        self.log.error("TEST TIME OUT!!!")
                        if restart_measurement_if_time_out:
                            # recovery procedure. if not executed the state of
                            # the canot test is unknown it could still run
                            self.log.warning("Restarting measurement to "
                                             "stop test!")
                            self.StartMeasurement(False)
                            self.StartMeasurement(True)

                    if SelectedTest.Report.Enabled:
                        # wait for report generation 5 sec should be enough
                        rc = win32event.WaitForSingleObject(
                            tEvents.reportDone, 5000)
                        if rc != win32event.WAIT_OBJECT_0:
                            self.log.error("REPORT NOT GENERATED!!!")
                    else:
                        if _CANOE_API_DEBUG_:
                            self.log.info("Test report not enabled")

                    self.ReportGenerated = tEvents.CTRInfo["success"]
                    if self.ReportGenerated:
                        tcReport, unused_ext = splitext(
                            tEvents.CTRInfo["reportPath"])
                        self.ReportPath = ("%s.xml" % tcReport)
                    if _CANOE_API_DEBUG_:
                        self.log.info("Test report --> %s" % self.ReportPath)

                    if (tEvents.finishReason == 0):
                        verdict = SelectedTest.Verdict
                        if verdict == 1:
                            self.log.info("Test passed!")
                        elif verdict == 2:
                            self.log.info("Test failed!")
                        else:
                            self.log.info("End of test! "
                                          "Verdict not available!")
                    elif (tEvents.finishReason == 1):
                        self.log.error("The test module was stopped by "
                                       "the user.")
                    elif (tEvents.finishReason == 2):
                        self.log.error("The test module was stopped by "
                                       "measurement stop.")
                    elif (tEvents.finishReason == -1):
                        self.log.error("CANoe test time out error!")
                else:
                    SelectedTest.Start()
                break

        if nodeFound == 0:
            self.log.error("%s.%s test not found!" % (testEnvName, TCname))
            ProblematicTests = ProblematicTests + TCname + ", "
        return verdict
Exemplo n.º 24
0
 def connect_server(self):
     self.__xa_session = win_client.DispatchWithEvents(
         "XA_Session.XASession", XASessionEventHandler)
     return self.__xa_session.ConnectServer(self.__ebest_address,
                                            self.__ebest_port)
Exemplo n.º 25
0
from collections.abc import Iterable
from PyFD.Setting_class_lib import *
from PyFD.FD_Geo import *


#Initialize the connection
class FdEventHandler:

    calculating = True

    def OnSolverEnd(self, solvertype):
        print("Solver {0} finished!".format(solvertype))
        FdEventHandler.calculating = False


connector = client.DispatchWithEvents("AklModeler.CommandControl",
                                      FdEventHandler)


def execute(command):
    connector.SendInstruction(command)


def select_obj(index=None):

    execute("obj unselect all")

    re_val = None

    if index is None:
        re_val = execute("obj select all")
Exemplo n.º 26
0
def user_data_search(account_num, account_pw, is_continue):
    print("접속상태 확인 : ", xa_session)
    if is_connected() == None:
        return ConnectionRefusedError
    

    # 쿼리핸들러를 이용해 DevCenter에 접근하기
    pythoncom.CoInitialize()
    inst_xaquery_t0424 = win_client.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEventHandlerT0424)
    pythoncom.CoUninitialize()

    # 가져올 데이터가 들어있는 res파일 생성해주기
    inst_xaquery_t0424.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t0424.res"
    
    # 서버에 request보낼 데이터 세팅하기
    # DevCenter1을 열어보면 InBlock에는 데이터를 넣어주어야하는 목록이 적혀있다. 여기에 데이터를 넣어줄 때는 SetFieldData를 쓴다.
    # 파라미터는 1. 블럭명, 2. 요소명, 3. 단일데이터인지 멀티데이터인지 구분(단일이면 0), 4. 집어넣을 값 
    inst_xaquery_t0424.SetFieldData("t0424InBlock", "accno", 0, account_num) # 계좌정보
    inst_xaquery_t0424.SetFieldData("t0424InBlock", "passwd", 0, account_pw)  # 비밀번호
    inst_xaquery_t0424.SetFieldData("t0424InBlock", "prcgb", 0, 1)          # 단가 구분
    inst_xaquery_t0424.SetFieldData("t0424InBlock", "chegb", 0, 0)          # 체결 구분
    inst_xaquery_t0424.SetFieldData("t0424InBlock", "dangb", 0, 0)          # 단일가 구분
    inst_xaquery_t0424.SetFieldData("t0424InBlock", "charge", 0, 1)          # 제비용 포함여부
    inst_xaquery_t0424.SetFieldData("t0424InBlock", "cts_expcode", 0, " ")          # CTS 종목번호

    # 입력한 데이터로 서버에 request요청
    inst_xaquery_t0424.Request(is_continue)
        
    # 응답이 올 때까지 대기
    print("T0424 응답 대기 : ", XAQueryEventHandlerT0424.data_flag)
    result = waiting(XAQueryEventHandlerT0424)
    print("T0424 응답 결과 : ", result)
    if result == TimeoutError:
        return result

    # Response된 응답을 이용해 원하는 데이터 추출하기
    estimated_net_worth = inst_xaquery_t0424.GetFieldData("t0424OutBlock", "sunamt", 0)                     # 추정 순자산
    user_property = estimated_net_worth

    # 보유종목을 담아줄 리스트
    retained_item_list = []

    # 전체 데이터 개수 체크
    retained_item_list_length = inst_xaquery_t0424.GetBlockCount("t0424OutBlock1")
    for i in range(retained_item_list_length):
        expcode = inst_xaquery_t0424.GetFieldData("t0424OutBlock1", "expcode", i)  # 종목번호
        if (expcode == "") :
            break
        hname = inst_xaquery_t0424.GetFieldData("t0424OutBlock1", "hname", i)      # 종목명
        price = inst_xaquery_t0424.GetFieldData("t0424OutBlock1", "price", i)      # 현재가
        mdposqt = inst_xaquery_t0424.GetFieldData("t0424OutBlock1", "mdposqt", i)  # 매도가능수량
        sunikrt = inst_xaquery_t0424.GetFieldData("t0424OutBlock1", "sunikrt", i)  # 수익률
        retained_item = {
            "expcode": expcode,
            "hname": hname,
            "price": price,
            "mdposqt": mdposqt,
            "sunikrt": sunikrt
        }
        retained_item_list.append(retained_item)
    
    print("유저 보유종목은? : ", retained_item_list)
    return [user_property, retained_item_list]
Exemplo n.º 27
0
def stock_chart_search(shcode, gubun, ncnt, qrycnt, sdate, edate, is_continue):
    # TODO Print 지우기
    if is_connected() == None:
        return ConnectionRefusedError
    

    # 쿼리핸들러를 이용해 DevCenter에 접근하기
    pythoncom.CoInitialize()
    inst_xaquery_t4201 = win_client.DispatchWithEvents("XA_DataSet.XAQuery", XAQueryEventHandlerT4201)
    pythoncom.CoUninitialize()
    
    # 가져올 데이터가 들어있는 res파일 생성해주기
    inst_xaquery_t4201.ResFileName = "C:\\eBEST\\xingAPI\\Res\\t4201.res"


    # 데이터 단일조회인지 연속
    if is_continue :
        # 서버에 request보낼 데이터 세팅하기
        # 종목명
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "shcode", 0, shcode)
        # 봉구분(0: 틱봉, 1:분봉, 2: 일봉, 3: 주봉, 4: 월봉)
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "gubun", 0, gubun)
        # 봉 단위(gubun이 1이면서 ncnt가 1이면 1분봉 단위로, 2면 2분봉 단위로 30이면 30분봉 단위로 보여줌)
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "ncnt", 0, ncnt)
        # 봉의 개수 (최대 몇개 노출시킬 것인지 결정 => 1 ~ 500까지만 유효)
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "qrycnt", 0, qrycnt)
        # 일자 기준 (0: 전체일자, 1: 오늘만 => 전체를 사용할 예정)
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "tdgb", 0, 0)
        # 시작일, 종료일(최소 일봉부터 이 내용이 적용됌 틱봉, 분봉은 이 내용이 적용되지 않으므로 주의 필요)
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "sdate", 0, sdate)
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "edate", 0, edate)
        # 아래는 기본설정을 이용하면 됌
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "cts_date", 0, " ")
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "cts_time", 0, " ")
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "cts_daygb", 0, " ")

        # 입력한 데이터로 서버에 request요청
        inst_xaquery_t4201.Request(True)


        # 응답이 올 때까지 대기
        print("T4201 응답 대기 : ", XAQueryEventHandlerT4201.data_flag)
        result = waiting(XAQueryEventHandlerT4201)
        print("T4201 응답 결과 : ", result)
        if result == TimeoutError:
            return TimeoutError
    else :
        # 서버에 request보낼 데이터 세팅하기
        # 종목명
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "shcode", 0, shcode)
        # 봉구분(0: 틱봉, 1:분봉, 2: 일봉, 3: 주봉, 4: 월봉)
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "gubun", 0, gubun)
        # 봉 단위(gubun이 1이면서 ncnt가 1이면 1분봉 단위로, 2면 2분봉 단위로 30이면 30분봉 단위로 보여줌)
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "ncnt", 0, ncnt)
        # 봉의 개수 (최대 몇개 노출시킬 것인지 결정 => 1 ~ 500까지만 유효)
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "qrycnt", 0, qrycnt)
        # 일자 기준 (0: 전체일자, 1: 오늘만 => 전체를 사용할 예정)
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "tdgb", 0, 0)
        # 시작일, 종료일(최소 일봉부터 이 내용이 적용됌 틱봉, 분봉은 이 내용이 적용되지 않으므로 주의 필요)
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "sdate", 0, sdate)
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "edate", 0, edate)
        # 아래는 기본설정을 이용하면 됌
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "cts_date", 0, " ")
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "cts_time", 0, " ")
        inst_xaquery_t4201.SetFieldData("t4201InBlock", "cts_daygb", 0, " ")

        # 입력한 데이터로 서버에 request요청
        inst_xaquery_t4201.Request(0)


        # 응답이 올 때까지 대기
        print("T4201 응답 대기 : ", XAQueryEventHandlerT4201.data_flag)
        result = waiting(XAQueryEventHandlerT4201)
        print("T4201 응답 결과 : ", result)
        if result == TimeoutError:
            return TimeoutError

    # 내보낼 데이터 목록
    stock_detail_list = []

    # 전체 데이터가 몇개인지 체크
    count = int(qrycnt)
    # 원하는 만큼 데이터 추출하기
    for i in range(count):
        stock_date = inst_xaquery_t4201.GetFieldData("t4201OutBlock1", "date", i)             # 날짜
        stock_time = inst_xaquery_t4201.GetFieldData("t4201OutBlock1", "time", i)             # 시간
        stock_open = inst_xaquery_t4201.GetFieldData("t4201OutBlock1", "open", i)             # 시가
        stock_high = inst_xaquery_t4201.GetFieldData("t4201OutBlock1", "high", i)             # 고가
        stock_low = inst_xaquery_t4201.GetFieldData("t4201OutBlock1", "low", i)               # 저가
        stock_close = inst_xaquery_t4201.GetFieldData("t4201OutBlock1", "close", i)           # 종가
        stock_jdiff_vol = inst_xaquery_t4201.GetFieldData("t4201OutBlock1", "jdiff_vol", i)   # 거래량
        # stock_value = inst_xaquery_t4201.GetFieldData("t4201OutBlock1", "value", i)           # 거래대금
        # stock_jongchk = inst_xaquery_t4201.GetFieldData("t4201OutBlock1", "jongchk", i)       # 수정구분
        # stock_rate = inst_xaquery_t4201.GetFieldData("t4201OutBlock1", "rate", i)             # 수정비율
        # stock_pricechk = inst_xaquery_t4201.GetFieldData("t4201OutBlock1", "pricechk", i)     # 수정주가반영항목
        # stock_ratevalue = inst_xaquery_t4201.GetFieldData("t4201OutBlock1", "ratevalue", i)   # 수정비율반영거래대금
        if stock_date == "" :
            break
        
        stock_detail = {"stock_date" : stock_date[0:4] + "-" + stock_date[4:6] + "-" + stock_date[6:8], "stock_time" : stock_time, "stock_low" : stock_low, "stock_open" : stock_open, "stock_close" : stock_close, "stock_high" : stock_high, "stock_jdiff_vol" : stock_jdiff_vol}
        stock_detail_list.append(stock_detail)


    return stock_detail_list