def __init__(self): self.isSB = False # 실시간 처리 ##################################################################### # data self.stkCurData = CpData.StkCurData() self.stkTickData = CpData.StkTickData() # 주문 현재가/10차 호가 저장 self.strtgyData = StrtgyData() self.strtgyDataT = StrtgyData() self.stkBlncData = StkBlncData() ############################################################################### # 주문결과 self.stkOdrRsltData = StkOdrRsltData() ##################################################################### # object self.objOdr = CpOrder() self.objSBcur = CpData.CpSBStockCur() self.objSBbid = CpData.CpSBStockBid() self.objCurBid = CpData.CpStockCurBid() self.objCurBid2 = CpData.CpStockCurBid2() self.objDB = CpDB.CpDB() ##################################################################### # 잔고조회 / 미체결조회 self.objBlnc = Cp6033() self.objUnCon = Cp5339()
def __init__(self): super().__init__() # plus 상태 체크 if com.InitPlusCheck() == False: exit() if com.InitTradeInit() == False: exit() ##################################################################### # account info self.acc_no = com.g_objCpTrade.AccountNumber[0] # 계좌번호 self.acc_tp = com.g_objCpTrade.GoodsList(self.acc_no, 1) # 주식상품 구분 ##################################################################### # stock object self.stkCurData = CpData.StkCurData() self.stkTickData = CpData.StkTickData() # 주문 현재가/10차 호가 저장 self.objSBCur = CpData.CpSBStockCur() self.objSBid = CpData.CpSBStockBid() ##################################################################### # 시세종목 #self.codelist = ['A05930', 'A151860'] self.codelist = ['A151860'] ##################################################################### # logger self.logger = logging.getLogger("my_setting") self.logger = LoggerAdapter(CpDataWindow.__name__, self.logger) self.logger.debug(f'CpDataWindow Start') ##################################################################### # db object self.objDB = CpDB.CpDB() ##################################################################### # 이동평균 self.cntTick = 0 self.stkCur = [] self.futCur = [] self.stkShortOdrTP = 'N' self.stkLongOdrTP = 'N' self.setWindowTitle(sys.argv[0]) self.setGeometry(300, 300, 300, 700) nH = 20 btnBuy = QPushButton("종목 분 데이터 조회", self) btnBuy.move(20, nH) # btnBuy.resize(200,30) btnBuy.clicked.connect(self.btnBuy_clicked) nH += 50 btnExit = QPushButton("종료", self) btnExit.move(20, nH) # btnExit.resize(200,30) btnExit.clicked.connect(self.btnExit_clicked) nH += 50 btnMst = QPushButton("기본정보", self) btnMst.move(20, nH) # btnExit.resize(200,30) btnMst.clicked.connect(self.btnMst_clicked) nH += 50 btnInv = QPushButton("투자자종합", self) btnInv.move(20, nH) btnInv.clicked.connect(self.btnInv_clicked)
def __init__(self): super().__init__() pythoncom.CoInitialize() self.odrExec0 = CpOdr.CpOrderExec() self.odrExec1 = CpOdr.CpOrderExec() self.odrExec2 = CpOdr.CpOrderExec() self.odrExec3 = CpOdr.CpOrderExec() # plus 상태 체크 if com.InitPlusCheck() == False: exit() if com.InitTradeInit() == False: exit() self.acc_no = com.g_objCpTrade.AccountNumber[0] # 계좌번호 self.acc_tp = com.g_objCpTrade.GoodsList(self.acc_no, 1) # 주식상품 구분 ##################################################################### # logger self.logger = logging.getLogger("my_setting") self.logger = LoggerAdapter(CpOdrWindow.__name__, self.logger) self.logger.debug(f'CpOdrWindow Start {self.acc_no} {self.acc_tp}') ##################################################################### # 전략, 체결 self.strtgyData = CpOdr.StrtgyData() ##################################################################### # 체결 data class self.stkConData = CpOdr.StkConData() self.objSBCon = CpOdr.CpSBConclusion() ##################################################################### # 체겷 Subscribe # def monitorCon(self): 실시간 업데이트 self.objSBCon.Subscribe(self.stkConData, self) ##################################################################### # 잔고 self.objBlnc = CpOdr.Cp6033() ##################################################################### # stock object self.stkCurData = CpData.StkCurData() self.stkTickData = CpData.StkTickData() # 주문 현재가/10차 호가 저장 self.objSBCur = CpData.CpSBStockCur() self.objSBbid = CpData.CpSBStockBid() ##################################################################### # db object self.objDB = CpDB.CpDB() self.setWindowTitle("PLUS API TEST") self.setGeometry(300, 300, 300, 700) nH = 20 btnBuy = QPushButton("매수/매도 주문", self) btnBuy.move(20, nH) # btnBuy.resize(200,30) btnBuy.clicked.connect(self.btnBuy_clicked) nH += 50 btnExit = QPushButton("종료", self) btnExit.move(20, nH) # btnExit.resize(200,30) btnExit.clicked.connect(self.btnExit_clicked) nH += 50 btnMst = QPushButton("기본정보", self) btnMst.move(20, nH) # btnExit.resize(200,30) btnMst.clicked.connect(self.btnMst_clicked) nH += 50 btnInv = QPushButton("투자자종합", self) btnInv.move(20, nH) btnInv.clicked.connect(self.btnInv_clicked)
async def canorder_async(self, acc_no, dicOdrList, odrList): while True: remainCount = com.g_objCpStatus.GetLimitRemainCount(1) # 1 시세 제한 if remainCount <= 0: print('시세 연속 조회 제한 회피를 위해 sleep', com.g_objCpStatus.LimitRequestRemainTime) await asyncio.sleep(com.g_objCpStatus.LimitRequestRemainTime / 1000) ############################################################################### # 미체결조회 if self.objUnCon.Request(acc_no, dicOdrList, odrList) == False: print("현재가 통신 실패") return cnt = len(odrList.item) for i in range(cnt): print("canorder_async 주문정보 : %s, %s" % (odrList.item[i], odrList.item_nm[i])) ############################################################################### # 현재가 / 호가 조회 : offer 매도 / bid / 매수 # Data Class 초기화 하는 방법 # self.stopSubscribe() self.stkTickData = CpData.StkTickData() # 주문 현재가/10차 호가 저장 if self.objCurBid.Request(odrList.item[i], self.stkTickData) == False: print("현재가 통신 실패") return ############################################################################### # 5호가 차이 취소 매도 매도가격이 5호가 보다 크면 취소 if odrList.odr_tp[i] == '1': if odrList.prc[i] >= self.stkTickData.offer[5 - 1]: print("매도취소주문 실행 ", odrList.item[i], "현재가", self.stkTickData.cur, "주문가격", odrList.prc[i], "1차매도호가", self.stkTickData.offer[0], "1차매수호가", self.stkTickData.bid_prc[0]) bResult = self.objOdr.canOrder(acc_no, odrList.item[i], odrList.mod_qty[i], odrList.prc[i], odrList.odr_no[i]) if bResult == False: print("주문 실패") return ############################################################################### # 매수 if odrList.odr_tp[i] == '2': if odrList.prc[i] <= self.stkTickData.bid_prc[5 - 1]: print("매수취소주문 실행", odrList.item[i], "현재가", self.stkTickData.cur, "주문가격", odrList.prc[i], "1차매도호가", self.stkTickData.offer[0], "1차매수호가", self.stkTickData.bid_prc[0]) bResult = self.objOdr.canOrder(acc_no, odrList.item[i], odrList.mod_qty[i], odrList.prc[i], odrList.odr_no[i]) if bResult == False: print("주문 실패") return print("조회 취소주문", odrList.item[i], "현재가", self.stkTickData.cur, "주문가격", odrList.prc[i], "1차매도호가", self.stkTickData.offer[0], "1차매수호가", self.stkTickData.bid_prc[0]) await asyncio.sleep(5)
def __init__(self): # plus 상태 체크 if com.InitPlusCheck() == False: exit() if com.InitTradeInit() == False: exit() ##################################################################### # account info self.acc_no = com.g_objCpTrade.AccountNumber[0] # 계좌번호 self.acc_tp = com.g_objCpTrade.GoodsList(self.acc_no, 1) # 주식상품 구분 ##################################################################### # stock object self.stkCurData = CpData.StkCurData() self.stkTickData = CpData.StkTickData() # 주문 현재가/10차 호가 저장 self.objSBCur = CpData.CpSBStockCur() self.objSBid = CpData.CpSBStockBid() ##################################################################### # future object self.futCurData = CpDataFut.FutCurData() self.objSBCurFut = CpDataFut.CpFutureCurOnly() self.futTickData = CpDataFut.FutTickData() ##################################################################### # db object self.objDB = CpDB.CpDB() ##################################################################### # db object self.cntTick = 0 self.stkCur = [] self.futCur = [] super().__init__() self.setWindowTitle(sys.argv[0]) self.setGeometry(300, 300, 300, 700) nH = 20 btnBuy = QPushButton("종목 분 데이터 조회", self) btnBuy.move(20, nH) # btnBuy.resize(200,30) btnBuy.clicked.connect(self.btnBuy_clicked) nH += 50 btnExit = QPushButton("종료", self) btnExit.move(20, nH) # btnExit.resize(200,30) btnExit.clicked.connect(self.btnExit_clicked) nH += 50 btnMst = QPushButton("기본정보", self) btnMst.move(20, nH) # btnExit.resize(200,30) btnMst.clicked.connect(self.btnMst_clicked) nH += 50 btnInv = QPushButton("투자자종합", self) btnInv.move(20, nH) btnInv.clicked.connect(self.btnInv_clicked)