使用手册
由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
其他研究骨架并没有改变。
\