Beispiel #1
0
 def save_setting(self):
     """"""
     setting = {
         "tick": self.tick_recordings,
         "bar": self.bar_recordings
     }
     save_json(self.setting_filename, setting)
Beispiel #2
0
 def save_order(self) -> None:
     """"""
     order_data = {
         "date": datetime.now().strftime("%Y-%m-%d"),
         "data": self.order_reference_map
     }
     save_json(self.order_filename, order_data)
Beispiel #3
0
 def save_setting(self) -> None:
     """"""
     setting = {
         "trade_slippage": self.trade_slippage,
         "timer_interval": self.timer_interval,
         "instant_trade": self.instant_trade
     }
     save_json(self.setting_filename, setting)
Beispiel #4
0
    def remove_strategy_setting(self, strategy_name: str):
        """
        Update setting file.
        """
        if strategy_name not in self.strategy_setting:
            return

        self.strategy_setting.pop(strategy_name)
        save_json(self.setting_filename, self.strategy_setting)
Beispiel #5
0
    def sync_strategy_data(self, strategy: StrategyTemplate):
        """
        Sync strategy data into json file.
        """
        data = strategy.get_variables()
        data.pop("inited")      # Strategy status (inited, trading) should not be synced.
        data.pop("trading")

        self.strategy_data[strategy.strategy_name] = data
        save_json(self.data_filename, self.strategy_data)
Beispiel #6
0
    def save_data(self) -> None:
        """"""
        data = {"date": datetime.now().strftime("%Y-%m-%d")}

        for contract_result in self.contract_results.values():
            key = f"{contract_result.reference},{contract_result.vt_symbol}"
            data[key] = {
                "open_pos": contract_result.open_pos,
                "last_pos": contract_result.last_pos
            }

        save_json(self.data_filename, data)
Beispiel #7
0
    def update_strategy_setting(self, strategy_name: str, setting: dict):
        """
        Update setting file.
        """
        strategy = self.strategies[strategy_name]

        self.strategy_setting[strategy_name] = {
            "class_name": strategy.__class__.__name__,
            "vt_symbol": strategy.vt_symbol,
            "setting": setting,
        }
        save_json(self.setting_filename, self.strategy_setting)
Beispiel #8
0
    def save_strategy_setting(self):
        """
        Save setting file.
        """
        strategy_setting = {}

        for name, strategy in self.strategies.items():
            strategy_setting[name] = {
                "class_name": strategy.__class__.__name__,
                "vt_symbols": strategy.vt_symbols,
                "setting": strategy.get_parameters()
            }

        save_json(self.setting_filename, strategy_setting)
Beispiel #9
0
    def save_data(self) -> None:
        """"""
        position_data = []

        for position in self.positions.values():
            if not position.volume:
                continue

            d = {
                "vt_symbol": position.vt_symbol,
                "volume": position.volume,
                "price": position.price,
                "direction": position.direction.value
            }
            position_data.append(d)

        save_json(self.data_filename, position_data)
Beispiel #10
0
 def save_algo_setting(self):
     """"""
     save_json(self.setting_filename, self.algo_settings)
Beispiel #11
0
 def save_setting(self) -> None:
     """"""
     setting = {"timer_interval": self.timer_interval}
     save_json(self.setting_filename, setting)
Beispiel #12
0
    def start_backtesting(self):
        """"""
        class_name = self.class_combo.currentText()
        vt_symbol = self.symbol_line.text()
        interval = self.interval_combo.currentText()
        start = self.start_date_edit.dateTime().toPyDateTime()
        end = self.end_date_edit.dateTime().toPyDateTime()
        rate = float(self.rate_line.text())
        slippage = float(self.slippage_line.text())
        size = float(self.size_line.text())
        pricetick = float(self.pricetick_line.text())
        capital = float(self.capital_line.text())

        if self.inverse_combo.currentText() == "正向":
            inverse = False
        else:
            inverse = True

        # Check validity of vt_symbol
        if "." not in vt_symbol:
            self.write_log("本地代码缺失交易所后缀,请检查")
            return

        _, exchange_str = vt_symbol.split(".")
        if exchange_str not in Exchange.__members__:
            self.write_log("本地代码的交易所后缀不正确,请检查")
            return

        # Save backtesting parameters
        backtesting_setting = {
            "class_name": class_name,
            "vt_symbol": vt_symbol,
            "interval": interval,
            "start": start.isoformat(),
            "rate": rate,
            "slippage": slippage,
            "size": size,
            "pricetick": pricetick,
            "capital": capital,
            "inverse": inverse,
        }
        save_json(self.setting_filename, backtesting_setting)

        # Get strategy setting
        old_setting = self.settings[class_name]
        dialog = BacktestingSettingEditor(class_name, old_setting)
        i = dialog.exec()
        if i != dialog.Accepted:
            return

        new_setting = dialog.get_setting()
        self.settings[class_name] = new_setting

        result = self.backtester_engine.start_backtesting(
            class_name, vt_symbol, interval, start, end, rate, slippage, size,
            pricetick, capital, inverse, new_setting)

        if result:
            self.statistics_monitor.clear_data()
            self.chart.clear_data()

            self.trade_button.setEnabled(False)
            self.order_button.setEnabled(False)
            self.daily_button.setEnabled(False)
            self.candle_button.setEnabled(False)

            self.trade_dialog.clear_data()
            self.order_dialog.clear_data()
            self.daily_dialog.clear_data()
            self.candle_dialog.clear_data()
Beispiel #13
0
    def save_setting(self) -> None:
        """"""
        # For normal spread
        setting = []

        for spread in self.spreads.values():
            if isinstance(spread, AdvancedSpreadData):
                continue

            leg_settings = []
            for leg in spread.legs.values():
                price_multiplier = spread.price_multipliers[leg.vt_symbol]
                trading_multiplier = spread.trading_multipliers[leg.vt_symbol]
                inverse_contract = spread.inverse_contracts[leg.vt_symbol]

                leg_setting = {
                    "vt_symbol": leg.vt_symbol,
                    "price_multiplier": price_multiplier,
                    "trading_multiplier": trading_multiplier,
                    "inverse_contract": inverse_contract
                }
                leg_settings.append(leg_setting)

            spread_setting = {
                "name": spread.name,
                "leg_settings": leg_settings,
                "active_symbol": spread.active_leg.vt_symbol,
                "min_volume": spread.min_volume
            }

            setting.append(spread_setting)

        save_json(self.setting_filename, setting)

        # For advanced spread
        setting = []

        for spread in self.spreads.values():
            if not isinstance(spread, AdvancedSpreadData):
                continue

            leg_settings = []
            for variable, vt_symbol in spread.variable_symbols.items():
                trading_direction = spread.variable_directions[variable]
                price_multiplier = spread.price_multipliers[vt_symbol]
                trading_multiplier = spread.trading_multipliers[vt_symbol]
                inverse_contract = spread.inverse_contracts[vt_symbol]

                leg_setting = {
                    "variable": variable,
                    "vt_symbol": vt_symbol,
                    "trading_direction": trading_direction,
                    "trading_multiplier": trading_multiplier,
                    "inverse_contract": inverse_contract
                }
                leg_settings.append(leg_setting)

            spread_setting = {
                "name": spread.name,
                "leg_settings": leg_settings,
                "price_formula": spread.price_formula,
                "active_symbol": spread.active_leg.vt_symbol,
                "min_volume": spread.min_volume
            }

            setting.append(spread_setting)

        save_json(self.advanced_filename, setting)
Beispiel #14
0
 def save_setting(self):
     """"""
     setting = self.get_setting()
     save_json(self.setting_filename, setting)