Пример #1
0
    def remove_algo_setting(self, setting_name: str):
        """"""
        if setting_name not in self.algo_settings:
            return
        self.algo_settings.pop(setting_name)

        event = Event(EVENT_ALGO_SETTING)
        event.data = {"setting_name": setting_name, "setting": None}
        self.event_engine.put(event)

        self.save_algo_setting()
Пример #2
0
 def write_log(self, msg: str):
     """"""
     event = Event(
         EVENT_RECORDER_LOG,
         msg
     )
     self.event_engine.put(event)
Пример #3
0
 def put_strategy_event(self, strategy: CtaTemplate):
     """
     Put an event to update strategy status.
     """
     data = strategy.get_data()
     event = Event(EVENT_CTA_STRATEGY, data)
     self.event_engine.put(event)
Пример #4
0
 def write_log(self, msg: str, source: str = "") -> None:
     """
     Put log event with specific message.
     """
     log = LogData(msg=msg, gateway_name=source)
     event = Event(EVENT_LOG, log)
     self.event_engine.put(event)
Пример #5
0
    def write_log(self, msg: str, algo: AlgoTemplate = None):
        """"""
        if algo:
            msg = f"{algo.algo_name}:{msg}"

        log = LogData(msg=msg, gateway_name=APP_NAME)
        event = Event(EVENT_ALGO_LOG, data=log)
        self.event_engine.put(event)
Пример #6
0
 def write_log(self, msg: str):
     """"""
     log = LogData(
         msg=msg,
         gateway_name=APP_NAME
     )
     event = Event(EVENT_SPREAD_LOG, log)
     self.event_engine.put(event)
Пример #7
0
    def write_log(self, msg: str, strategy: CtaTemplate = None):
        """
        Create cta engine log event.
        """
        if strategy:
            msg = f"{strategy.strategy_name}: {msg}"

        log = LogData(msg=msg, gateway_name=APP_NAME)
        event = Event(type=EVENT_CTA_LOG, data=log)
        self.event_engine.put(event)
Пример #8
0
    def _query_history(self, vt_symbol: str, interval: Interval,
                       start: datetime, end: datetime) -> None:
        """"""
        contract: ContractData = self.main_engine.get_contract(vt_symbol)

        req = HistoryRequest(symbol=contract.symbol,
                             exchange=contract.exchange,
                             interval=interval,
                             start=start,
                             end=end)

        if contract.history_data:
            data = self.main_engine.query_history(req, contract.gateway_name)

            event = Event(EVENT_CHART_HISTORY, data)
            self.event_engine.put(event)
Пример #9
0
    def process_order_event(self, event: Event):
        """"""
        order: OrderData = event.data

        if order.vt_orderid not in self.active_orders:
            return

        if not order.is_active():
            self.active_orders.remove(order.vt_orderid)

        strategy: PortfolioStrategy = self.order_strategy_map[order.vt_orderid]
        strategy_order = copy(order)
        strategy_order.gateway_name = strategy.name

        event = Event(EVENT_PORTFOLIO_ORDER, strategy_order)
        self.event_engine.put(event)
Пример #10
0
    def process_trade_event(self, event: Event):
        """"""
        trade: TradeData = event.data

        strategy: PortfolioStrategy = self.order_strategy_map.get(
            trade.vt_orderid)
        if strategy:
            strategy.update_trade(trade.direction, trade.volume, trade.price)

            self.put_strategy_event(strategy.name)

            strategy_trade = copy(trade)
            strategy_trade.gateway_name = strategy.name
            event = Event(EVENT_PORTFOLIO_TRADE, strategy_trade)
            self.event_engine.put(event)

            self.save_setting()
Пример #11
0
    def put_event(self):
        """"""
        tick_symbols = list(self.tick_recordings.keys())
        tick_symbols.sort()

        bar_symbols = list(self.bar_recordings.keys())
        bar_symbols.sort()

        data = {
            "tick": tick_symbols,
            "bar": bar_symbols
        }

        event = Event(
            EVENT_RECORDER_UPDATE,
            data
        )
        self.event_engine.put(event)
Пример #12
0
    def run(self):
        """"""
        while self.active:
            try:
                task = self.queue.get(timeout=1)
                task_type, data = task

                if task_type == "tick":
                    database_manager.save_tick_data([data])
                elif task_type == "bar":
                    database_manager.save_bar_data([data])

            except Empty:
                continue

            except Exception:
                self.active = False

                info = sys.exc_info()
                event = Event(EVENT_RECORDER_EXCEPTION, info)
                self.event_engine.put(event)
Пример #13
0
 def put_parameters_event(self, algo: AlgoTemplate, parameters: dict):
     """"""
     event = Event(EVENT_ALGO_PARAMETERS)
     event.data = {"algo_name": algo.algo_name, "parameters": parameters}
     self.event_engine.put(event)
Пример #14
0
 def put_strategy_event(self, name: str):
     """"""
     strategy = self.strategies[name]
     event = Event(EVENT_PORTFOLIO_UPDATE, strategy)
     self.event_engine.put(event)
Пример #15
0
 def put_setting_event(self, setting_name: str, setting: dict):
     """"""
     event = Event(EVENT_ALGO_SETTING)
     event.data = {"setting_name": setting_name, "setting": setting}
     self.event_engine.put(event)
Пример #16
0
 def put_event(self, event_type: str, data: Any) -> None:
     """"""
     event = Event(event_type, data)
     self.event_engine.put(event)
Пример #17
0
    def run_backtesting(
        self,
        class_name: str,
        vt_symbol: str,
        interval: str,
        start: datetime,
        end: datetime,
        rate: float,
        slippage: float,
        size: int,
        pricetick: float,
        capital: int,
        inverse: bool,
        setting: dict
    ):
        """"""
        self.result_df = None
        self.result_statistics = None

        engine = self.backtesting_engine
        engine.clear_data()

        engine.set_parameters(
            vt_symbol=vt_symbol,
            interval=interval,
            start=start,
            end=end,
            rate=rate,
            slippage=slippage,
            size=size,
            pricetick=pricetick,
            capital=capital,
            inverse=inverse
        )

        strategy_class = self.classes[class_name]
        engine.add_strategy(
            strategy_class,
            setting
        )

        engine.load_data()

        try:
            engine.run_backtesting()
        except Exception:
            msg = f"策略回测失败,触发异常:\n{traceback.format_exc()}"
            self.write_log(msg)

            self.thread = None
            return

        self.result_df = engine.calculate_result()
        self.result_statistics = engine.calculate_statistics(output=False)

        # Clear thread object handler.
        self.thread = None

        # Put backtesting done event
        event = Event(EVENT_BACKTESTER_BACKTESTING_FINISHED)
        self.event_engine.put(event)
Пример #18
0
 def put_algo_event(self, algo: SpreadAlgoTemplate) -> None:
     """"""
     event = Event(EVENT_SPREAD_ALGO, algo)
     self.event_engine.put(event)
Пример #19
0
 def put_pos_event(self, spread: SpreadData) -> None:
     """"""
     event = Event(EVENT_SPREAD_POS, spread)
     self.event_engine.put(event)
Пример #20
0
 def put_data_event(self, spread: SpreadData) -> None:
     """"""
     event = Event(EVENT_SPREAD_DATA, spread)
     self.event_engine.put(event)
Пример #21
0
 def put_strategy_event(self, strategy: SpreadStrategyTemplate):
     """"""
     data = strategy.get_data()
     event = Event(EVENT_SPREAD_STRATEGY, data)
     self.event_engine.put(event)
Пример #22
0
 def put_variables_event(self, algo: AlgoTemplate, variables: dict):
     """"""
     event = Event(EVENT_ALGO_VARIABLES)
     event.data = {"algo_name": algo.algo_name, "variables": variables}
     self.event_engine.put(event)
Пример #23
0
    def run_optimization(
        self,
        class_name: str,
        vt_symbol: str,
        interval: str,
        start: datetime,
        end: datetime,
        rate: float,
        slippage: float,
        size: int,
        pricetick: float,
        capital: int,
        inverse: bool,
        optimization_setting: OptimizationSetting,
        use_ga: bool
    ):
        """"""
        if use_ga:
            self.write_log("开始遗传算法参数优化")
        else:
            self.write_log("开始多进程参数优化")

        self.result_values = None

        engine = self.backtesting_engine
        engine.clear_data()

        engine.set_parameters(
            vt_symbol=vt_symbol,
            interval=interval,
            start=start,
            end=end,
            rate=rate,
            slippage=slippage,
            size=size,
            pricetick=pricetick,
            capital=capital,
            inverse=inverse
        )

        strategy_class = self.classes[class_name]
        engine.add_strategy(
            strategy_class,
            {}
        )

        if use_ga:
            self.result_values = engine.run_ga_optimization(
                optimization_setting,
                output=False
            )
        else:
            self.result_values = engine.run_optimization(
                optimization_setting,
                output=False
            )

        # Clear thread object handler.
        self.thread = None
        self.write_log("多进程参数优化完成")

        # Put optimization done event
        event = Event(EVENT_BACKTESTER_OPTIMIZATION_FINISHED)
        self.event_engine.put(event)
Пример #24
0
 def put_stop_order_event(self, stop_order: StopOrder):
     """
     Put an event to update stop order status.
     """
     event = Event(EVENT_CTA_STOPORDER, stop_order)
     self.event_engine.put(event)
Пример #25
0
 def write_log(self, msg: str):
     """"""
     event = Event(EVENT_BACKTESTER_LOG)
     event.data = msg
     self.event_engine.put(event)
Пример #26
0
 def on_event(self, type: str, data: Any = None) -> None:
     """
     General event push.
     """
     event = Event(type, data)
     self.event_engine.put(event)
Пример #27
0
 def write_log(self, msg: str):
     """"""
     log = LogData(msg=msg, gateway_name="RiskManager")
     event = Event(type=EVENT_LOG, data=log)
     self.event_engine.put(event)