1.9 运行日志与回测历史

适用版本 V2V3

本篇重点:本篇讲怎么用运行日志排查问题,以及怎么在回测历史里找回、复现和管理每一次回测。

1 系统日志面板

主界面右侧一栏是「系统日志」分组,从上到下是:日志显示区、「日志类型过滤」一排复选框、一排按钮。

跑完一次示例回测后的「系统日志」面板:上方是日志内容,下方是「日志类型过滤」的五个复选框和四个按钮
跑完一次示例回测后的「系统日志」面板:上方是日志内容,下方是「日志类型过滤」的五个复选框和四个按钮

1.1 日志级别和颜色

级别 颜色 内容
DEBUG 浅紫色 调试信息。正常运行时软件基本不输出这一级,主要在点「测试日志」时出现
INFO 白色 常规运行信息:启动、加载配置、回测开始和结束、策略里的 logging.info,以及回测中的「生成买入信号」「生成卖出信号」「每日统计」
WARNING 橙色 需要注意但不影响运行的情况,例如周期不匹配后继续运行、部分股票某个时间点没有数据
ERROR 红色 出错,可能影响运行结果
TRADE 蓝色 策略里包含 [TRADE] 的日志(委托出错、资金不足等提示记为 WARNING 或 ERROR)。回测时逐笔的委托、成交回报默认不输出,买卖情况看 INFO 里的买卖信号行,或者回测报告的交易记录

出错时,面板里只显示一句错误说明;完整的错误堆栈(Traceback)写在 app.log 文件里,排查问题时去文件里看。

1.2 按级别过滤

「日志类型过滤」后面有 DEBUG、INFO、WARNING、ERROR、TRADE 五个复选框,默认全部勾选。取消勾选某一级,面板会立即重新显示,只保留勾选的级别。例如只勾 ERROR 和 TRADE,可以快速看出错信息和策略自己标记的 [TRADE] 日志;逐笔成交回报默认不输出,看成交请用回测报告的交易记录。
过滤只影响面板显示,不影响 app.log 文件。

1.3 四个按钮

  • 清空日志:清空面板上的内容,之后面板会显示一条「日志已清空」。不影响 app.log 文件。
  • 保存日志:弹出保存对话框,把面板上当前显示的内容(已经按过滤条件筛过的)保存成 .txt 文件。默认保存到日志文件夹,文件名形如 log_时间戳.txt。
  • 测试日志:生成几条不同级别的示例日志和一条示例交易记录,用来确认面板显示和颜色是否正常。
  • 回测历史管理:打开回测历史窗口,见本篇第 4 节。
只勾选 ERROR 和 TRADE 后的面板。这次回测既没有出错,也没有 TRADE 日志,所以面板是空的
只勾选 ERROR 和 TRADE 后的面板。这次回测既没有出错,也没有 TRADE 日志,所以面板是空的

点「测试日志」会输出几条示例,可以看到各级别的颜色:

点「测试日志」后的面板:紫色 DEBUG、白色 INFO、橙色 WARNING、红色 ERROR、蓝色 TRADE 各有示例;这些示例同样按延迟显示,约 3 秒后出现
点「测试日志」后的面板:紫色 DEBUG、白色 INFO、橙色 WARNING、红色 ERROR、蓝色 TRADE 各有示例;这些示例同样按延迟显示,约 3 秒后出现

1.4 和日志有关的两项设置

在工具栏「设置」→「基本设置」里:

  • 延迟显示日志(默认开启):回测运行期间,日志先缓存起来,回测结束后一次显示到面板。回测过程中面板比较安静,速度也更快。想边跑边看日志时关闭这一项。
  • 最大日志显示行数(默认 1000,范围 100~100000):面板最多保留多少行,超出后删掉最早的行。按级别过滤时,也只能在保留下来的这些行里筛选。

回测进度不逐条打印在面板里,显示在主窗口底部状态栏的进度条上(「回测进度: xx%」)。

提示

面板行数有限,长回测的早期日志会被挤掉。需要完整记录时,直接看 app.log 文件。

2 日志文件 app.log

V2 的日志文件在:

%LOCALAPPDATA%\KhQuantOS\logs\app.log

在资源管理器地址栏输入 %LOCALAPPDATA%\KhQuantOS\logs 回车即可打开。软件每次启动时,会在日志里写一行「日志文件路径: …」,也可以从这里确认位置。
文件规则:

  • 记录 INFO 及以上级别,包括出错时的完整堆栈。
  • 每次启动接着往后写,不会清空。单个文件超过 20MB 时自动换新文件,旧文件依次改名为 app.log.1 到 app.log.5,最多保留 5 个。
  • 数据管理窗口有自己的日志区,它的日志不进主界面面板。

反馈问题时,把出错前后的 app.log 内容一起提供,定位会快很多。

3 在策略里写日志

策略文件开头的 from khQuantImport import * 已经带入了 logging,直接调用即可:

from khQuantImport import *

def khHandlebar(data):
    logging.info("进入买入条件判断")                   # INFO,白色
    logging.warning("行情为空,本次跳过")               # WARNING,橙色
    logging.error("指标计算出错")                       # ERROR,红色
    logging.info("[TRADE] 满足条件,准备买入")          # 包含 [TRADE],显示为 TRADE,蓝色
    return []

几点说明:

  • logging.debug() 的内容不会记录,面板和文件里都看不到。调试时用 logging.info()。
  • print() 的内容不显示在系统日志面板里。
  • 消息里带 [TRADE] 时,面板会把它当作 TRADE 级别显示,并去掉这个标记。
  • 想让某条信息醒目,用 WARNING 或 ERROR。不要在每次触发里都打印大量内容,Tick 或分钟触发时日志会非常多,既拖慢回测,也会把面板里的早期内容挤掉。
V3 亮点策略报错时,用 V3 断点调试
在 V2 里,策略报错后只能看日志里的错误说明和 app.log 里的堆栈,再回到代码里猜是哪个变量出了问题。V2 在策略代码第一次报错时,日志里会出现一条提示:「V3 内置 VSCode 编辑器,可以在策略代码里打断点、逐行查看变量,查错更快」。
在 V3 Windows 版里,可以在可疑的那一行设断点,回测跑到这里自动停下,直接看到这一刻的行情数据、持仓和每个变量的值,再一行一行往下执行。(macOS 版没有内置编辑器;Linux 没有图形界面,用自己的编辑器。)

在策略代码的行号左边点一下,出现红点就是断点(图片来自2.7《内置编辑器》)
在策略代码的行号左边点一下,出现红点就是断点(图片来自2.7《内置编辑器》)

4 回测历史管理

4.1 每次回测自动存档

每次回测正常跑完,软件都会新建一个独立的文件夹保存这次的结果,不会覆盖、也不会复用以前的文件夹,连续快速运行两次也一样。V2 的位置是:

%LOCALAPPDATA%\KhQuantOS\backtest_results\

每个文件夹对应一次回测,文件夹名形如 strategy_5448e98d-123a4b5c_20250101_20250703_20260930_073257(依次是策略名的编码、保证每次不重名的后缀、回测起止日期、运行时间)。里面有:

  • config.csv:回测配置;
  • trades.csv:交易明细;
  • daily_stats.csv:每日统计;
  • benchmark.csv:本次回测的基准指数数据(每次都由这次运行生成);
  • summary.csv:汇总指标;
  • 当时的策略文件(.py)、配置文件(.kh)副本,以及这次运行实际使用的完整配置(文件名以 full_ 开头的 .kh,例如 full_temp_running_config.kh;内存不足自动重跑、命令行运行时文件名会不同)。

回测报告窗口就是读取这些文件生成的。在报告窗口点「导出回测结果」可以直接打开这个文件夹(见 1.10)。

注意

「设置」→「基本设置」里的「停止后直接退出」默认开启。开启时,回测中途点「停止运行」,不显示报告,也不保存这次记录。需要保留中途停止的结果时,先关闭这一项。

4.2 打开回测历史窗口

点主界面右侧「系统日志」面板下方的「回测历史管理」按钮,打开「回测历史结果管理器」。窗口打开后在后台扫描所有记录,记录多时需要等几秒。窗口底部的状态栏会显示扫描结果,例如「已加载 2 个有效结果,隔离 1 个不完整结果」。
表格各列:选择、策略名称、开始日期、结束日期、初始资金、最终资产、总收益率、年化收益率、最大回撤、创建时间、操作。点列标题可以按这一列排序;注意收益率、回撤这几列目前按文字排序,不一定是数值大小顺序,比较时以数字为准。

「回测历史结果管理器」:上方是工具栏,表格里每行一次回测,最右边「操作」列有「报告」「还原」「删除」三个按钮
「回测历史结果管理器」:上方是工具栏,表格里每行一次回测,最右边「操作」列有「报告」「还原」「删除」三个按钮

窗口上方的工具栏:

  • 刷新列表:重新扫描回测结果文件夹。
  • 删除选中:删除「选择」列里勾选的所有记录。
  • 搜索:输入策略名称或日期,表格只显示匹配的记录。
  • 筛选:全部、最近7天、最近30天、最近90天、自定义日期。
  • 显示不完整结果(N):默认不勾选,括号里是不完整记录的条数。中途中断、缺少配置或统计文件的记录默认隐藏,勾选后才显示,可以一并删除。

4.3 每条记录的三个按钮

  • 报告:打开这次回测的报告窗口,内容和回测刚跑完时一样。报告怎么看见《1.10 看懂回测报告》。
  • 还原:把这次回测的配置恢复到主界面。点击后会弹出确认框,确认后:
    1. 把存档里的策略文件和 .kh 配置文件复制回原来的位置;原位置有同名文件时会被覆盖。
    2. 优先读取这次运行的完整配置(结果文件夹里以 full_ 开头的 .kh),把回测区间、股票池、触发方式、初始资金、数据字段勾选等参数填回主界面。内存不足自动重跑的回测、命令行跑的回测也一样能还原。
    3. 弹窗列出已还原的内容和警告(例如存档里没有找到 .kh 文件)。
    还原之后直接点「开始运行」,用的就是那次回测实际使用的配置。还原之后点「保存配置」,会让你另存为一个新文件,不会覆盖之前打开的 .kh。
  • 删除:弹出确认框,确认后删除这条记录的整个文件夹,不能恢复。
注意

「还原」会覆盖原路径下的同名策略文件。如果你在上次回测之后又改过策略,而且想保留改动,先把当前策略文件另存一份再还原。

4.4 什么时候用

  • 复现:隔一段时间想重跑某次结果,点「还原」,参数和策略文件都回到当时的状态,再点「开始运行」。
  • 对比:改了参数跑了几次,在表格里对比总收益率和最大回撤,再逐个点「报告」看细节。
  • 清理:试验性的回测多了,用搜索或筛选找出来,勾选后点「删除选中」。
V3 差异V3 的日志和回测历史

V3 的系统日志面板、过滤和四个按钮与 V2 相同;回测历史管理窗口的列和「报告」「还原」「删除」按钮也相同,更完整的说明见附录 A 第 12 节「回测结果的存放与管理」。另外,V3 的 Web 回测工作台有统一的历史结果列表,命令行里用 kh result 可以列出、查看和对比历史回测。
日志文件位置不同:V3 在 Windows 上优先写到程序目录旁的 logs 文件夹,写不进去时改用 用户目录\KhQuant\logs;macOS 在 ~/Library/Logs/khQuant/。可以从启动日志里的「日志文件路径」确认。

常见问题

问:面板里只看到一句错误,不知道哪一行出错?
答:打开 %LOCALAPPDATA%\KhQuantOS\logs\app.log,搜索这句错误,下面就是完整的堆栈,能看到出错的文件和行号。

问:策略里写了 logging.debug(),怎么看不到?
答:日志只记录 INFO 及以上级别,logging.debug() 的内容不会记录。改用 logging.info()。

问:回测时日志面板一直不动,是卡住了吗?
答:多半是开启了「延迟显示日志」(默认开启),日志会在回测结束后一次显示。进度看窗口底部的进度条。

问:中途停止的回测为什么在历史记录里找不到?
答:「停止后直接退出」开启时,手动停止的回测不保存记录。另外,缺少配置或统计文件的记录默认隐藏,勾选「显示不完整结果」可以看到。

问:删除的回测记录能找回吗?
答:不能。删除会直接删掉整个结果文件夹。

V3

策略报错时,V3 能直接定位到那一行
  • 内置 VSCode 断点调试(Windows 版):停在出错行,查看每个变量
  • Web 工作台:统一查看历史结果,关掉浏览器任务照常运行
  • CLI:kh result 列出、对比历史回测

本篇基于开源 V2 和 V3.4.1.10 编写。

×
没有账号?注册  忘记密码?

风险提示

投资有风险,开户需谨慎。本系统仅为投资者提供量化交易相关的数据处理与分析工具,不构成任何投资建议。 请您在审慎思考后作出选择。特别声明:本系统对您与券商之间的交易、合作不承担任何法律责任。 市场有风险,投资需谨慎。

© 2024 khQuant看海量化回测平台 版权所有

官网:www.khsci.com/khQuant