使用手册

由bqt04bi5创建,最终由bqt04bi5 被浏览 2 用户

0. 先记住一句话

BigQuant 可以先理解成:

数据层(DAI) → 因子 / 模型 → score → 仓位 → BigTrader → 回测与评估

平台同时提供:

  • 可视化 DAG:拖模块、连线、调参数,适合快速原型验证;
  • 代码模式:需要自定义逻辑时再下沉到 Python / SQL;
  • 云端 AIStudio:提供数据、算力、回测环境;
  • 本地 SDK:可以把一部分研究迁到本机。

官方入口:


1. 最重要的基础概念

1.1 可视化策略 = 一个 DAG

BigQuant 把量化流程封装成 module(模块),模块之间通过输入 / 输出连起来,形成 DAG(有向无环图)。

可以把它看成量化版的 n8n / Simulink:

股票池
  ↓
数据 / 特征
  ↓
因子或模型
  ↓
score
  ↓
仓位
  ↓
BigTrader
  ↓
回测结果

点开一个模块后,右侧出现的通常是这个模块暴露出来的参数。多数时候我们不是“开发模块”,而只是调用已经封装好的模块并调参数

例如:

输入特征(DAI SQL) v30

其中 v30 是模块版本号。同一个模块可以存在多个版本。

只有平台现成模块无法表达我们的逻辑时,才需要开发自定义模块。

官方:


1.2 DAI = 数据查询 + 因子计算层

最常见形式:

df = dai.query("""
SELECT
    date,
    instrument,
    ...
FROM ...
""").df()

不要把它理解成:

SQL → pandas → 再慢慢算

更准确的是:

SQL / 因子表达式
      ↓
DAI 数据引擎批量计算
      ↓
QueryResult
      ↓
.df()
      ↓
pandas DataFrame

也就是说,.df() 只是最后把结果转成 pandas

DAI 很适合做:

数据过滤
rolling / lag
收益率
波动率
rank
z-score
winsorize
neutralization
factor calculation

官方:


1.3 m_c_:先记住这个边界

BigQuant 因子算子里经常看到:

m_xxx
c_xxx

最简单的记法:

m_ = time-series(时间序列)
     “这只股票过去一段时间怎么样?”

c_ = cross-sectional(横截面)
     “今天所有股票之间谁高谁低?”

例如:

m_pct_rank(close, 20)

看的是一只股票在过去窗口里的相对位置。

c_pct_rank(pe_ttm)

看的是同一天所有股票的 PE 横截面百分位。

c_zscore(factor)

就是当日横截面 z-score。

这和日频量化里常见的 daily CS normalization 是同一个概念。

官方:


2. universe、filter、factor、score 到底是什么

这几个东西一定要分开。

2.1 Universe:谁有资格进入研究

Universe(股票池)决定研究对象,例如:

全 A
沪深 300
中证 500
中证 1000
某行业
自定义股票池

它属于 research contract(研究合同) 的一部分。


2.2 Filter:在 universe 里进一步筛谁

例如今天实际试过:

c_pct_rank(total_market_cap) > 0.20
c_pct_rank(pe_ttm) < 0.40
pe_ttm > 0

含义:

c_pct_rank(total_market_cap) > 0.20
→ 去掉市值最小约 20%

c_pct_rank(pe_ttm) < 0.40
→ 留下横截面 PE 较低约 40%

pe_ttm > 0
→ 排除负 PE / 当前亏损企业

所以 filter 回答的是:

谁允许参加后面的排名 / 选股?


2.3 Factor / Feature:我们真正想研究的变量

例如:

20 日动量
20 日反转
波动率
换手率
PE
订单不平衡
residual momentum

这是 research hypothesis(研究假设)真正落地的地方。


2.4 Score:最后拿什么给股票排序

例如:

float_market_cap AS score

就是把 float_market_cap 当成最后的排序分数。

所以要记住:

Filter
= 谁能参加比赛

Score
= 参加以后按什么打分

这是两个完全不同的问题。


3. scaler / preprocessing 放哪里

很多日频因子预处理可以直接在 DAI 做。

例如:

c_zscore(factor)
c_rank(factor)
c_winsorize(factor, 0.01, 0.99)
c_neutralize(...)

典型 pipeline:

raw factor
   ↓
去极值
   ↓
横截面标准化
   ↓
中性化
   ↓
score

但要区分两类 scaler。

A. 横截面 scaler

例如每日:

4000 只股票
↓
当日 mean / std
↓
z-score

适合直接用 DAI 的 c_zscore

B. ML training-set scaler

例如:

scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

这里 mean / std 必须只从训练集学,不能把未来测试数据一起用于 fit,否则会 data leakage(数据泄漏)。

所以:

横截面因子标准化
→ DAI 很合适

ML train/test scaler
→ 遵守严格 fit / transform

官方:


4. BigTrader 和 handle_data

4.1 BigTrader 是什么

BigTrader 是 BigQuant 的核心交易 / 回测引擎。

它负责:

回测时间推进
账户
持仓
订单
成交
手续费
benchmark
调仓
最终 PnL / performance

它不是因子本身。

可以理解为:

Factor / Model
      ↓
score
      ↓
position
      ↓
BigTrader
      ↓
模拟真正的交易过程

官方:


4.2 initialize

initialize() 在回测启动时执行初始化逻辑。

适合做:

设置手续费
设置参数
批量加载数据
批量计算 factor / signal
准备 context.data

BigQuant 官方明确建议:因子 / 信号尽量在这里通过 dai.query 或 DataFrame 做批量向量化计算,而不是每次进入 handle_data 再重复计算。

官方 BigTrader 文档给出的经验是,这类批量向量化计算通常可以比在 handle_data 中逐 bar 计算快很多(文档给出约 10–100× 的量级说明)。


4.3 handle_data

handle_data(context, data) 是:

市场推进到当前这一根 bar 时,策略现在应该做什么?

日频策略可以粗略想象成:

2026-01-05 → handle_data()
2026-01-06 → handle_data()
2026-01-07 → handle_data()
...

适合放:

今天 Top K 是谁
当前持仓是什么
谁该卖
谁该买
目标仓位是多少
是否满足调仓条件

不适合把大量历史因子计算全部塞进去。

最重要的边界:

可以提前对整个历史矩阵批量算完的
→ DAI / initialize

必须依赖“当前账户 / 当前时刻”才能决定的
→ handle_data

官方:


5. Position:score 怎么变成仓位

因子输出:

股票A  score = 1.8
股票B  score = 1.2
股票C  score = -0.5

还不能直接交易。

必须继续回答:

选 Top 多少?
等权还是 score weight?
单股上限多少?
多久调仓一次?

最终变成:

股票A  5%
股票B  3%
股票C  0%

这一步就是 portfolio construction(组合构建)。

因此完整链条是:

factor
↓
score
↓
selection
↓
position
↓
execution

不要把“因子好”和“最终策略收益高”混成同一个问题。


6. 推荐的研究 Pipeline

6.1 非 ML 因子路线:当前最推荐

Hypothesis
↓
确定 universe / research contract
↓
DAI 获取数据
↓
构造 factor
↓
去极值 / rank / z-score / neutralization
↓
IC / RankIC / 分组等因子评价
↓
score
↓
position
↓
BigTrader
↓
Sharpe / return / drawdown / turnover
↓
robustness / ablation

实验原则

一次尽量只改一个变量。

例如今天的实验:

官方:
低 PE
+
剔除最小市值 20%

vs.

实验:
低 PE
+
不限制小市值

Sharpe 变化以后,不应该马上得出“新参数更好”,而应该进一步问:

这个低 PE 策略是不是依赖 small / mid cap exposure?

于是继续做 controlled experiment:

全部市值
vs.
去掉最小 20%
vs.
去掉最小 50%

这比单纯 grid search 一个最高 Sharpe 更有研究价值。


7. 如果开始 ML 挖因子:路线分叉

我们可以把 BigQuant 使用路线简单分成:

A. 不做 ML
B. 做 ML

7.1 A:不做 ML

优先直接留在 BigQuant:

BigQuant DAI
↓
因子
↓
预处理
↓
score
↓
position
↓
BigTrader
↓
dashboard / evaluator

优点:

数据现成
research plumbing 少
可视化 DAG 快
回测方便
非常适合快速验证 idea

这是当前最轻、最适合快速补因子研究链条的路线。


7.2 B:开始 ML 因子挖掘

典型流程:

BigQuant DAI
↓
feature panel
↓
train / val / test
↓
Linear / Ridge / LightGBM / XGBoost / MLP ...
↓
prediction score
↓
BigQuant evaluator / BigTrader

这里有两种执行方式。

方式 1:全部放 BigQuant 云端

优点:

数据离计算近
环境统一
不用传数据

缺点:

免费 D0 只有 1C / 6G
更大的 CPU / RAM / GPU 会涉及 BQC
远程 SSH 连接 AIStudio 目前属于旗舰版会员能力

方式 2:BigQuant + 本地 Mac

更适合我们后续逐步迁移:

BigQuant
负责数据 / DAI / 最终回测

        ↓

本地 Mac + Codex
负责 sklearn / LightGBM / XGBoost / PyTorch 实验

        ↓

prediction / factor
回到 BigQuant 做统一验证

BigQuant 官方 SDK 已提供本地 DAI 查询和本地 BigTrader 的使用方式。

因此 ML 并不等于必须氪 BigQuant 云算力。

官方:


8. 免费资源、D0 和宽币

8.1 D0(1C/6G) 是什么

1C
= 1 CPU core

6G
= 6 GB RAM


官方资源规格字段包括:

cpu
memory
gpu
price(BQC / 分钟)

官方当前文档将默认 D0(1C/6G) 标成免费规格。

官方:


8.2 宽币 BQC 怎么理解


最值得花在:

更大 CPU / RAM
GPU
真正比较重的模型训练
批量实验
并行任务


我们的原则:

普通 DAI / 简单回测
→ 尽量免费

普通 factor test
→ 尽量免费

真正 promising 的 ML / 重实验
→ 再考虑本地算力或 BQC burst compute

9. 可视化拖拽到底应该怎么用

拖拽面板最适合当:

rapid prototyping layer(快速原型层)

不是为了完全逃避代码,而是快速看清策略结构。

例如:

股票池
↓
DAI factor
↓
c_zscore
↓
Top K
↓
position
↓
BigTrader

如果平台已有模块,就直接拖 + 调右侧参数。

如果某个 idea 逐渐变成:

复杂 residualization
特殊 rolling rule
自定义 loss
复杂模型
特殊交易 constraint

再切代码或自定义模块。

最理想的学习顺序:

现在:
自然语言需求
→ AI 完整落地
→ 我们看 DAG + 结果

之后:
自然语言需求
→ 自己先画出粗 DAG
→ AI 补实现

再之后:
简单 idea 自己拖拽验证
→ 复杂 idea 再交给代码

10. 右侧参数面板:哪些值得改

不要看到一个模块有十几个参数就全部研究。

先把参数分成三类。

A. Research contract:通常先固定

universe
回测区间
benchmark
ST / 停牌过滤
交易成本
交易频率

这些不是每个实验都改。

B. Portfolio / strategy structure

Top 50 / Top 100
等权 / score weight
调仓周期
单股上限

这些会影响最终策略,但不等于因子本身。

C. Research variable:最值得频繁改

factor definition
lookback
normalization
neutralization
feature set
model
target / loss

做研究时尽量:

固定 A,谨慎改变 B,重点实验 C。


11. 一个最小例子:低 PE 策略

假设 filter:

c_pct_rank(pe_ttm) < 0.40
pe_ttm > 0

它表示:

当日 PE 横截面排名 < 40%
+
PE > 0

也就是只保留当前盈利企业中相对低 PE 的股票。

如果再加:

c_pct_rank(total_market_cap) > 0.20

就是再剔除市值最小约 20%。

这一步属于:

universe / filter design

而不是“因子值计算”本身。

因此删掉市值 filter 后 Sharpe 变高,正确的后续问题不是:

“我调出了更高 Sharpe?”

而是:

“低 PE 的效果是不是部分来自更小市值股票?”

这就是一个很标准的 universe ablation。


12. 我们推荐的实际工作方式

1. 先 clone 官方 baseline
       ↓
2. 看可视化 DAG,搞懂 architecture
       ↓
3. 找到真正控制 hypothesis 的 node
       ↓
4. 一次只改一个东西
       ↓
5. 用 D0 快速跑
       ↓
6. 看 IC / RankIC / Sharpe / turnover / drawdown
       ↓
7. 提出下一轮机制假设
       ↓
8. 真正复杂时再让 Codex 改代码

不要把时间花在:

背完整 API
研究所有 UI 按钮
自己重造回测框架
无脑 grid search

真正要练的是:

看到一个 quant idea,能把它拆成 data → transform → signal → position → execution → evaluation。


13. Codex 的定位

推荐分工:

我们
负责:
hypothesis
研究问题
实验设计
解释结果

Codex
负责:
查官方 API
生成 / 修改代码
debug
把自然语言 idea 翻译成 BigQuant pipeline
整理实验记录

BigQuant
负责:
数据
DAI
可视化 DAG
回测
evaluator
比赛 / 最终验证

也就是:

不需要认真背 BigQuant 手册,把官方文档当 API / 报错字典,用到再查。


14. 官方文档速查

问题 官方文档
AIStudio 是什么 AIStudio
快速理解平台 pipeline 快速入门
可视化 DAG / 模块 / 代码切换 可视化模块 API
DAI SQL 算子 DAI SQL 函数列表
DAI 常见 SQL 问题 DAI SQL FAQ
BigTrader / handle_data BigTrader API
本地 SDK BigQuant SDK 使用文档
SDK API / D0 / Resource Spec BigQuant SDK API 手册
CLI / 云资源规格 bq CLI 使用文档
VSCode / SSH 连接云端 AIStudio Connector(旗舰版)
自定义可视化模块 创建并发布可视化模块


最后:只记这张图

                    BigQuant

Data
│
└── DAI / SQL
        ↓
Research
│
├── Universe / Filter
├── Factor / Feature
├── Preprocess
└── Model(可选)
        ↓
Signal
│
└── Score
        ↓
Portfolio
│
└── Position
        ↓
Execution
│
└── BigTrader
        ↓
Evaluation
│
├── IC / RankIC
├── Return
├── Sharpe
├── Drawdown
└── Turnover

如果做 ML,只是在中间加:

features
↓
train / val / test
↓
model
↓
prediction score

其他研究骨架并没有改变。

\

{link}