def __feedDataTable(self): opt_data = TableHandler() opt_data.copyDataframe(self.dp.getOptionData().getDataFrame()) stk_data = TableHandler() stk_data.copyDataframe(self.dp.getStockData().getDataFrame()) ptf_data = TableHandler() ptf_data.copyDataframe(self.dp.getPortfolioData().getDataFrame()) self.gui.onRepTableFeed(opt_data, stk_data, ptf_data) return
def findInvalidRows(t_data=TableHandler()): invalid_rows = list() for r in range(0, t_data.rows): for h in ['group', 'code', 'dir', 'lots', 'open_price', 'margin']: val = t_data.getByHeader(r, h) if val is None or val == '': invalid_rows.append(r) return invalid_rows
def __init__(self, gui): self.gui = gui #original position table self.ori_positions = None #etf quote self.etf = TableHandler() self.etf.reset(1, Engine.ETF_QUOTE_HEADERS, -1) #marketdata service self.md = MarketdataAdaptor() #database service self.dp = DADAPTOR.DataProxy() self.__reloadPositions() #flow control self.last_sync_time = DT.datetime.now() #gui communication self.msg = MessageQueue() self.msg_event = THD.Event() self.msg_thread = THD.Thread(target=self.__handleMessage) self.msg_thread.start() return
def onSaveAllBtClicked(self): rtn = QMessageBox.question(self, 'Confirm', 'Save position changes?', QMessageBox.Yes, QMessageBox.No) if rtn == QMessageBox.Yes: data = TableHandler() data.copy(self.model.data) invalid_rows = PosEditor.findInvalidRows(data) if invalid_rows: data.delRows(invalid_rows) if data.rows > 0: self.controler.onEditorClickBtSaveAll(data) else: QMessageBox.warning(self, 'Error', 'None valid records!', QMessageBox.Yes) #notify if invalid_rows: info_str = 'Invalid rows deleted:\n%s' % str( [i + 1 for i in invalid_rows]) QMessageBox.warning(self, 'Warning', info_str, QMessageBox.Yes) else: self.close() return
def __init__(self, parent=None): super(MatrixModel, self).__init__(parent) self.data = TableHandler() #signal&slot return
def __feedPositionBaseData(self): tdata = TableHandler() tdata.copyDataframe(self.ori_positions) self.gui.onRepPositionBasedataFeed(tdata) return
def __feedEtfQuote(self): snap_etf = TableHandler() snap_etf.copy(self.etf) self.gui.onRepEtfQuoteFeed(snap_etf) return
QMessageBox.Yes, QMessageBox.No) if rtn == QMessageBox.Yes: self.controler.onEditorClickBtReloadPosition() return def onSaveCsvBtClicked(self): rtn = QMessageBox.question(self, 'Confirm', 'Writing positions to position.csv?', QMessageBox.Yes, QMessageBox.No) if rtn == QMessageBox.Yes: self.controler.onSavePosition2Csv() return ####################################################################### if __name__ == '__main__': import sys, random app = QApplication(sys.argv) pedit = PosEditor() th = TableHandler() th.reset(10, PosEditor.EDIT_TABLE_HEADERS) for r in range(0, 10): for h in PosEditor.EDIT_TABLE_HEADERS: th.setByHeader(r, h, random.randint(0, 10)) pedit.wakeupEditor() sys.exit(app.exec_())