Qust Docs

Quant research engine

Qust:面向因子研究、策略迭代和流式执行的表达式引擎

Qust 把金融研究里的因子计算、截面处理、窗口状态、回测输出、Monitor 可视化和远端执行收束到同一棵表达式树。用户写的是紧凑的 Python 表达式,底层执行的是 Rust runtime;同一套语义可以跑本地批处理、流式数据、浏览器 Wasm 和 remote expr。

Python API: qustRust execution coreFactor analyticsMonitor dashboardWasm / PyodideRemote Expr
1 graph计算、状态、参数、图表统一描述
batch/stream同一表达式覆盖全量与增量执行
monitor因子诊断、回查和交互式调参
remote远端算子作为普通 Expr 组合

核心优势:为金融研究链路设计

Qust 的重点不是再造一个 DataFrame 包装层,而是把量化研究里最容易散掉的语义保存在表达式里:因子定义、窗口状态、截面上下文、参数、图表输出、远端数据源和回查路径都能被 runtime 看到。

表达式即研究资产

因子不只是临时列。表达式树保留列依赖、窗口、over 上下文、参数和输出名,方便复用、保存、远端执行和可视化。

批处理和流式一致

滚动、扩展窗口、状态型策略算子由 runtime 管理,减少 Notebook 全量计算和实盘增量执行之间的语义偏差。

Monitor 内建研究反馈

图表、参数面板、DataPool、选择回查和 callback 是同一条协议链路,不需要在 Python 里手写 UI 状态机。

Rust 核心承接复杂状态

窗口、分组、schema、Arrow packet 和执行边界下沉到底层,Python 侧保持表达清晰,性能和行为更稳定。

远端算子可以组合

Expr.remote(url, data) 返回普通 Expr,远端数据源按 server 视角解释,结果作为列回到本地表达式。

浏览器路径可分享

Wasm / Pyodide 让同一套表达式进入网页演示、教学和轻量调参,降低环境成本。

因子研究台:AlphaLen 分析视图

因子分析不应该停在一张收益曲线。专业研究需要同时看单调性、IC 稳定性、分组收益、lead horizon 衰减、事件风险和可交易性。Qust 的 alpha().alphalen_analysis(monitor) 把这些诊断做成表达式输出:计算链路留在 runtime,展示交给 Monitor。

Qust AlphaLen 因子分析面板,包含分位数组合收益、IC、分组收益和 horizon heatmap
Python 生成的 AlphaLen 风格研究图:同一个因子在分位数组合收益、IC 稳定性、分组收益和 lead horizon 上同时被检查。
分位数单调性按交易日对因子截面分桶,比较 Q1 到 Q5 的远期收益。如果强因子成立,高分位和低分位应表现出稳定 spread。
IC 与稳定性用因子值和未来收益做相关性序列,观察均值、波动、回撤期和滚动稳定性,避免只看累计收益导致误判。
Horizon 衰减同时查看 1D、3D、5D、10D、20D 的分组收益热力图,判断因子是短周期冲击、趋势延续还是慢变量。
Monitor 交互回查选择异常区间后回查原始股票、交易日、因子值和收益,研究过程可以从总览图直接落到样本明细。

复杂算子拆解:从因子表达式到执行结果

复杂因子通常同时包含时间窗口、截面处理、状态缓存和图表输出。Qust 的做法是让每一步仍然是表达式节点,runtime 根据 schema 和上下文生成执行器,而不是让用户在 Python 循环里手工维护状态。

Qust 表达式执行链路图,展示 DataSet、Expr graph、Window state、Cross section 和 Runtime output
表达式执行链路:DataSet 输入进入表达式图,窗口状态和截面上下文由 runtime 管理,最终输出 Arrow packet、DataPool、Monitor 或 remote expr 结果。
alpha = (col("close").pct().mean().rolling(20).over("code") - col("ret").mean().over("datetime")).zscore().over("datetime")

收益列构造

pct() 或收益输入先形成基础信号列,仍然保留在表达式树里,不提前落成不可追踪的临时 DataFrame。

时间窗口状态

rolling(20).over("code") 表示每个标的独立维护窗口,stream 执行时状态可以跨 batch 延续。

截面归一

over("datetime") 把每个交易时点作为截面边界,rank、zscore、demean 都在正确上下文里执行。

输出与诊断

同一结果可以继续接 monitorsave_dataremote 或回测算子,不需要拆成多套脚本。

简单例子从 pl.DataFrame 到 col(...).runtime().calc_data。 算子每个算子独立页面和完整例子。 Polars 互操作Polars 数据输入、表达式桥接、命名空间桥接。 Wasm在线页面、构建命令和连接地址。 qust_portfolio组合优化算子独立页面。