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
def __init__(self, path=None): self.outlook = client.DispatchWithEvents("Outlook.Application", OutlookHandler) if path: self.path = path else: self.path = os.getcwd()
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.")
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
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
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
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
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)
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... ')
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)
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)
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
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
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
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
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)
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()
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)
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])
def get_smartcom4_server(): CoInitializeEx(COINIT_MULTITHREADED) clnt = client.DispatchWithEvents('SmartCOM4.StServer.1', StClientEvents) CoUninitialize() return clnt
# 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
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
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)
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")
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]
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