vn.py量化社区
By Traders, For Traders.
Member
加入于:
帖子: 11
声望: 2

官方图形化回测界面是vnpy/app/cta_backtester/ui/widget.py中的BacktesterManager__init__()方法最后调用逻辑是这样的:

# vnpy/app/cta_backtester/ui/widget.py BacktesterManager __init__()
self.init_ui() # 初始化界面
self.register_event()
self.backtester_engine.init_engine()
self.init_strategy_settings() # 初始化策略配置

init_ui()方法里有一段代码似乎是从cta_backtester_setting.json中读取上一次回测时使用的策略,配置为默认策略:

# vnpy/app/cta_backtester/ui/widget.py BacktesterManager init_ui()
# Load setting
setting = load_json(self.setting_filename)
if not setting:
    return

self.class_combo.setCurrentIndex(
    self.class_combo.findText(setting["class_name"])
)

self.class_combo此时还没有添加任何策略选项,所以self.class_combo.findText(setting["class_name"])始终返回的是-1,没有实现设置当前策略为上一次回测策略的效果。

self.class_combo是在init_strategy_settings()方法里才添加了策略选项:

# vnpy/app/cta_backtester/ui/widget.py BacktesterManager
def init_strategy_settings(self):
    """"""
    self.class_names = self.backtester_engine.get_strategy_class_names()

    for class_name in self.class_names:
        setting = self.backtester_engine.get_default_setting(class_name)
        self.settings[class_name] = setting

    self.class_combo.addItems(self.class_names) # 给`self.class_combo`添加策略选项

所以可能应该将设置当前策略为上一次回测策略的代码改到init_strategy_settings()方法里:

def init_strategy_settings(self):
    """"""
    self.class_names = self.backtester_engine.get_strategy_class_names()

    for class_name in self.class_names:
        setting = self.backtester_engine.get_default_setting(class_name)
        self.settings[class_name] = setting

    self.class_combo.addItems(self.class_names) # 给`self.class_combo`添加策略选项
    # Load setting
    setting = load_json(self.setting_filename)
    # 设置当前策略为上一次回测策略
    self.class_combo.setCurrentIndex(
        self.class_combo.findText(setting["class_name"])
    )
Administrator
avatar
加入于:
帖子: 4607
声望: 264

确实是有这个问题,已在DEV分支修复

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

沪公网安备 31011502017034号