Exemplo n.º 1
0
    def init_ui(self) -> None:
        """"""
        self.setMinimumWidth(300)
        self.setWindowTitle(f"添加【{self.rule_name}】雷达信号")

        self.type_combo = QtWidgets.QComboBox()
        self.type_combo.addItems([
            SignalType.GREATER_THAN.value,
            SignalType.LESS_THAN.value,
            SignalType.EQUAL_TO.value,
        ])

        self.target_line = QtWidgets.QLineEdit()
        self.target_line.setValidator(QtGui.QDoubleValidator())

        self.sound_check = QtWidgets.QCheckBox()
        self.email_check = QtWidgets.QCheckBox()

        button = QtWidgets.QPushButton("添加")
        button.clicked.connect(self.add_signal)

        form = QtWidgets.QFormLayout()
        form.addRow("信号类型", self.type_combo)
        form.addRow("目标数值", self.target_line)
        form.addRow("声音通知", self.sound_check)
        form.addRow("邮件通知", self.email_check)
        form.addRow(button)

        self.setLayout(form)
Exemplo n.º 2
0
    def create_job_01_save_stock_day(self):
        # 🛠todo 继承QWidget , 写一个类, 里面有 进度条, checkbox ,和绑定到线程
        self.qCheckBoxJob01_save_stock_day = QtWidgets.QCheckBox(self)
        self.qCheckBoxJob01_save_stock_day.setText("JOB01 日线数据 📊")
        self.qProgressJob01_save_stock_day = QtWidgets.QProgressBar(self)
        self.qProgressJob01_save_stock_day.setMaximum(100)
        # 🛠todo  应该有更加好的实现方式, 把progress bar 绑定到 任务对象中,这样写实在是太粗糙了。
        # 把job 对象 绑定到界面中 , 继承 QCheckBox 把相关到对象线程 和 widget 绑定。
        self.job01_save_stock_day = QA_GUI_DateFetch_SU_job01_stock_day()

        self.job01_save_stock_day.setLoggingUIWidget(self.logDisplay)
        self.job01_save_stock_day.setProgressUIWidget(
            self.qProgressJob01_save_stock_day)
        self.job01_save_stock_day.setCheckboxUIWidget(
            self.qCheckBoxJob01_save_stock_day)

        self.job01_save_stock_day.connectSignalSlot()

        # 🛠todo 进一步封装 hardcode 1 2 3 不是一种好的的做法
        self.qCheckboxWidgetList.append(self.qCheckBoxJob01_save_stock_day)
        self.qProgressWidgetList.append(self.qProgressJob01_save_stock_day)
        self.allSubJobList.append(self.job01_save_stock_day)
        # 🛠todo 进一步封装 hardcode 1 2 3 不是一种好的的做法
        self.taskListLayout.addWidget(self.qCheckBoxJob01_save_stock_day)
        self.taskListLayout.addWidget(self.qProgressJob01_save_stock_day)
Exemplo n.º 3
0
    def create_job_11_save_stock_transaction(self):

        self.qCheckBoxJob11_save_stock_transaction = QtWidgets.QCheckBox(self)
        self.qCheckBoxJob11_save_stock_transaction.setText(
            "JOB11 股票3秒的tick数据 📊")
        self.qProgressJob11_save_stock_transaction = QtWidgets.QProgressBar(
            self)
        self.qProgressJob11_save_stock_transaction.setMaximum(
            10000)  # 最小变动单位 0.01

        self.job11_save_stock_transaction = QA_GUI_DateFetch_SU_job11_stock_transaction(
        )

        self.job11_save_stock_transaction.setLoggingUIWidget(self.logDisplay)
        self.job11_save_stock_transaction.setProgressUIWidget(
            self.qProgressJob11_save_stock_transaction)
        self.job11_save_stock_transaction.setCheckboxUIWidget(
            self.qCheckBoxJob11_save_stock_transaction)

        self.job11_save_stock_transaction.connectSignalSlot()

        self.qCheckboxWidgetList.append(
            self.qCheckBoxJob11_save_stock_transaction)
        self.qProgressWidgetList.append(
            self.qProgressJob11_save_stock_transaction)
        self.allSubJobList.append(self.job11_save_stock_transaction)
        self.taskListLayout.addWidget(
            self.qCheckBoxJob11_save_stock_transaction)
        self.taskListLayout.addWidget(
            self.qProgressJob11_save_stock_transaction)
Exemplo n.º 4
0
    def init_ui(self):
        self.setWindowTitle("策略执行回顾")
        self.resize(1100, 600)

        self.datetime_from = QtWidgets.QDateTimeEdit()
        self.datetime_to = QtWidgets.QDateTimeEdit()
        today = dt.date.today()
        self.datetime_from.setDateTime(
            dt.datetime(year=today.year, month=today.month, day=today.day))
        self.datetime_to.setDateTime(
            dt.datetime(year=today.year,
                        month=today.month,
                        day=today.day,
                        hour=23,
                        minute=59))
        # self.query_btn = QtWidgets.QPushButton("查询")
        self.skip_checkbox = QtWidgets.QCheckBox('AutoSkip')
        self.skip_checkbox.setToolTip('自动过滤未平仓订单')
        self.skip_checkbox.clicked.connect(self.update_strategy_data)
        self.datetime_from.editingFinished.connect(self.update_strategy_data)
        self.datetime_to.editingFinished.connect(self.update_strategy_data)
        # self.query_btn.clicked.connect(self.update_strategy_data)

        self.tab = QtWidgets.QTabWidget()
        self.strategy_monitor = StrategyMonitor(self.main_engine,
                                                self.event_engine)
        self.strategy_monitor.cellDoubleClicked.connect(self.show_trade_chart)
        # self.strategy_monitor.cellClicked.connect(self.check_strategies)
        self.strategy_monitor.resize(1000, 600)
        self.tab.addTab(self.strategy_monitor, '策略统计')

        self.trade = TradeChartDialog(self.main_engine, self.event_engine)

        time_hbox = QtWidgets.QHBoxLayout()
        time_hbox.addWidget(self.datetime_from, 3)
        time_hbox.addWidget(self.datetime_to, 3)
        time_hbox.addWidget(self.skip_checkbox, 1)
        # time_hbox.addWidget(self.query_btn, 1)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addLayout(time_hbox)
        vbox.addWidget(self.tab)
        self.setLayout(vbox)

        self.update_strategy_data()
Exemplo n.º 5
0
    def init_ui(self) -> None:
        """"""
        self.setWindowTitle("波动率曲线")

        # Create checkbox for each chain
        hbox = QtWidgets.QHBoxLayout()
        portfolio = self.option_engine.get_portfolio(self.portfolio_name)

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

        hbox.addStretch()

        for chain_symbol in chain_symbols:
            chain_check = QtWidgets.QCheckBox()
            chain_check.setText(chain_symbol.split(".")[0])
            chain_check.setChecked(True)
            chain_check.stateChanged.connect(self.update_curve_visible)

            hbox.addWidget(chain_check)
            self.chain_checks[chain_symbol] = chain_check

        hbox.addStretch()

        # Create graphics window
        pg.setConfigOptions(antialias=True)

        graphics_window = pg.GraphicsWindow()
        self.impv_chart = graphics_window.addPlot(title="隐含波动率曲线")
        self.impv_chart.showGrid(x=True, y=True)
        self.impv_chart.setLabel("left", "波动率")
        self.impv_chart.setLabel("bottom", "行权价")
        self.impv_chart.addLegend()
        self.impv_chart.setMenuEnabled(False)
        self.impv_chart.setMouseEnabled(False, False)

        for chain_symbol in chain_symbols:
            self.add_impv_curve(chain_symbol)

        # Set Layout
        vbox = QtWidgets.QVBoxLayout()
        vbox.addLayout(hbox)
        vbox.addWidget(graphics_window)
        self.setLayout(vbox)
Exemplo n.º 6
0
    def create_job_02_save_stock_xdxr(self):
        self.qCheckBoxJob02_save_stock_xdxr = QtWidgets.QCheckBox(self)
        self.qCheckBoxJob02_save_stock_xdxr.setText("JOB02 除权除息数据 📊")
        self.qProgressJob02_save_stock_xdxr = QtWidgets.QProgressBar(self)
        self.qProgressJob02_save_stock_xdxr.setMaximum(100)

        self.job02_save_stock_xdxr = QA_GUI_DateFetch_SU_job02_stock_xdxr()

        self.job02_save_stock_xdxr.setLoggingUIWidget(self.logDisplay)
        self.job02_save_stock_xdxr.setProgressUIWidget(
            self.qProgressJob02_save_stock_xdxr)
        self.job02_save_stock_xdxr.setCheckboxUIWidget(
            self.qCheckBoxJob02_save_stock_xdxr)

        self.job02_save_stock_xdxr.connectSignalSlot()

        self.qCheckboxWidgetList.append(self.qCheckBoxJob02_save_stock_xdxr)
        self.qProgressWidgetList.append(self.qProgressJob02_save_stock_xdxr)
        self.allSubJobList.append(self.job02_save_stock_xdxr)
        self.taskListLayout.addWidget(self.qCheckBoxJob02_save_stock_xdxr)
        self.taskListLayout.addWidget(self.qProgressJob02_save_stock_xdxr)
Exemplo n.º 7
0
    def create_job_10_save_stock_info(self):
        self.qCheckBoxJob10_save_stock_info = QtWidgets.QCheckBox(self)
        self.qCheckBoxJob10_save_stock_info.setText("JOB10 股票基本数据 📊")
        self.qProgressJob10_save_stock_info = QtWidgets.QProgressBar(self)
        self.qProgressJob10_save_stock_info.setMaximum(10000)  # 最小变动单位 0.01

        self.job10_save_stock_info = QA_GUI_DateFetch_SU_job10_stock_info()

        self.job10_save_stock_info.setLoggingUIWidget(self.logDisplay)
        self.job10_save_stock_info.setProgressUIWidget(
            self.qProgressJob10_save_stock_info)
        self.job10_save_stock_info.setCheckboxUIWidget(
            self.qCheckBoxJob10_save_stock_info)

        self.job10_save_stock_info.connectSignalSlot()

        self.qCheckboxWidgetList.append(self.qCheckBoxJob10_save_stock_info)
        self.qProgressWidgetList.append(self.qProgressJob10_save_stock_info)
        self.allSubJobList.append(self.job10_save_stock_info)
        self.taskListLayout.addWidget(self.qCheckBoxJob10_save_stock_info)
        self.taskListLayout.addWidget(self.qProgressJob10_save_stock_info)
Exemplo n.º 8
0
    def create_job_07_save_etf_min(self):
        self.qCheckBoxJob07_save_etf_min = QtWidgets.QCheckBox(self)
        self.qCheckBoxJob07_save_etf_min.setText("JOB07 ETF分钟数据 📊")
        self.qProgressJob07_save_etf_min = QtWidgets.QProgressBar(self)
        self.qProgressJob07_save_etf_min.setMaximum(10000)  # 最小变动单位 0.01

        self.job07_save_etf_min = QA_GUI_DateFetch_SU_job07_etf_min()

        self.job07_save_etf_min.setLoggingUIWidget(self.logDisplay)
        self.job07_save_etf_min.setProgressUIWidget(
            self.qProgressJob07_save_etf_min)
        self.job07_save_etf_min.setCheckboxUIWidget(
            self.qCheckBoxJob07_save_etf_min)

        self.job07_save_etf_min.connectSignalSlot()

        self.qCheckboxWidgetList.append(self.qCheckBoxJob07_save_etf_min)
        self.qProgressWidgetList.append(self.qProgressJob07_save_etf_min)
        self.allSubJobList.append(self.job07_save_etf_min)
        self.taskListLayout.addWidget(self.qCheckBoxJob07_save_etf_min)
        self.taskListLayout.addWidget(self.qProgressJob07_save_etf_min)
Exemplo n.º 9
0
    def create_job_04_save_index_day(self):
        self.qCheckBoxJob04_save_index_day = QtWidgets.QCheckBox(self)
        self.qCheckBoxJob04_save_index_day.setText("JOB04 指数日线数据 📊")
        self.qProgressJob04_save_index_day = QtWidgets.QProgressBar(self)
        self.qProgressJob04_save_index_day.setMaximum(10000)  # 最小变动单位 0.01

        self.job04_save_index_day = QA_GUI_DateFetch_SU_job04_index_day()

        self.job04_save_index_day.setLoggingUIWidget(self.logDisplay)
        self.job04_save_index_day.setProgressUIWidget(
            self.qProgressJob04_save_index_day)
        self.job04_save_index_day.setCheckboxUIWidget(
            self.qCheckBoxJob04_save_index_day)

        self.job04_save_index_day.connectSignalSlot()

        self.qCheckboxWidgetList.append(self.qCheckBoxJob04_save_index_day)
        self.qProgressWidgetList.append(self.qProgressJob04_save_index_day)
        self.allSubJobList.append(self.job04_save_index_day)
        self.taskListLayout.addWidget(self.qCheckBoxJob04_save_index_day)
        self.taskListLayout.addWidget(self.qProgressJob04_save_index_day)
Exemplo n.º 10
0
    def create_job01_save_stock_week(self):
        self.qCheckBoxJob01_save_stock_week = QtWidgets.QCheckBox(self)
        self.qCheckBoxJob01_save_stock_week.setText("JOB01 周线数据 📊")
        self.qProgressJob01_save_stock_week = QtWidgets.QProgressBar(self)
        self.qProgressJob01_save_stock_week.setMaximum(100)

        # 🛠todo 不知道为何,QThread 继承的 都不执行 __init__
        self.job01_save_stock_week = QA_GUI_DateFetch_SU_job01_stock_week()

        self.job01_save_stock_week.setLoggingUIWidget(self.logDisplay)
        self.job01_save_stock_week.setProgressUIWidget(
            self.qProgressJob01_save_stock_week)
        self.job01_save_stock_week.setCheckboxUIWidget(
            self.qCheckBoxJob01_save_stock_week)

        self.job01_save_stock_week.connectSignalSlot()

        self.qCheckboxWidgetList.append(self.qCheckBoxJob01_save_stock_week)
        self.qProgressWidgetList.append(self.qProgressJob01_save_stock_week)
        self.allSubJobList.append(self.job01_save_stock_week)
        self.taskListLayout.addWidget(self.qCheckBoxJob01_save_stock_week)
        self.taskListLayout.addWidget(self.qProgressJob01_save_stock_week)
Exemplo n.º 11
0
    def init_ui(self):
        """"""
        self.setWindowTitle("模拟交易")
        self.setFixedHeight(200)
        self.setFixedWidth(500)

        interval_spin = QtWidgets.QSpinBox()
        interval_spin.setMinimum(1)
        interval_spin.setValue(self.paper_engine.timer_interval)
        interval_spin.setSuffix(" 秒")
        interval_spin.valueChanged.connect(
            self.paper_engine.set_timer_interval)

        slippage_spin = QtWidgets.QSpinBox()
        slippage_spin.setMinimum(0)
        slippage_spin.setValue(self.paper_engine.trade_slippage)
        slippage_spin.setSuffix(" 跳")
        slippage_spin.valueChanged.connect(
            self.paper_engine.set_trade_slippage)

        instant_check = QtWidgets.QCheckBox()
        instant_check.setChecked(self.paper_engine.instant_trade)
        instant_check.stateChanged.connect(self.paper_engine.set_instant_trade)

        clear_button = QtWidgets.QPushButton("清空所有持仓")
        clear_button.clicked.connect(self.paper_engine.clear_position)
        clear_button.setFixedHeight(clear_button.sizeHint().height() * 2)

        form = QtWidgets.QFormLayout()
        form.addRow("市价委托和停止委托的成交滑点", slippage_spin)
        form.addRow("模拟交易持仓盈亏的计算频率", interval_spin)
        form.addRow("下单后立即使用当前盘口撮合", instant_check)
        form.addRow(clear_button)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addStretch()
        vbox.addLayout(form)
        vbox.addStretch()
        self.setLayout(vbox)
Exemplo n.º 12
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()