示例#1
0
    def init_ui(self):
        """"""
        self.setWindowTitle(f"{self.daily_trade_result.name}交易明细")
        self.resize(1100, 500)

        table = QtWidgets.QTableWidget()
        fields = self.trade_values[0].__dataclass_fields__
        table.setColumnCount(len(fields))
        table.setRowCount(len(self.trade_values))
        table.setHorizontalHeaderLabels(fields.keys())
        table.verticalHeader().setVisible(False)

        for r, tradeData in enumerate(self.trade_values):
            for c, k in enumerate(fields.keys()):
                v = getattr(tradeData, k)
                if isinstance(v, Enum):
                    v = v.value
                cell = QtWidgets.QTableWidgetItem(str(v))
                cell.setFlags(QtCore.Qt.ItemIsEnabled)

                cell.setTextAlignment(QtCore.Qt.AlignCenter)
                table.setItem(r, c, cell)

        table.doubleClicked.connect(self.visulize)
        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(table)

        self.setLayout(vbox)
示例#2
0
    def init_ui(self):
        """"""
        self.setWindowTitle("参数优化结果")
        self.resize(1100, 500)

        table = QtWidgets.QTableWidget()

        table.setColumnCount(2)
        table.setRowCount(len(self.result_values))
        table.setHorizontalHeaderLabels(["参数", self.target_display])
        table.setEditTriggers(table.NoEditTriggers)
        table.verticalHeader().setVisible(False)

        table.horizontalHeader().setSectionResizeMode(
            0, QtWidgets.QHeaderView.ResizeToContents
        )
        table.horizontalHeader().setSectionResizeMode(
            1, QtWidgets.QHeaderView.Stretch
        )

        for n, tp in enumerate(self.result_values):
            setting, target_value, _ = tp
            setting_cell = QtWidgets.QTableWidgetItem(str(setting))
            target_cell = QtWidgets.QTableWidgetItem(str(target_value))

            setting_cell.setTextAlignment(QtCore.Qt.AlignCenter)
            target_cell.setTextAlignment(QtCore.Qt.AlignCenter)

            table.setItem(n, 0, setting_cell)
            table.setItem(n, 1, target_cell)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(table)

        self.setLayout(vbox)
示例#3
0
    def init_ui(self):
        """"""
        self.setWindowTitle("回测每日明细")
        self.resize(1300, 800)

        table = QtWidgets.QTableWidget()

        table.setColumnCount(18)
        table.setRowCount(len(self.daily_df))
        table.setHorizontalHeaderLabels(self.daily_df.columns)
        table.setVerticalHeaderLabels(str(i) for i in self.daily_df.index)
        table.verticalHeader().setVisible(True)

        for r, (d, s) in enumerate(self.daily_df.iterrows()):
            for c, (t, v) in enumerate(s.items()):
                if t == 'trades':
                    cell = QtWidgets.QTableWidgetItem("交易明细")
                    cell.setFlags(QtCore.Qt.ItemIsSelectable
                                  | QtCore.Qt.ItemIsEnabled)
                else:
                    cell = QtWidgets.QTableWidgetItem(str(v))
                    cell.setFlags(QtCore.Qt.ItemIsEnabled)

                cell.setTextAlignment(QtCore.Qt.AlignCenter)
                table.setItem(r, c, cell)

        table.itemDoubleClicked.connect(self.show_trade_data)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(table)

        self.setLayout(vbox)
示例#4
0
    def init_table(self) -> None:
        """"""
        labels = ["时间", "开盘价", "最高价", "最低价", "收盘价", "成交量", "持仓量"]

        self.table = QtWidgets.QTableWidget()
        self.table.setColumnCount(len(labels))
        self.table.setHorizontalHeaderLabels(labels)
        self.table.verticalHeader().setVisible(False)
        self.table.horizontalHeader().setSectionResizeMode(
            QtWidgets.QHeaderView.ResizeToContents)
示例#5
0
    def init_ui(self):
        """"""
        self.setWindowTitle("参数优化结果")
        self.resize(1100, 500)

        # Creat table to show result
        table = QtWidgets.QTableWidget()

        table.setColumnCount(2)
        table.setRowCount(len(self.result_values))
        table.setHorizontalHeaderLabels(["参数", self.target_display])
        table.setEditTriggers(table.NoEditTriggers)
        table.verticalHeader().setVisible(False)

        table.horizontalHeader().setSectionResizeMode(
            0, QtWidgets.QHeaderView.ResizeToContents
        )
        table.horizontalHeader().setSectionResizeMode(
            1, QtWidgets.QHeaderView.Stretch
        )

        for n, tp in enumerate(self.result_values):
            setting, target_value, _ = tp
            setting_cell = QtWidgets.QTableWidgetItem(str(setting))
            target_cell = QtWidgets.QTableWidgetItem(f"{target_value:.2f}")

            setting_cell.setTextAlignment(QtCore.Qt.AlignCenter)
            target_cell.setTextAlignment(QtCore.Qt.AlignCenter)

            table.setItem(n, 0, setting_cell)
            table.setItem(n, 1, target_cell)

        # Create layout
        button = QtWidgets.QPushButton("保存")
        button.clicked.connect(self.save_csv)

        hbox = QtWidgets.QHBoxLayout()
        hbox.addStretch()
        hbox.addWidget(button)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(table)
        vbox.addLayout(hbox)

        self.setLayout(vbox)
示例#6
0
    def init_ui(self) -> None:
        """"""
        self.setWindowTitle("波动率管理")

        tab = QtWidgets.QTabWidget()
        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(tab)
        self.setLayout(vbox)

        self.chain_symbols = list(self.portfolio.chains.keys())
        self.chain_symbols.sort()

        for chain_symbol in self.chain_symbols:
            chain = self.portfolio.get_chain(chain_symbol)

            table = QtWidgets.QTableWidget()
            table.setEditTriggers(table.NoEditTriggers)
            table.verticalHeader().setVisible(False)
            table.setColumnCount(4)
            table.setRowCount(len(chain.indexes))
            table.setHorizontalHeaderLabels(["行权价", "中值隐波", "定价隐波", "执行拟合"])
            table.horizontalHeader().setSectionResizeMode(
                QtWidgets.QHeaderView.Stretch)

            for row, index in enumerate(chain.indexes):
                index_cell = IndexCell(index)
                mid_impv_cell = MonitorCell("")

                set_func = partial(self.set_pricing_impv,
                                   chain_symbol=chain_symbol,
                                   index=index)
                pricing_impv_spin = VolatilityDoubleSpinBox()
                pricing_impv_spin.setAlignment(QtCore.Qt.AlignCenter)
                pricing_impv_spin.valueChanged.connect(set_func)

                check = QtWidgets.QCheckBox()

                check_hbox = QtWidgets.QHBoxLayout()
                check_hbox.setAlignment(QtCore.Qt.AlignCenter)
                check_hbox.addWidget(check)

                check_widget = QtWidgets.QWidget()
                check_widget.setLayout(check_hbox)

                table.setItem(row, 0, index_cell)
                table.setItem(row, 1, mid_impv_cell)
                table.setCellWidget(row, 2, pricing_impv_spin)
                table.setCellWidget(row, 3, check_widget)

                cells = {
                    "mid_impv": mid_impv_cell,
                    "pricing_impv": pricing_impv_spin,
                    "check": check
                }

                self.cells[(chain_symbol, index)] = cells

            reset_func = partial(self.reset_pricing_impv,
                                 chain_symbol=chain_symbol)
            button_reset = QtWidgets.QPushButton("重置")
            button_reset.clicked.connect(reset_func)

            fit_func = partial(self.fit_pricing_impv,
                               chain_symbol=chain_symbol)
            button_fit = QtWidgets.QPushButton("拟合")
            button_fit.clicked.connect(fit_func)

            increase_func = partial(self.increase_pricing_impv,
                                    chain_symbol=chain_symbol)
            button_increase = QtWidgets.QPushButton("+0.1%")
            button_increase.clicked.connect(increase_func)

            decrease_func = partial(self.decrease_pricing_impv,
                                    chain_symbol=chain_symbol)
            button_decrease = QtWidgets.QPushButton("-0.1%")
            button_decrease.clicked.connect(decrease_func)

            hbox = QtWidgets.QHBoxLayout()
            hbox.addWidget(button_reset)
            hbox.addWidget(button_fit)
            hbox.addWidget(button_increase)
            hbox.addWidget(button_decrease)

            vbox = QtWidgets.QVBoxLayout()
            vbox.addLayout(hbox)
            vbox.addWidget(table)

            chain_widget = QtWidgets.QWidget()
            chain_widget.setLayout(vbox)
            tab.addTab(chain_widget, chain_symbol)

            self.update_pricing_impv(chain_symbol)

            self.default_foreground = mid_impv_cell.foreground()
            self.default_background = mid_impv_cell.background()

            table.resizeRowsToContents()
示例#7
0
    def initUI(self):
        '''
        |--------------|------------|
        |              |            |
        |              |            |
        |task list1    | log display|
        |task list1    |            |
        |task list1    |            |
        |task list1    |            |
        |------------- |------------|
        |          button           |
        |---------------------------|
        :return:
        '''

        self.setWindowIconText("获取数据任务列表")
        self.setObjectName("data_maintenance")
        QtCore.QMetaObject.connectSlotsByName(self)

        # 下面将输出重定向到textEdit中
        sys.stdout = EmittingStream(textWritten=self.outputWritten)
        sys.stderr = EmittingStream(textWritten=self.outputWritten)

        # 🛠todo 日志显示,用table view list 加入搜索的功能, 行号等, 彩色显示,
        self.logDisplay = QtWidgets.QTableWidget(self)

        self.logDisplay.setObjectName("tableForLog")
        self.logDisplay.setColumnCount(2)
        self.logDisplay.setHorizontalHeaderLabels(['日志内容', '来源'])
        self.logDisplay.setColumnWidth(0, 700)
        self.logDisplay.setColumnWidth(1, 100)
        self.gridLayut = QtWidgets.QGridLayout()
        self.taskListLayout = QtWidgets.QVBoxLayout()
        self.logListLayout = QtWidgets.QVBoxLayout()
        self.buttonListLayout = QtWidgets.QHBoxLayout()

        self.gridLayut.addLayout(self.taskListLayout, 0, 0, 1, 1)
        self.gridLayut.addLayout(self.logListLayout, 0, 1, 1, 1)

        self.gridLayut.setColumnMinimumWidth(1, 1400)
        '''
        void QGridLayout::addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
        This is an overloaded function.
        This version adds the layout layout to the cell grid, spanning multiple rows/columns. 
        The cell will start at row, column spanning rowSpan rows and columnSpan columns.
        If rowSpan and/or columnSpan is -1, then the layout will extend to the bottom and/or right edge, respectively.
        '''
        self.gridLayut.addLayout(self.buttonListLayout, 1, 0, 1, 3)

        #🛠todo QT 报错 QWidget::setLayout: Attempting to set QLayout "" on QWidget "", which already has a layout
        self.setLayout(self.gridLayut)

        self.qCheckboxWidgetList = []
        self.qProgressWidgetList = []
        self.allSubJobList = []

        # 🛠todo this is really stupid 01 02 03 04,... should use template ? does python have some template feature like c++
        #######################################################################
        self.create_job_08_save_stock_list()
        #######################################################################
        self.create_job_09_save_stock_block()
        #######################################################################
        self.create_job_10_save_stock_info()
        #######################################################################
        self.create_job_01_save_stock_day()
        #######################################################################
        self.create_job_02_save_stock_xdxr()
        #######################################################################
        self.create_job_03_save_stock_min()
        #######################################################################
        self.create_job_04_save_index_day()
        #######################################################################
        self.create_job_05_save_index_min()
        #######################################################################
        self.create_job_06_save_etf_day()
        #######################################################################
        self.create_job_07_save_etf_min()
        #######################################################################
        self.create_job_11_save_stock_transaction()
        #######################################################################
        self.selectedSubTask = QA_GUI_Selected_TaskQueue(self.logDisplay)
        self.selectedSubTask.trigger_all_task_start.connect(
            self.uiAllTaskStart)
        self.selectedSubTask.trigger_all_task_done.connect(self.uiAllTaskDone)

        #######################################################################

        self.logListLayout.addWidget(self.logDisplay)

        self.bntExecute = QtWidgets.QPushButton(self)
        self.bntExecute.setText("执行选中的任务 🐌")
        self.buttonListLayout.addWidget(self.bntExecute)

        # 🛠todo 没有实现!
        self.bntStopTack = QtWidgets.QPushButton(self)
        self.bntStopTack.setText("停止执行任务 🚫")
        self.buttonListLayout.addWidget(self.bntStopTack)

        self.bntClearLog = QtWidgets.QPushButton(self)
        self.bntClearLog.setText("清除日志 🗑")
        self.buttonListLayout.addWidget(self.bntClearLog)

        self.bntExecute.clicked.connect(self.doSelectedTask)
        self.bntStopTack.clicked.connect(self.doStopTask)

        layout = QtWidgets.QFormLayout()
        layout.setLabelAlignment(QtCore.Qt.AlignLeft)
        layout.addRow("保存日线数据 ", QtWidgets.QProgressBar(self))
        layout.addRow("保存日除权出息数据 ", QtWidgets.QProgressBar(self))
        layout.addRow("保存分钟线数据", QtWidgets.QProgressBar(self))
        layout.addRow("保存指数数据", QtWidgets.QProgressBar(self))

        layout.addRow("保存指数线数据 ", QtWidgets.QProgressBar(self))
        layout.addRow("保存ETF日线数据 ", QtWidgets.QProgressBar(self))
        layout.addRow("保存ET分钟数据", QtWidgets.QProgressBar(self))
        layout.addRow("保存股票列表", QtWidgets.QProgressBar(self))
        layout.addRow("保存板块", QtWidgets.QProgressBar(self))
        layout.addRow("保存tushare数据接口获取的股票列表", QtWidgets.QProgressBar(self))
        layout.addRow("保存高级财务数据(自1996年开始)", QtWidgets.QProgressBar(self))
        layout.addRow("保存50ETF期权日线数据(不包括已经摘牌的数据)",
                      QtWidgets.QProgressBar(self))

        qPushBnt = QtWidgets.QPushButton(self)
        qPushBnt.setText("开始执行")
        layout.addRow("选中需要执行的任务", qPushBnt)