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
Exemplo n.º 2
0
 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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
 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
Exemplo n.º 8
0
                                   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_())