使用devcli.py辅助开发拓展NTQ

cli.py 是给用户跑回测、扫机会用的。devcli.py 是给开发者调试、清理、打包、跑性能基准用的。入口在项目根目录:

python devcli.py -h    # 查看所有命令

注意:如果您是用devcli调试UI,那么需要安装nodejs并在前端文件夹下做npm install

命令速查

缩写

全称

做什么

uk

ui_kill

关闭 UI 端口进程

ic

check_import

UI 依赖冒烟检查

cgc

clear_global_cache

清理 userspace/.ntq/

csc

clear_strategy_cache

清理策略 results/

dbc

db_checkpoint

DuckDB WAL 合并

ssp

sample_stock_pool

分层抽样 N 只股票

pc

pool_clear

取消样本池

cd

check_deps

依赖风险检测

bpe

be_perf_entity

entity_based 性能基准

bps

be_perf_slice

slice_based 性能基准

bpc

be_perf_clear

清理基准测试临时文件

pu

userspace_package

打包 init userspace

ex

data_export_init

打包演示数据

p

pack

版本发布检查流水线

—

ui

启动开发模式 UI

—

version

显示版本号

全局参数:--verbose / -v 显示详细日志。

其他可用命令

样本股票池

开发时不想每次跑全市场 5000 只股票,可以用分层抽样只跑一部分:

# 抽样 200 只股票,写入 data.json 的 use_sample_stock_list
python devcli.py ssp 200

# 取消样本池,恢复全市场
python devcli.py pc

ssp 按"上市状态 × 板块 × 交易所"分层抽样,保证样本有代表性。配合 cli.py s --strategy xxx 就只跑这 200 只,回测速度大幅提升。

 

性能基准测试

测量回测引擎在不同数据规模下的性能:

# entity_based 模式基准(DuckDB)
python devcli.py bpe

# slice_based 模式基准(DuckDB)
python devcli.py bps

# 用 MySQL 跑基准
python devcli.py bpe --db mysql

# 用 PostgreSQL 跑基准
python devcli.py bps --db pgsql

# 清理基准测试产生的临时文件
python devcli.py bpc

基准测试会分三档(25% / 50% / 100% 数据量)跑固定策略,比较不同规模下的性能表现。适合在改了引擎代码之后验证有没有引入性能回退。

 

依赖检查

检查项目依赖是否有风险——比如有没有 Windows 不兼容的包、有没有声明了但没用的依赖:

python devcli.py cd           # 基本检查
python devcli.py cd -v         # 详细输出

 

UI 依赖冒烟检查

检查 UI 启动链路的 import 是否完整,不会因为缺少依赖而崩溃:

python devcli.py ic

 

版本发布检查

准备发布新版本时跑完整的检查流水线:

# 检查并写入版本号
python devcli.py p -core_v0.3.2

# 只检查不写入
python devcli.py p --version 0.3.2 --check-only

# 跳过部分检查
python devcli.py p --version 0.3.2 --skip-tests --skip-fed-build

检查流水线包括:CHANGELOG 同步、模块文档版本一致性、Python 3.9 兼容性、UI 依赖检查、前端构建、pytest 测试、依赖风险检测、emoji 规范检查。

 

打包 userspace

同步并打包初始化用 userspace:

python devcli.py pu             # 同步 + 打包 zip
python devcli.py pu --no-zip     # 只同步不打包

 

打包演示数据

python devcli.py ex

把当前数据导出为演示用的 zip 包,用于新用户初始化。

 

一个完整的案例:开发调试时清理缓存和数据库

你在开发一个新策略,反复跑回测调试代码。跑了几十次之后,硬盘空间被缓存占了不少,DuckDB 的 WAL 文件也变大了。而且有时候跑出错了,pipeline 状态可能卡住。这时候需要一套清理操作。

第一步:清理策略缓存

把所有策略的回测结果清掉,重新开始:

python devcli.py csc

csc 是 clear_strategy_cache 的缩写。这会清空每个策略目录下的 results/(包括 simulations/ 和 scan/ 子目录)。

 

第二步:清理全局缓存

清掉运行时的临时文件、pipeline 租约、进度记录:

python devcli.py cgc

cgc 是 clear_global_cache 的缩写。清理 userspace/.ntq/ 目录下的所有内容。如果 pipeline 状态异常(比如某次回测中断后一直卡着),这招能解决。

 

第三步:合并 DuckDB WAL

DuckDB 的写入会先写 WAL 文件,定期合并到主库。手动触发一次合并:

python devcli.py dbc

dbc 是 db_checkpoint 的缩写。如果 WAL 文件损坏导致数据库打不开,加 --recover 参数:

python devcli.py dbc --recover

这会删除损坏的 .wal 文件后重建连接。注意:可能丢失最后一批未合并的写入。