vn.py 的日志问题 回测策略的日志处理

在回测时,如果不用ui, 测试策略。 范例是直接使用:

   engine = BacktestingEngine()
   engine.set_parameters(**test_setting)
   engine.add_strategy(strategy, strategy_setting)
   engine.load_data()
   ...
 这样的模式使用回测平台时,有个问题,系统的write_log 不起作用。 
 
而write_log 在vn.py 里是分层的, main_engin使用的write_log 和 BacktestingEnging使用的write_log 使用了不同的封装。 
 
如果希望在回测时使用和main_engine一样的日志,并且写入文件进行好的跟踪,需要这样修改:
def main(mode="test", strategy=None, test_setting=None, strategy_setting=None):

    event_engine = EventEngine()
    main_engine = MainEngine(event_engine)

    try:
        log_engine = main_engine.get_engine("log")            
        event_engine.register(EVENT_LOG, log_engine.process_log_event)
        main_engine.write_log("加载回测引擎")   

        def process_backtester_log(event):
            log_str = event.data
            main_engine.write_log(log_str)
        
        main_engine.add_app(CtaBacktesterApp)

        event_engine.register(EVENT_BACKTESTER_LOG, process_backtester_log)

        main_engine.write_log("加载回测引擎成功")    

        backtest_engine = main_engine.get_engine(CtaBacktesterApp.app_name)
        backtest_engine.init_engine()

        backtesting_engine = backtest_engine.backtesting_engine

        backtesting_engine.set_parameters(**test_setting)
        backtesting_engine.add_strategy(strategy, strategy_setting)
        backtesting_engine.load_data()
        backtesting_engine.run_backtesting()
        result = backtesting_engine.calculate_result()
        backtesting_engine.calculate_statistics(result)

    except Exception as e:
        print(f"回测出错: {e}")       

    event_engine.stop()
    main_engine.close()

  为:EVENT_BACKTESTER_LOG增加一个处理函数, 转向和main_engin一样的出处。

 

posted on 2025-10-31 18:00  金凯旋  阅读(1)  评论(0)    收藏  举报

导航