附录 A 命令参考

适用版本 V3 WindowsmacOSLinux

本篇说明

这是 kh 命令的查阅手册,按命令分节列出常用参数,少数不常用的参数(如 tool parquet-cache 的 --root、data conflicts 的各项)以 --help 为准。第一次使用请先看 2.2 命令行模式与 AI 智能策略研究。每个命令都可以加 --help 查看本机版本的帮助。

  • 没有全局参数:--json、-q、--data-root 等都写在子命令后面。kh --json … 会报错;查版本用 kh version。
  • 除 init、version、doctor、gui、bridge 外,其他命令要先运行过 kh init(或在图形界面里保存过设置)。
  • 输出前缀:OK 成功、ERR 出错、WARN 提醒、> 信息。设置环境变量 NO_COLOR 或把输出重定向到文件时不带颜色。
  • 退出码:参数写错为 2;run、data、result show/report、bridge 出错为 1;web 启动失败(端口被占用、配置文件不对)和 Linux 上的 gui 为 2。注意 config、strategy、tool 以及 data export/repair/update-pool 出错时退出码仍是 0,脚本里请检查输出文字。tool trade-day 输出的 ERR 只表示「不是交易日」,不是出错。

1 命令一览

kh
├─ init                首次配置向导
├─ config              show / set / reset
├─ run <配置.kh>       执行回测
├─ web [配置.kh]       启动网页回测工作台
├─ data                list / stats / info / download / scan / reindex /
│                      export / repair / update-pool / sync / source test / conflicts
├─ result              list / show / report / compare / clean
├─ strategy            list / create / validate / info
├─ tool                trade-day / pool / parquet-cache
├─ bridge              serve / status(服务端仅 Windows)
├─ doctor              环境诊断
├─ version             版本信息
└─ gui                 启动图形界面(Windows、macOS)

2 init、config、doctor、version、gui

kh init

交互式配置:回测数据源(Windows)、数据目录、策略目录、Tushare / BaoStock / HTTP 桥接、无风险利率,最后一步才保存。步骤和默认值见 2.2 第 4.2 节。重新运行会从默认值开始,覆盖原配置。Windows 默认放在 D 盘,没有 D 盘时默认放在用户目录下。

kh config

命令作用
kh config / kh config show列出全部配置项(中文名和值),密钥打码显示,最后显示配置文件路径
kh config set <键> <值>修改一项,先做取值检查
kh config reset确认后把所有项恢复默认(路径、Token 都会清空)

布尔值写 true 或 false。注意:true/1/yes/on/y 以外的任何文字都会被存成 false,而且不报错。常用的键见第 9 节。

kh doctor / kh version / kh gui

  • doctor:检查 Python 依赖、数据目录、数据源配置、策略目录,最后给出「总计: N 通过, M 警告」。Windows 上没开 miniQMT 时会有一条「历史行情导入源 miniqmt 未就绪」,只影响 miniQMT 下载;macOS、Linux 上这条警告总会出现,可以忽略。
  • version:显示版本号、构建日期和平台。
  • gui:启动图形界面。Linux 上提示不支持。

3 kh run

kh run [选项] 配置.kh
参数说明
配置.kh必填。先按给的路径找;找不到时到策略目录里找,.kh 可以省略
-s, --strategy 路径换用另一个策略 .py
--start / --end YYYYMMDD覆盖回测区间
-c, --capital 金额覆盖初始资金(须大于 0)
--stocks 代码,代码整个替换股票池
-p, --period覆盖周期:tick/1m/5m/1d
-q, --quiet静默,连结果摘要也不显示
-v, --verbose输出调试级日志
--report跑完生成 HTML 报告(设置 auto_report=true 时不加也会生成)
--no-open不自动打开浏览器;单独加不会生成报告,要和 --report 一起用(或 .kh 里开了自动生成报告)
--json静默运行,输出一行 JSON(值为字符串;出错时 JSON 前会先有一行 ERR,加了 --report 时 JSON 后还有一行「OK HTML 报告」);配置解析失败、配置校验失败、回测执行失败时输出 {"error": …};找不到 .kh 文件时只输出 ERR 文字,没有 JSON。两种情况退出码都是 1。.kh 请写完整路径
--data-root 目录本次用另一个 DuckDB 数据目录,不改全局设置
--memory-profile本次内存档位:auto / standard / low / ultra_low。不写时先看 .kh 里的设置,再看全局的 performance_preset,见 1.12
--no-auto-dynamic-load低内存档位下也不自动分段载入
--allow-provisional研究模式选项,对教程中的数据源没有作用
kh run 【1-MA策略案例】双均线精简_使用khMA函数.kh --stocks 000300.SH --start 20251201 --end 20260930 --report
kh run D:\CLIstrategies\my.kh --json 2>$null

覆盖项不会修改 .kh 文件本身。回测日志输出到 stderr,结果摘要输出到 stdout。

4 kh web

kh web [配置.kh] [--host 地址] [--port 端口] [--no-open]
  • 配置.kh:可选,启动时导入为项目并自动选中。
  • --host:默认 127.0.0.1(只限本机);0.0.0.0 允许局域网访问,自动生成访问密钥。
  • --port:默认 8766。端口被占用时报错退出。
  • 前台运行,Ctrl+C 停止。详见 2.6。

5 kh data

data list / stats / info

命令作用
kh data list [--market SH|SZ|BJ] [--period 1d|1m|5m|tick]列出库里的证券。全新的空库会报 metadata.db 不存在,下载一次数据后正常
kh data stats各市场的证券数、文件数、磁盘占用
kh data info 代码一只证券的文件位置和各周期条数、起止时间。代码必须带后缀

data download

kh data download --source 数据源 --stocks … / --pool … / --file …(至少一个,可组合,会合并去重) [选项]
参数说明
--source必填:tx(即 tencent)、baostock、tushare、ths(同花顺)、http(HTTP 桥接);Windows 另有 miniqmt(别名 xtdata)
--stocks代码,逗号分隔。6 位数字会自动补后缀,可转债请自己写后缀
--pool预设股票池 id,可逗号组合,见第 10 节
--fileCSV 文件(UTF-8),自动找代码列,找不到用第一列
--period周期,可多选,默认 1d。实际可用的见下表
--start / --end默认 2020-01-01 到今天(同花顺默认近 3 年;tx 分钟线默认取接口能给的全部)
--adj复权,可多选:none,front,back,front_ratio,back_ratio。tx 默认 none,其他默认 front
--force强制按区间重新下载、覆盖已有数据
--skip-benchmark不自动补沪深 300 基准(默认每次都会先补)
--data-root 目录下载到另一个目录,仅 tx、同花顺支持
--workers N并发数,默认 2,仅 miniQMT、BaoStock 使用
--allow-gaps仅 tx 分钟线:超出保留期时只下能拿到的部分,不能与 --force 同用
--repair-volume-units仅 tx:核验并修复旧库里以「股」为单位的成交量(先备份)
--db-write-modeauto(默认)/ normal / short-lock,一般不用改
--direct-range、--empty-data-policy、--summary-json主要供 miniQMT 下载使用(--summary-json 对 tx 也有效,写入下载记录)
数据源周期复权前提
tx1d 1m 5m5 种无
baostock1d 5mnone front back无
tushare1d 1m 5mnone front backtushare_token 及积分权限
ths1dnone front backths_api_key
http1d 1m 5m tick5 种http_base_url、http_api_key
miniqmt1d 1m 5m tick5 种Windows,miniQMT 已登录
kh data download --source tx --stocks 000300.SH,000001.SH --start 20251001 --adj front
kh data download --source baostock --pool hs300
kh data download --source http --stocks 000001.SZ --period 1d,5m --adj none,front

各数据源的详细说明见 2.3。

data scan / sync / update-pool

命令参数和说明
kh data scan按交易日检查缺口。--period(单个,默认 1d)、--stocks、--start(默认 20200101)、--end、--fix(补缺;有股票补缺失败时退出码为 1)、--source(补缺用的数据源;用 tx 补缺只补不复权,其他源补前复权)、--allow-gaps。有缺口退出码仍为 0,有扫描失败为 1
kh data sync给库里全部证券补今天的数据。--period(可多选)、--source、--schedule HH:MM(前台常驻,工作日定时执行)、--allow-gaps。复权固定:tx 不复权,其他前复权
kh data update-pool更新预设板块成分股列表。默认优先用 miniQMT,取不到改用 BaoStock;写了 --source miniqmt 而 miniQMT 没开时直接报错退出(退出码 1)

不写 --source 时的自动选择顺序:配置了 Tushare Token → tushare;启用了 BaoStock → baostock;Windows 安装版(自带 xtquant)→ miniqmt,miniQMT 没开会直接报错;否则 baostock。tx、同花顺不会被自动选中。详见 2.3。

data export / reindex / repair

命令参数和说明
kh data export 代码--period(默认 1d)、--start、--end、--output(默认当前目录 代码_周期.csv)。导出行情列(不含 dividend_type、update_time),第一列是无表头的行号。代码必须带后缀
kh data reindex核对数据文件和索引是否一致,默认只预览;--fix 备份后补登记;--workers(1~16,默认 8)
kh data repair处理异常退出留下的 WAL 文件。--db-path、--memory-limit(默认 256MB)。修复时(成功也一样)会把原文件备份到数据目录下的 _wal_repair_quarantine_时间 文件夹、原位置换成空库;命令总是显示「OK 修复完成」,运行前请先关闭软件,运行后检查有没有这个文件夹

data source test / conflicts

  • kh data source test --source 数据源:检查数据源能否使用。tx 和同花顺会真的联网取一次数据;tushare 只检查有没有配置 Token,不验证 Token 是否有效;baostock 只检查组件是否齐全。
  • kh data conflicts list / export / resolve:跨数据源冲突记录。当前版本的数据源不会产生冲突记录,执行后只会提示「当前没有跨来源冲突记录」。

6 kh result

命令参数和说明
kh result list默认最近 20 个;--all 全部;--strategy 名字 按策略名过滤(不加 --all 时只在最近 20 个里过滤;过滤后的序号不能用于 --id);--json(收益、回撤是 "+1.23%" 这样的字符串)
kh result show [文件夹名]默认最近一次;--id N 为 list 的第 N 个;--json(数值为数字)
kh result report [文件夹名]生成 HTML 报告。--id、--index(生成全部结果的索引页)、--no-open、--output 路径、--data-root 目录
kh result compare--last N,对比最近 N 次(默认 3)
kh result clean--keep N 保留最近 N 个(默认 10),其余直接删除不确认;--dry-run 只预览

序号按结果文件夹的修改时间排列。详见 2.2 第 4 节。

7 kh strategy

命令说明
kh strategy list [--dir 目录]列出策略目录里的 .py 和同名 .kh
kh strategy create 名称 [--dir 目录]生成空白策略 名称.py 和配置 名称.kh
kh strategy validate 路径.py执行策略文件后检查必需和可选的回调函数。要写 .py 的路径
kh strategy info 路径.py静态查看函数、import 和有没有配套 .kh

8 kh tool、kh bridge

命令说明
kh tool pool [id]不带 id 列出全部预设股票池;带 id 打印该池全部代码
kh tool trade-day [日期]判断是否交易日;--range-start 和 --range-end 同时给时列出区间内的交易日。它按法定节假日推算,个别调休日可能与交易所日历不一致,以交易所公告为准
kh tool parquet-cache stats / list查看 Parquet 缓存(见 1.12)。--root 指定缓存目录
kh tool parquet-cache check / build 配置.kh检查能否命中 / 构建缓存。build 可加 --batch-size --workers --compression --force
kh tool parquet-cache use-readonly 配置.kh生成一个使用只读缓存的 .kh 副本;--in-place 直接改原文件
kh tool parquet-cache clean清理缓存,不加 --yes 只预览;--older-than-days N
kh bridge serveWindows + miniQMT 上开 HTTP 桥接服务。--host(默认 127.0.0.1,局域网用 0.0.0.0)、--port(默认 8001)、--api-key、--qmt-path。见 2.3 第 4 节
kh bridge status检查桥接服务是否在运行。--url,或 --port(未配置地址时使用)

Parquet 缓存这组命令的输出是英文的。

9 常用配置项(kh config set)

键取值默认说明
duckdb_data_path目录空数据目录(不检查是否存在)
strategy_dir目录空策略目录
backtest_data_sourceduckdb / miniqmtduckdb回测数据源;Web 回测只支持 duckdb
tushare_token字符串空Tushare Token(只是编码保存,不是加密)
tushare_api_url、tushare_use_proxy、tushare_proxy_url空 / false / 空Tushare 镜像地址和代理
ths_api_key字符串空同花顺 API Key
http_base_url、http_api_keyURL、字符串空HTTP 桥接服务地址和 Key
baostock_enabled布尔false(kh init 默认开启)影响 scan / sync 的自动选源
qmt_path、client_path目录空Windows:miniQMT 的数据目录和客户端路径
risk_free_rate0~10.03无风险利率
volume_limit_enabled、participation_rate、allow_partial_fill布尔、0~1、布尔false、0.1、true成交量限制(见 1.12)
auto_report布尔false为 true 时 kh run 总是生成报告
check_data_integrity_modeauto/full/offauto回测前数据检查(命令行 kh run 不执行)
performance_presetbalanced/performance/low_memorybalanced数据加载模式,会连带重置详细性能项
performance_framework_history_preload_days0~2000300历史预热天数(自然日)
performance_duckdb_parallel_read_workers1~644并行读取线程
performance_parquet_cache_packoff/read_only/build_then_readoffParquet 缓存模式

完整列表以 kh config show 为准。配置文件位置:Windows %USERPROFILE%\.khquant\settings.json,Linux ~/.khquant/settings.json,macOS ~/Library/Application Support/khQuant/settings.json。图形界面、命令行和 Web 共用这个文件,请用 kh config 或界面修改,不要手动编辑。

10 预设股票池(--pool)

id名称id名称
sz50上证50sza深证A股(仅命令行)
hs300沪深300etf沪深ETF
zz500中证500fund沪深场内基金(含ETF/LOF)
gem创业板t0etfT0型ETF
star科创板t0stockT0股票型ETF
a沪深A股bond沪深转债(仅命令行)
sha上证A股index常用指数

id 不分大小写,可以逗号组合,如 --pool hs300,zz500。图形界面和 Web 里的「自选清单」在命令行里没有对应 id。用 kh data update-pool 更新过的成分股列表优先于安装包自带的。

11 环境变量

变量作用
NO_COLOR关闭输出颜色
HITHINK_FINANCE_API_KEY / THS_API_KEY同花顺 API Key,优先于配置文件
KHQUANT_WEB_ACCESS_KEYkh web 的访问密钥,设了以后总是要求密钥
KHQUANT_WEB_ALLOWED_HOSTSWeb 允许访问的域名,逗号分隔(反向代理时用)
KHQUANT_CLOUDFLARED_PATHcloudflared 程序路径,所有平台都优先用它(Linux 或源码运行时必须设置或放进 PATH)
KHQUANT_MARKET_TZ仅 Linux:行情时间所用时区,默认 Asia/Shanghai
KHQUANT_DUCKDB_LOCK_WAIT_SECONDS下载时等待数据库占用解除的最长秒数,默认 600
KHQUANT_WEB_STATE_DIRWeb 项目和日志的存放目录

软件启动时会自动把 PYTHONHASHSEED 固定为 0,保证结果可复现,不需要自己设置。

▶ 本节视频:附录 A · 回测结果的存放与管理

12 回测结果的存放与管理

图形界面、kh 命令和 Web 工作台的回测结果存在同一个目录,三边看到的是同一批结果。命令行查看、对比、生成报告见 2.2 第 5.1 节;界面里「回测历史管理」窗口的基本用法见 1.9。

12.1 结果存在哪里

平台位置
Windows%LOCALAPPDATA%\KhQuant\backtest_results
macOS~/Library/Application Support/khQuant/backtest_results
Linux~/khquant/backtest_results
  • V3.4.0 以前的 Windows 安装版把结果写在安装目录里,新版仍会读取那里的旧结果,不会移动它们。
  • V2 的结果在另一个目录(%LOCALAPPDATA%\KhQuantOS\backtest_results),V3 不会读取。想在 V3 里看,把对应的结果文件夹复制到 V3 的结果目录。
图形界面的「回测历史结果管理器」,命令行和 Web 跑出来的结果也会出现在这里
图形界面的「回测历史结果管理器」,命令行和 Web 跑出来的结果也会出现在这里

12.2 一个结果文件夹里有什么

文件夹名形如 strategy_b429b43e-123a4b5c_20250101_20260930_20261003_194513:依次是策略编码(由策略文件名算出)、防重名后缀、回测起止日期和运行时间。同一个策略改参数跑多次,文件夹名只有后缀和运行时间不同。

从 Web 工作台发起的回测,文件夹名末尾还会多一段 _run_编号。

文件内容
summary.csv汇总指标:初始资金、最终资金、总收益、年化收益、最大回撤(百分数)、交易天数
daily_stats.csv每日总资产、现金、持仓市值、当日收益、基准收盘价和净值、持仓明细
trades.csv每笔成交:时间、代码、方向、价格、数量、金额、佣金、印花税、过户费、流量费、成交后的资产
benchmark.csv基准每日收盘价(从回测开始日前几天开始)
config.csv基本信息:区间、资金、基准、策略文件、股票池、周期、复权、数据目录、运行耗时、内存档位
full_*.kh这次实际运行的完整配置,包括交易成本、触发方式等。界面跑的叫 full_temp_running_config.kh,命令行跑的叫 full__tmp_…kh
策略名.py运行时策略代码的副本
策略名.kh策略文件旁边同名 .kh 的副本(有才复制,不一定是本次用的配置)
report.htmlHTML 报告,见 2.2 第 5.2 节(界面回测默认不生成)
duckdb_lock_skips.csv只在有行情因数据库被占用而跳过时出现
run_meta.json只在 Web 发起的回测里出现

config.csv 不记录交易成本和触发方式,要完整复现一次回测,以 full_*.kh 为准。回测中途停止或出错时,文件夹里可能缺 summary.csv,这就是「不完整结果」。

12.3 在图形界面里管理

「回测历史管理」窗口的列、按钮和基本操作见 1.9。补充几点:

  • 搜索和筛选不叠加:搜索框匹配策略名称和起止日期;「筛选」按创建时间看最近 7、30、90 天(「自定义日期」目前不起作用)。两者后操作的那个生效。
  • 删除要小心:「删除选中」会删掉所有勾选过的行,包括被搜索、筛选暂时隐藏的行。删除直接删文件夹,不进回收站。
  • 「还原」会覆盖文件:它把结果里的策略 .py(和同名 .kh)复制回原来的路径并覆盖,再把配置填回主界面。还原前确认原路径的策略不需要保留。
  • 还原读取的是本次运行保存的 full_*.kh,命令行跑出的结果同样适用(命令行上改过的区间、资金也在里面)。
  • 「报告」打开的是和回测刚结束时一样的报告窗口(见 1.10),不是 HTML 报告。

12.4 清理和备份

方式删什么注意
界面行内「删除」这一条有确认框
界面「删除选中」所有勾选行隐藏的勾选行也会删
Web 历史结果页删除这一条远程访问也能删
kh result clean --keep N最近 N 个以外的全部没有确认,先 --dry-run
手动删文件夹任意三端下次刷新都会消失

以上方式删除后都无法恢复。重要的结果请先把整个文件夹复制到别处保存。

问:V2 的回测历史怎么带到 V3?
答:把 %LOCALAPPDATA%\KhQuantOS\backtest_results 里需要的结果文件夹复制到 %LOCALAPPDATA%\KhQuant\backtest_results。

问:某条结果的收益显示 - 或「不完整」?
答:这次回测没有正常结束,缺少汇总文件。可以删除后重新跑。图形界面默认隐藏这类结果,勾选「显示不完整结果」才看得到。

本篇基于 V3.4.1.10 编写,帮助文本和默认值以实际运行为准。

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

风险提示

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

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

官网:www.khsci.com/khQuant