VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 2
声望: 0

请教各位前辈:
MainEngine中add_engine()代码如下:

    def add_engine(self, engine_class: Any) -> "BaseEngine":
        engine: BaseEngine = engine_class(self, self.event_engine)
        self.engines[engine.engine_name] = engine
        return engine

使用传入的引擎类参数engine_class实例化引擎时,engine_class(self, self.event_engine)的参数怎么理解?

以添加CtaBacktesterApp为例
1、运行MainEngine.add_app(CtaBacktesterApp)
2、在add_app函数中,engine: BaseEngine = self.add_engine(app.engine_class)实际上是add_engine(CtaBacktesterApp.engine_class),CtaBacktesterApp.engine_class是BacktesterEngine
但是BacktesterEngine的初始化传参是:

    def __init__(self, main_engine: MainEngine, event_engine: EventEngine) -> None:
        """"""
        super().__init__(main_engine, event_engine, APP_NAME)

        self.classes: dict = {}
        self.backtesting_engine: BacktestingEngine = None
        self.thread: Thread = None

        self.datafeed: BaseDatafeed = get_datafeed()
        self.database: BaseDatabase = get_database()

        self.result_df: DataFrame = None
        self.result_statistics: dict = None

        self.result_values: list = None

和engine_class(self, self.event_engine)不一致,不过代码能够正常运行。
请各位前辈解答一下两者不一致但还能运行的原理。谢谢啦!

Member
avatar
加入于:
帖子: 633
声望: 34

BacktesterEngine是继承自BaseEngine的子类

Member
avatar
加入于:
帖子: 2
声望: 0

MTF wrote:

BacktesterEngine是继承自BaseEngine的子类

谢谢解答!
不过engine: BaseEngine = engine_class(self, self.event_engine)只传入了已实例化的EventEngine,但是BaseEngine、BacktesterEngine的初始化传参是:

    def __init__(self, main_engine: MainEngine, event_engine: EventEngine) -> None:
        """"""
        super().__init__(main_engine, event_engine, APP_NAME)

这两个传参不一样。麻烦大佬再帮忙给看一下,谢谢!

Member
avatar
加入于:
帖子: 633
声望: 34

上面这两个main_engine和event_engine也都是实例化出来的对象,不是类

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】