进益资本杯 · 因子挖掘赛道
比赛时间: -
以数据发现价值·以研究探索 Alpha
主办方:进益资本
比赛介绍
## 赛事介绍
**2026年第二届“进益资本”杯量化因子挑战赛** 面向高校与社会量化人才,围绕 A 股分钟级行情数据,考察参赛者构建分钟级预测因子的能力,服务于量化研究交流、品牌传播与人才选拔。
进益资本是一家专注于量化投资与量化研究的资产管理机构,致力于通过严谨的数据分析、系统化的研究流程和先进的计算方法,在复杂多变的金融市场中寻找可持续的投资机会。对于量化投资而言,因子是连接市场数据与投资决策的重要桥梁;从海量、嘈杂的行情数据中提炼出具有经济含义、逻辑清晰、稳定可靠的预测信号,是量化研究的核心工作之一。持续挖掘、验证和迭代高质量因子,也是进益资本建设长期研究能力的重要组成部分。
本次挑战赛由进益资本主办,面向学校以清华大学为主,同时也欢迎其他院校同学与清华同学共同组队参赛。主办方将提供真实的 A 股分钟级行情、盘口等特色数据,为参赛者创造贴近实际量化研究工作的研究环境。参赛者需要围绕未来 30 分钟收益构建预测因子,并通过公榜和私榜两个阶段接受评估:公榜用于研究迭代和过程反馈,私榜使用未公开样本外数据检验因子的稳健性与可落地性。
参赛者将在比赛中接触大规模金融时序数据,理解市场微观结构、短期供需和交易行为,并完整经历数据处理、因子构造、统计检验、稳定性分析和代码复现等研究环节。我们期待参赛者以清晰的投资逻辑为基础,提出具有创新性、可解释性和实际研究价值的因子,与进益资本共同探索分钟级量化研究的更多可能。
本次比赛设置两个独立赛道,参赛者可选择一个赛道,也可同时参加两个赛道:
| 赛道 | 适合人群 | 核心任务 |
|---|---|---|
| **因子挖掘** | 金融工程、量化、数学、统计等方向 | 基于分钟级行情与盘口数据人工构造预测因子 |
| **端到端** | AI、计算机、数据科学、金融科技等方向 | 基于原始分钟级量价序列直接训练模型并输出预测分数 |
**为什么是分钟级预测**:分钟级行情和盘口数据能够反映市场微观结构、短期供需和交易行为。本次比赛统一预测未来 30 分钟 VWAP 收益,以每 30 分钟一个非重叠截面进行评估,两个赛道的区别仅在于预测信号的产生方式。
## 数据
- **股票池**:以中证 1000 指数历史成分股为基础。
- **时间范围**:开赛前公布。
- **数据频率**:1 分钟、5 分钟、15 分钟和 30 分钟 K 线及盘口快照。
- **预测目标**:未来 30 分钟 VWAP 收益,不预测隔夜收益。
- **采样规则**:采样间隔等于预测窗口,每个交易日约 8 个日内截面;跳过集合竞价等特殊时段。
## 参赛资格
- 报名阶段不限制学校和专业,欢迎 AI、计算机、数据科学、金融科技、数学、统计、金融工程等背景的选手参赛。
- 每位选手只能加入一支队伍,鼓励跨学校、跨专业组队。建议每支队伍由 1—3 人组成。
- 队伍如需参加最终决赛,必须至少有一位清华大学在读学生。未满足该条件的队伍即使完成报名或取得较高成绩,也将被视为无效,不能进入决赛。
- 指导老师可提供学术支持,但不得直接编写、调试或代提交竞赛代码。
- 私榜提交以个人为单位,每位队员都可以独立提交自己的因子代码。因此,队伍人数越多,通常能够提交和比较的代码越多,更有利于持续探索有效因子,鼓励大家积极组队参赛。
## 模版代码
本赛道采用"因子挖掘"方式:平台提供高频等特色数据,参赛者构建**30分钟频因子**并提交。主办方提供以下模版供参考:
| 模版 | 说明 |
|---|---|
| `demo_sql.ipynb` | DAI数据引擎直接计算因子,速度更快,内存占比更低 |
| `demo_udf.ipynb` | UDF支持用户自定义封装python函数并在dai数据引擎中执行,效率更高 |
| `demo_py.ipynb` | 传统python计算,请注意内存使用情况 |
## 代码提交
### 提交格式
参赛者提交因子构建代码,平台自动运行代码并生成因子数据。提交内容是代码,不是离线因子文件。入口函数返回的数据必须且仅包含以下三列:
| datetime | instrument | factor |
|---|---|---:|
| 2023-01-03 10:30:00 | 000001.SZ | 0.05 |
| 2023-01-03 10:30:00 | 000002.SZ | -0.12 |
| ... | ... | ... |
* 平台不限制因子方向,默认**因子值越大越好**,参赛者需自行确保方向逻辑正确。
* 因子应具有清晰的经济含义、可解释性和逻辑性,能够说明其所反映的市场行为或交易机制,避免仅针对样本结果进行黑箱拟合。
* `datetime` 必须精确到分钟,并落在平台约定的 30 分钟采样时点。
### 数据校验
提交须通过以下校验,否则视为无效:
- 输出列必须且仅包含 `datetime`、`instrument`、`factor` 三列。
- 时间戳必须是合法的约定采样点;
- 不得缺失评估区间内的分钟;
- 每个评估时点的输出缺失率不得高于 **40%**;
- 不得出现无法解析的数值、重复键或未来时间数据。
### 平台预处理
校验通过后,平台对原始因子统一处理:
* **去极值** 与 **标准化**。
* **风格剔除**:将因子对 BARRA 风险因子回归,取残差作为新因子,以评估其增量贡献。
### 运行环境要求
为保证公平,所有因子生成代码须在指定线上平台 Notebook 环境运行并提交:
* **运行时长**:Notebook ≤ 3 小时。
* **禁止外部网络**:为防信息泄露与使用未来数据,Notebook 互联网访问被禁用。
## 评分机制
### 公式规则
评分以**单个有效因子提交**为单位。每个因子分别计算五项原始指标,再在全体有效提交中进行 `rank` 百分比排名,将不同量纲的指标统一转换为 `[0, 1]` 区间的排名分数。这样,各细分项可以直接进行横向比较并加权求和。
| 指标 | 评价重点 |
|---|---|
| IC 均值 | 因子排序与未来 30 分钟 VWAP 收益的平均相关性 |
| IC_IR | 预测能力在不同时间截面的稳定性 |
| 多空组合夏普比率 | 按因子排序构建多空组合后的收益风险表现 |
| 压力场景稳定性 | 高低波动、放缩量和不同时段等场景下的稳健性 |
| 换手率 | 信号变化和组合调仓成本,换手越低越好 |
五项指标各占 20%,指标表现越好,百分位排名越高;其中换手率按照“换手越低、排名越高”的方向处理。提交 `i` 的最终分数为:
$$
Score_i=0.2\times R_{ICmean,i}+0.2\times R_{ICIR,i}+0.2\times R_{SR,i}+0.2\times R_{Stress,i}+0.2\times R_{Turnover,i}
$$
其中,`R` 表示对应原始指标在全体有效提交中的 `rank` 百分比排名,取值范围为 `[0, 1]`。例如,某项指标的 `R=0.80`,表示该因子在该项指标上的表现优于约 80% 的有效提交。团队最终成绩取本队全部有效提交中的最高分,不因提交数量直接加分。公榜排名会随着新提交加入而变化,私榜使用样本外数据决定最终排名。
团队 `team` 的最终得分为队内所有有效个人提交分数中的最高值:
$$
Score_{team}=\max_{i\in team}Score_i
$$
其中,`i` 表示团队成员提交的有效因子。也就是说,团队成员可以分别提交和探索因子,最终由团队中表现最好的有效因子决定团队排名。
### 数据划分
比赛使用公榜训练集、公榜验证集和私榜数据集三个数据集,经历公榜和私榜两个阶段,最终排名以私榜数据集上的成绩为准。
| 数据集 | 用途 | 评估方式 | 结果 |
|---|---|---|---|
| 公榜训练集 | 用于参赛者开发、调试和迭代因子 | 参赛者基于该数据集自行完成因子构建与研究分析 | 不产生公榜成绩 |
| 公榜验证集 | 用于评估已提交的因子 | 参赛者提交后,平台使用该数据集重跑因子并计算评估指标 | 展示提交成绩,用于研究反馈,不直接决定最终排名 |
| 私榜数据集 | 用于对精选提交进行最终样本外评估 | 入选私榜的提交使用该数据集重跑因子并计算评估指标 | 作为最终排名依据 |
三个数据集的数据区间相互不重叠:公榜训练集用于开发调试,公榜验证集用于提交后的统一重跑和评估,私榜数据集用于精选提交的最终样本外评估。公榜提交截止时间为 **2026 年 10 月 29 日 23:59:59**,分数仅用于研究反馈,不决定最终名次;私榜候选选择截止时间为 **2026 年 10 月 30 日 23:59:59**,待提交评分完成后由各队选择候选并确认冻结。冻结后不得修改代码、参数、依赖或随机种子,最终以团队私榜最高有效提交分数排名。
## 赛程安排
### 阶段一:宣传报名与资源开通
- **时间**:2026 年 9 月 1 日—10 月 7 日。
- **报名截止**:2026 年 10 月 7 日 23:59:59。
- **内容**:赛事宣讲、组队报名、账号与数据权限开通、平台及数据培训。
### 阶段二:公榜阶段
- **时间**:2026 年 10 月 1 日—10 月 29 日。
- **内容**:提交因子代码、验证集评估、技术答疑和研究迭代。
- **提交截止**:2026 年 10 月 29 日 23:59:59。
- **选择截止**:2026 年 10 月 30 日 23:59:59。提交截止后,待所有提交的作品完成评分后,各队根据个人提交成绩选择私榜候选并确认冻结。
### 阶段三:私榜阶段
- **时间**:2026 年 11 月 2 日—11 月 6 日。
- **内容**:候选冻结后,使用私榜数据集重跑因子并进行样本外评估,同时开展运行复现、依赖检查、未来函数检查和数据合规检查。
- **公示期**:私榜评估结束后,设置约 1 周的最终排名公示期,具体时间以排名公布日期为准。
### 阶段四:决赛
- **时间**:私榜评估结束后,预计安排约 2 周,具体时间以组委会通知为准。
- **入围依据**:组委会根据私榜综合成绩、复现结果、材料完整性及合规检查结果确定决赛入围队伍,并公布决赛名单。
- **决赛形式**:采用“15 分钟展示 + 10 分钟评委问答”的形式。入围队伍应围绕分钟级信号逻辑、样本外表现、代码复现过程及 AI/端到端方法贡献进行汇报。
- **综合评估**:决赛不只考察私榜分数,还将综合评估投资逻辑、分钟级信号质量、实现与复现规范、创新性及答辩表现。
- **复现与合规**:排名靠前或入围队伍须配合自动复现、人工抽查、依赖检查、未来函数检查、外部数据合规检查和运行日志核验;无法复现或存在违规行为的,组委会有权降分或取消资格。
## 决赛答辩
#### 入围材料
入围队伍需提交研究报告、代码复现说明和数据/依赖声明。报告应重点说明因子构造逻辑、经济含义、可解释性、数据处理、统计检验、稳定性分析和局限性;如使用 AI 工具,还需说明 AI 参与环节、关键提示词和人工复核方式。
#### 答辩与评估
决赛综合评审参考以下维度:
| 评审维度 | 权重 | 评估重点 |
|---|---:|---|
| 投资逻辑与问题定义 | 25% | 是否清楚说明分钟级信号来源、经济含义、微观结构逻辑,或端到端模型捕捉的行为模式 |
| 分钟级信号质量 | 30% | RankIC、RankIC_IR、分组多空、换手率、压力场景、公榜与私榜差异及样本外稳定性 |
| 实现与复现规范 | 20% | 代码结构、依赖版本、随机种子、运行入口、日志样例、训练/推理分离及平台复现结果 |
| AI/端到端创新 | 10% | AI 工具或深度模型是否真正提升研究效率或预测质量,使用过程是否透明、可复现 |
| 陈述表达与问答互动 | 15% | 汇报是否清晰有条理,能否准确回答数据口径、过拟合、交易可行性和复现等问题 |
答辩材料应与冻结提交保持一致,不得在决赛阶段修改因子或模型代码、参数、权重、随机种子及依赖。涉及 AI 工具的队伍还应如实披露 AI 参与环节、关键提示词、生成内容的人工复核方式及最终采用情况。
#### 颁奖与人才转化
决赛答辩结束后,组委会将结合综合评审结果完成最终排名及颁奖安排,预计于 **2026 年 11 月 第三周** 举行颁奖活动,具体日期以官方通知为准。颁奖可与决赛答辩合并进行,并公布综合奖、赛道奖、专项奖及优秀组织相关结果(如设置)。
决赛入围选手将进入进益资本量化研究人才库,赛后由投研与 HR 统一进行评估。表现优秀的选手可根据赛道和能力方向,获得量化研究、量化开发或 AI 建模方向的实习、面试直通或进一步人才评估机会。
## 赛事奖励
本次赛事奖励安排如下:
| 奖项 | 数量 | 奖励 | 赛道分配 |
|---|---:|---:|---|
| 一等奖 | 2 名 | ¥10,000 | 两赛道各 1 名 |
| 二等奖 | 4 名 | ¥6,000 | 两赛道各 2 名 |
| 三等奖 | 6 名 | ¥4,000 | 两赛道各 3 名 |
| 签约奖(入职/实习) | 6 名 | ¥8,000 | 两赛道合计 6 名 |
| **合计** | | **¥116,000** | |
最终获奖资格、评选流程及人才转化安排以进益资本大赛组委会公告和最终审核结果为准,所有进入决赛的同学均有机会获得。进入决赛的选手还有机会获得进入进益资本实习的机会,经过评估获得offer并愿意加入进益的同学还可以获得签约奖,签约奖单独发放与一二三等奖不冲突。
奖金&奖项
¥116000
比赛数据
## Overview
本比赛只可使用指定的数据源来构建因子。评判程序会 `import` 参赛用户提交代码里的 `main` 函数,并传入数据源名、开始日期时间、结束日期时间来调用。
数据都放在 进益资本 空间下(https://jinyicapital.bigquant.com/)数据平台 `/进益资本杯2026` 目录下,报名审核后自动加入该空间获取数据权限。
## 数据源
- **股票池**:以中证 1000 指数历史成分股为基础。
- **时间范围**:2020年至2024年。
- **数据频率**:1 分钟、5 分钟、15 分钟和 30 分钟 K 线及盘口快照。
- **开发数据表**:
| `cpt_jyc_2026_stock_bar1m` | 1 分钟 K 线及盘口快照 |
| `cpt_jyc_2026_stock_bar5m` | 5 分钟 K 线及盘口快照 |
| `cpt_jyc_2026_stock_bar15m` | 15 分钟 K 线及盘口快照 |
| `cpt_jyc_2026_stock_bar30m` | 30 分钟 K 线及盘口快照 |
- 其他数据
* 股票列表,数据表链接:[\[cpt_jyc_2026_instruments\]](https://jinyicapital.bigquant.com/data/datasources/cpt_jyc_2026_instruments)
* 风险暴露,数据表链接:[\[cpt_jyc_2026_exposure\]](https://jinyicapital.bigquant.com/data/datasources/cpt_jyc_2026_exposure)
* 未来30分钟VWAP数据,数据表链接:[\[cpt_jyc_2026_vwap\]](https://jinyicapital.bigquant.com/data/datasources/cpt_jyc_2026_vwap)
## 数据格式
以分钟行情为例,参考:[\[cpt_jyc_2026_stock_bar1m\]](https://jinyicapital.bigquant.com/data/datasources/cpt_jyc_2026_stock_bar1m)
以下是根据您提供的内容转换成的 Markdown 格式表格:
| 字段名 | 数据类型 | 描述 |
| --- | --- | --- |
| date | np.datetime64 | 日期(Bar 结束时刻) |
| instrument | pd.StringDtype | 股票代码 |
| instrument_id | np.int16 | 股票代码 ID |
| adjust_factor | np.float32 | 复权因子 |
| pre_close | np.float32 | 前收盘价 |
| high | np.float32 | 最高价 |
| open | np.float32 | 开盘价 |
| low | np.float32 | 最低价 |
| close | np.float32 | 收盘价 |
| deal_number | np.int32 | 成交笔数 |
| volume | np.int32 | 成交量 |
| amount | np.float32 | 成交额 |
| ask_price1 | np.float32 | 1档委卖价 |
| ask_price2 | np.float32 | 2档委卖价 |
| ask_price3 | np.float32 | 3档委卖价 |
| ask_price4 | np.float32 | 4档委卖价 |
| ask_price5 | np.float32 | 5档委卖价 |
| bid_price1 | np.float32 | 1档委买价 |
| bid_price2 | np.float32 | 2档委买价 |
| bid_price3 | np.float32 | 3档委买价 |
| bid_price4 | np.float32 | 4档委买价 |
| bid_price5 | np.float32 | 5档委买价 |
| ask_volume1 | np.int32 | 1档委卖量 |
| ask_volume2 | np.int32 | 2档委卖量 |
| ask_volume3 | np.int32 | 3档委卖量 |
| ask_volume4 | np.int32 | 4档委卖量 |
| ask_volume5 | np.int32 | 5档委卖量 |
| bid_volume1 | np.int32 | 1档委买量 |
| bid_volume2 | np.int32 | 2档委买量 |
| bid_volume3 | np.int32 | 3档委买量 |
| bid_volume4 | np.int32 | 4档委买量 |
| bid_volume5 | np.int32 | 5档委买量 |
| ask_num_orders1 | np.int32 | 卖1档委托笔数 |
| ask_num_orders2 | np.int32 | 卖2档委托笔数 |
| ask_num_orders3 | np.int32 | 卖3档委托笔数 |
| ask_num_orders4 | np.int32 | 卖4档委托笔数 |
| ask_num_orders5 | np.int32 | 卖5档委托笔数 |
| bid_num_orders1 | np.int32 | 买1档委托笔数 |
| bid_num_orders2 | np.int32 | 买2档委托笔数 |
| bid_num_orders3 | np.int32 | 买3档委托笔数 |
| bid_num_orders4 | np.int32 | 买4档委托笔数 |
| bid_num_orders5 | np.int32 | 买5档委托笔数 |
## 读取示例
```
import dai
dai.query("SELECT * FROM cpt_jyc_2026_stock_bar1m", filters={"date": ["2020-01-01 00:00:00", "2020-01-05 23:59:59"]}).df().head()
```
| | date | instrument | instrument_id | adjust_factor | pre_close | high | open | low | close | deal_number | volume | amount | ask_price1 | ask_price2 | ask_price3 | ask_price4 | ask_price5 | bid_price1 | bid_price2 | bid_price3 | bid_price4 | bid_price5 | ask_volume1 | ask_volume2 | ask_volume3 | ask_volume4 | ask_volume5 | bid_volume1 | bid_volume2 | bid_volume3 | bid_volume4 | bid_volume5 | ask_num_orders1 | ask_num_orders2 | ask_num_orders3 | ask_num_orders4 | ask_num_orders5 | bid_num_orders1 | bid_num_orders2 | bid_num_orders3 | bid_num_orders4 | bid_num_orders5 |
|---:|:--------------------|:-------------|----------------:|----------------:|------------:|-------:|-------:|------:|--------:|--------------:|---------:|-----------------:|-------------:|-------------:|-------------:|-------------:|-------------:|-------------:|-------------:|-------------:|-------------:|-------------:|--------------:|--------------:|--------------:|--------------:|--------------:|--------------:|--------------:|--------------:|--------------:|--------------:|------------------:|------------------:|------------------:|------------------:|------------------:|------------------:|------------------:|------------------:|------------------:|------------------:|
| 0 | 2020-01-02 09:31:00 | 000010.SZ | 10 | 10.7745 | 3.4 | 3.4 | 3.4 | 3.4 | 3.4 | 11 | 16600 | 56440 | 3.4 | 3.41 | 3.42 | 3.43 | 3.44 | 3.38 | 3.37 | 3.36 | 3.35 | 3.34 | 11200 | 500 | 7000 | 148400 | 9200 | 11500 | 42700 | 40900 | 39700 | 19100 | 3 | 3 | 2 | 1 | 3 | 4 | 7 | 8 | 6 | 2 |
| 1 | 2020-01-02 09:31:00 | 000011.SZ | 11 | 3.60337 | 9.41 | 9.5 | 9.49 | 9.47 | 9.49 | 74 | 140600 | 1.33519e+06 | 9.49 | 9.5 | 9.53 | 9.54 | 9.55 | 9.47 | 9.46 | 9.45 | 9.44 | 9.42 | 38700 | 21700 | 1200 | 33600 | 10300 | 300 | 11700 | 5600 | 1600 | 5100 | 6 | 5 | 1 | 5 | 9 | 1 | 4 | 4 | 1 | 3 |
| 2 | 2020-01-02 09:31:00 | 000014.SZ | 14 | 5.42094 | 9.31 | 9.4 | 9.38 | 9.38 | 9.4 | 42 | 31600 | 296616 | 9.41 | 9.42 | 9.43 | 9.44 | 9.45 | 9.38 | 9.32 | 9.31 | 9.3 | 9.24 | 2200 | 3000 | 4700 | 4200 | 4000 | 4200 | 9800 | 11200 | 5300 | 1000 | 2 | 1 | 2 | 3 | 2 | 3 | 3 | 4 | 3 | 1 |
| 3 | 2020-01-02 09:31:00 | 000017.SZ | 17 | 2.68274 | 4.52 | 4.56 | 4.53 | 4.53 | 4.53 | 68 | 96492 | 437659 | 4.54 | 4.55 | 4.56 | 4.57 | 4.58 | 4.53 | 4.52 | 4.51 | 4.5 | 4.49 | 11700 | 11000 | 30400 | 6100 | 21300 | 25208 | 16500 | 6100 | 32100 | 16800 | 5 | 4 | 11 | 3 | 6 | 8 | 7 | 3 | 4 | 5 |
| 4 | 2020-01-02 09:31:00 | 000019.SZ | 19 | 4.10962 | 6.08 | 6.14 | 6.11 | 6.11 | 6.12 | 87 | 212660 | 1.30156e+06 | 6.13 | 6.14 | 6.15 | 6.16 | 6.17 | 6.12 | 6.11 | 6.1 | 6.09 | 6.08 | 69510 | 29500 | 22300 | 200 | 28000 | 92200 | 43640 | 152300 | 34500 | 8200 | 21 | 11 | 12 | 1 | 8 | 3 | 15 | 9 | 3 | 8 |
可以注意到 cpt_jyc_2026_stock_bar1m 的股票代码有两个: **instrument** 和 **instrument_id**。如果需要节省数据内存占比,可以使用 instrument_id。
## 因子计算示例
### DAI 数据引擎
DAI 内置多种算子/函数,参考 [DAI函数文档](https://bigquant.com/wiki/doc/Rceb2JQBdS)。DAI是专为AI/量化场景优化的超高性能计算引擎,能充分利用现代CPU/GPU能力。
```
import dai
dai.query("""
SELECT
date::DATE::DATETIME AS date,
instrument,
AVG(close) / LAST(close) AS factor
FROM cpt_jyc_2026_stock_bar1m
GROUP BY date::DATE, instrument
ORDER BY date, instrument
""", filters={"date": ["2020-01-01 00:00:00", "2020-02-01 23:59:59"]}, compression=True).df().head()
```
| | date | instrument | factor |
|---:|:--------------------|:-------------|---------:|
| 0 | 2020-01-02 00:00:00 | 000010.SZ | 1.00156 |
| 1 | 2020-01-02 00:00:00 | 000011.SZ | 1.00021 |
| 2 | 2020-01-02 00:00:00 | 000014.SZ | 1.00244 |
| 3 | 2020-01-02 00:00:00 | 000017.SZ | 0.994755 |
| 4 | 2020-01-02 00:00:00 | 000019.SZ | 1.00098 |
### UDF
DAI 数据引擎支持UDF(User-Defined Function,用户定义函数),指允许用户通过编写自定义函数来扩展算子。
```
import dai
# 定义计算因子的UDF - 带类型声明(推荐)
def calculate_factor(instrument: str, prices: list) -> float:
"""计算因子:平均价格/最后价格"""
if not prices:
return None
avg_price = sum(prices) / len(prices)
last_price = prices[-1]
# 避免除零错误
if last_price == 0:
return None
return avg_price / last_price
# 计算因子
dai.query("""
WITH grouped_data AS (
SELECT
date::DATE::DATETIME AS date,
instrument,
ARRAY_AGG(close ORDER BY date) AS price_list
FROM cpt_jyc_2026_stock_bar1m
GROUP BY date::DATE, instrument
)
SELECT
date,
instrument,
calculate_factor(instrument, price_list) AS factor
FROM grouped_data
ORDER BY date, instrument
""",
filters={"date": ["2020-01-01 00:00:00", "2020-02-01 23:59:59"]},
compression=True,
udf_list=[
dai.DaiUDF(
name="calculate_factor",
function=calculate_factor,
)
]).df().head()
```
| | date | instrument | factor |
|---:|:--------------------|:-------------|---------:|
| 0 | 2020-01-02 00:00:00 | 000010.SZ | 0.998619 |
| 1 | 2020-01-02 00:00:00 | 000011.SZ | 0.999154 |
| 2 | 2020-01-02 00:00:00 | 000014.SZ | 0.998182 |
| 3 | 2020-01-02 00:00:00 | 000017.SZ | 0.999099 |
| 4 | 2020-01-02 00:00:00 | 000019.SZ | 0.996117 |
### 第三计算库
DAI 数据引擎也支持将数据转换为 pd.DataFrame、pl.DataFrame、arrow 等格式的数据类型。
```
import dai
data = dai.query("SELECT date, instrument, close FROM cpt_jyc_2026_stock_bar1m", filters={"date": ["2020-01-01 00:00:00", "2020-02-01 23:59:59"]}, compression=True)
# 转为 pandas dataframe,然后在 pandas 继续计算
df = data.df()
# 转为 polars dataframe,然后在 polars 继续计算,polars没有内置在 aistudio 中,可以自行安装 pip3 install polars
df = data.pl()
# 转为 apache arrow,然后在 arrow 继续计算
df = data.arrow()
```
更多参考 DAI 文档:[DAI文档](https://bigquant.com/wiki/doc/PLSbc1SbZX)
### 混合计算
dai 与 pandas 等混合计算,可以在 dai 中高性能的使用 pandas、polars、arrow等数据(通过参数 `bind_relations` 绑定),并支持JOIN等操作。
```
import dai
data = dai.query("SELECT date, instrument, close FROM cpt_jyc_2026_stock_bar1m", filters={"date": ["2020-01-01 00:00:00", "2020-02-01 23:59:59"]})
df = data.df()
dai.query("""
SELECT
date::DATE::DATETIME AS date,
instrument AS instrument,
AVG(close) AS avg_close
FROM df
GROUP BY date::DATE::DATETIME, instrument
""", bind_relations={"df": df}).df()
```
## Tips
- 关于日期和时间
- `date::DATE` 只取得 `date` 的日期部分,e.g. `2025-01-03 14:24:31`::DATE 为 `2025-01-03`。注意:`date` 的类型是 TIMESTAMP,`date::DATE` 类型是 `DATE`,可能在部分比较时出现数据类型不一致问题
- `date::DATE::DATETIME` 可以这样再将数据类型转为 `DATETIME`
- 更多日期/时间函数参考 [DAI函数文档](https://bigquant.com/wiki/doc/Rceb2JQBdS):`date_trunc`, `time_bucket`
- 时序算子,DAI提供的函数,一般情况下,`m_` 前缀的是时序算子,并且默认基于 `GROUP BY instrument` 计算,e.g. `SELECT date, instrument, close / m_lag(close, 1) AS close_1 FROM cpt_jyc_2026_stock_bar1m`
- 截面算子,DAI提供的函数,一般情况下,`c_` 前缀的是时序算子,并且默认基于 `GROUP BY instrument` 计算,e.g. `SELECT date, instrument, close / m_lag(close, 1) AS close_1, c_rank(close_1) FROM cpt_jyc_2026_stock_bar1m`
## 计算资源
- 使用 `compression=True` 参数可降低内存占用:`dai.query("SELECT * FROM cpt_jyc_2026_stock_bar1m", filters={"date": ["2023-01-01 00:00:00", "2023-02-01 23:59:59"]}, compression=True).df()`。数据量很大,可以开启该参数(设为 True)后,系统会自动将 instrument 列的字符串类型转换为 category 类型,显著降低内存占用。在 dai sql 中查询和计算 pandas category 类型,可能会遇到不兼容问题,可以尝试用 `instrument::string` 转会为字符串。
- 资源规格:在 aistudio 状态栏里可以点击计算资源规格并切换,推荐 4C/16G 或者更高的资源规格。参赛后平台会赠送宽币用于升级计算资源,用户也可以通过参加比赛培训、[邀请用户](https://bigquant.com/spark)等获得更多宽币。
## DAI 文档
DAI(DATA FOR AI)是BigQuant研发的高性能分布式数据平台
* 使用简单:通过统一接口访问BigQuant各类数据。
* 数据丰富:提供PB级金融数据、另类投资数据和因子数据 (数据字典),并支持用户自定义数据。
* 技术先进:采用现代化的分布式架构,支持大规模数据的低延迟读写和高性能计算。
* 使用文档访问链接:https://bigquant.com/wiki/doc/PLSbc1SbZX
比赛规则
## 适用范围与基本原则
- 本规则适用于使用相关平台、数据、运行环境及配套工具开展量化研究、因子研究、模型开发、回测分析或其他数据分析活动的组织和个人。
- 使用平台及相关资源时,应遵守法律法规、平台服务协议、数据授权约定、开源软件许可协议及本规则。
- 使用者应基于真实、合法、可追溯的数据和研究过程开展工作,不得通过任何方式误导研究结果、规避系统约束或损害其他使用者的合法权益。
- 研究结果、回测结果和模型表现具有不确定性,仅用于研究、分析、技术验证或内部评估,不构成任何形式的投资、交易、财务、法律或其他专业建议。
## 数据使用与研究合规
- 仅可使用已获得明确授权、来源合法且用途符合约定的数据。不得擅自复制、传播、转售、公开披露或将受限数据用于约定范围以外的活动。
- 数据的使用应遵循最小必要原则。不得通过上传文件、外部接口、网络请求、隐蔽通信或其他方式引入未经授权的数据、代码或服务。
- 因子、特征或模型在时间点 `t` 的计算,不得使用 `t` 之后才可获得的信息,包括未来交易数据、盘后数据、后续财务数据、未来成分股信息或其他形式的未来函数。
- 使用财务、基本面或其他具有披露延迟的数据时,应按照其实际可获得时间进行处理,不得以报告期、公告期或回填时间替代真实可用时间。
- 不得手工修改、伪造、注入或覆盖数据、因子值、模型输出、运行日志及其他研究结果。数据清洗、缺失值处理、异常值处理等操作应可解释、可复现,并保留必要记录。
- 对数据质量存在疑问时,应通过正式渠道反馈,不得自行篡改底层数据或利用已知数据缺陷制造异常结果。
## 研究代码与运行环境
- 研究代码应具备基本的可读性、可复现性和可审计性。关键数据处理、时间对齐、特征构造、模型训练、结果后处理等步骤应能够说明其逻辑和来源。
- 代码不得包含恶意程序、后门、木马、挖矿逻辑、未授权访问、隐蔽数据外传或其他危害平台、数据和用户安全的功能。
- 不得绕过或削弱平台的沙箱、权限、网络隔离、资源配额、运行时限、访问控制及其他安全机制。
- 不得读取、探测、推断或获取其他用户、团队或项目的代码、数据、参数、运行日志、中间结果及其他非公开信息。
- 不得通过硬编码结果、伪造输出、缓存未经授权的结果、利用评估接口漏洞或其他方式替代真实计算过程。
- 运行失败、结果异常或依赖不可用时,应优先检查自身代码、数据处理和依赖配置,并通过正式渠道反馈平台问题,不得以异常重试、恶意请求或其他方式影响平台正常运行。
## 诚信研究与禁止行为
使用者应独立、诚实地开展研究。以下行为均属于禁止行为:
* 抄袭、盗用或未经许可改编他人的代码、因子、模型、报告或研究成果,并将其冒充为自身成果;
* 未经授权共享、转让或公开受限数据、核心代码、模型权重、密钥、提示词、运行日志或其他非公开材料;
* 通过多账号、虚假身份、代操作或其他方式规避权限、审计或责任追踪;
* 伪造数据来源、实验过程、运行记录、研究结论或第三方授权情况;
* 利用系统漏洞、接口缺陷、资源竞争、恶意请求或异常提交影响平台服务、他人研究或评估结果;
* 以任何方式操纵、干扰、污染或人为制造研究数据和分析结果;
* 违反适用法律法规、保密义务、数据授权条款或第三方知识产权约定的其他行为。
鼓励合理参考公开论文、公开文档和开源工具,但应遵循相应许可要求,并在研究材料中准确说明引用来源、使用方式及实质性改动。
## 第三方资源与人工智能工具
- 使用开源库、预训练模型、外部 API、数据服务或其他第三方资源前,应确认其许可、授权范围、使用限制和信息安全要求适用于当前场景。
- 第三方资源产生的版权、许可、隐私、数据合规或安全责任,由使用者承担。因第三方资源存在风险,平台方有权要求停止使用、替换依赖或提供相应证明。
- 使用人工智能工具辅助编程、数据分析、因子构造或文档生成时,使用者仍应对最终代码、数据来源、输出内容和研究结论负责。
- 不得向人工智能工具输入未经授权的个人信息、商业秘密、受限数据、密钥、代码或其他敏感信息;不得将人工智能生成内容直接视为事实或合规证明。
## 知识产权与成果使用
- 使用者依法享有其自主创作、独立开发且不包含第三方受限内容的代码、因子、模型、报告及其他成果的相应权利。
- 使用者应确保提交、发布或共享的成果不侵犯任何第三方的著作权、专利权、商标权、商业秘密、肖像权、隐私权或其他合法权益。
- 除另有书面约定外,平台方不因提供运行环境、数据接口或技术服务而取得使用者成果的所有权。平台方可在履行服务、保障安全、处理故障、审计合规及改进产品所必需的范围内处理相关代码、日志和输出。
- 对于使用者主动公开发布的成果,平台方可在合理范围内进行引用、展示或宣传,并应尽量标注来源;涉及保密信息或另有约定的,从其约定。
- 使用者应妥善保留成果的版本、来源和授权记录,以便在发生权属或合规争议时进行核验。
## 个人信息与保密义务
- 使用者不得在平台中处理与当前研究无关的个人信息,不得上传身份证件、账户密码、密钥、联系方式或其他敏感信息,除非已获得必要授权并采取适当保护措施。
- 对因工作、合作或使用平台而知悉的非公开信息,使用者应承担保密义务,不得擅自复制、披露、转让或用于约定目的之外的活动。
- 账号、访问凭证和 API 密钥应由使用者妥善保管。发现泄露、盗用或异常访问时,应立即停止使用并通过正式渠道报告。
## 平台、数据与研究结果免责
- 平台方将尽合理努力维护服务和数据质量,但不保证平台持续、及时、无错误或完全符合特定研究目的,也不保证数据、接口、模型或研究结果绝对准确、完整或不发生变化。
- 因数据缺失、口径调整、历史修订、接口变化、第三方服务异常、网络故障、系统维护、不可抗力或其他非平台方可完全控制的原因造成的结果偏差、运行中断或数据损失,平台方在法律允许范围内不承担由此产生的间接损失或预期收益损失。
- 历史回测、模拟交易、因子表现和模型预测不代表未来实际结果。使用者应自行评估交易成本、流动性、市场冲击、容量、风险暴露、数据偏差和模型失效等因素。
- 使用者不得将平台输出或研究结果作为唯一依据作出投资、交易、经营或其他重大决策,并应自行承担相关决策责任。
## 违规处理与安全响应
- 平台方可基于安全监测、运行日志、代码审查、数据审计、异常行为分析或其他合法方式核查违规风险。使用者应配合提供必要的说明、代码、依赖和数据来源证明。
- 对违反本规则的行为,平台方可根据情节采取提醒、限期整改、限制功能、暂停或终止账号及项目权限、删除相关内容、取消相关结果、保留日志证据等措施。
- 对涉嫌违法、侵权、数据泄露、恶意攻击或重大安全风险的行为,平台方有权立即采取必要的隔离、封禁和应急处置措施,并依法向有关机构报告或追究责任。
- 使用者发现数据泄露、漏洞、恶意代码或其他安全事件时,应立即通过正式渠道报告,不得利用、传播或公开披露尚未修复的漏洞。
## 规则版本与变更
- 本规则及相关配套说明可能因数据接口变更、技术架构调整、评估或处理流程优化、第三方服务异常、安全风险以及其他客观情况进行修订。使用者应关注主办方通过正式渠道发布的最新版本和通知。
- 为保障平台安全、服务稳定和规则执行的一致性,主办方保留在必要时修订规则、调整数据或服务口径、增补合规与安全要求的权利。
- 规则变更将根据实际影响,通过适当方式提前通知;涉及重大安全风险、法律法规变化或紧急故障处置的变更,主办方可即时生效,并在条件允许时补充说明。
- 规则变更将尽量兼顾既有研究、运行任务和相关材料的处理方式,必要时采取重新处理、保留历史记录、提供合理调整期限或其他适当措施,以降低对正常使用者的影响。
- 修订后的规则自公布或通知载明的生效时间起执行;规则历史版本及变更记录可由主办方根据管理需要留存。
## 反馈与申诉
- 使用者对数据质量、平台服务、权限处理或违规认定存在异议的,应通过官方渠道提交具体事实、相关记录和必要证据。
- 对同一事项重复提交且没有新增事实或证据的反馈,平台方可以不再重复处理。涉及个人信息、商业秘密或安全漏洞的材料,应通过指定的安全渠道提交。
- 本规则未尽事宜,按照适用法律法规、平台服务协议、数据授权文件及双方另行签署的书面约定执行;不同文件存在冲突时,以适用法律法规及双方最新有效的书面约定为准。
- 本规则的最终解释权归主办方所有。
## 规则确认
使用平台、数据或相关运行环境,即视为使用者已阅读、理解并同意遵守本规则。使用者如无法接受本规则,应停止使用相关服务,并通过正式渠道提出疑问或申请退出。

