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一样的出处。
浙公网安备 33010602011771号