端到端量价时序预测

比赛时间: -

抛开人工特征,以原始高频行情为唯一输入、股票收益率为学习目标,从零训练端到端深度模型,让模型直接从分钟级量价序列中习得收益信号

主办方:BigAlpha

比赛介绍

## 赛事介绍 **BigAlpha** 是 BigQuant(宽邦科技)面向全球高校青年人才打造的年度 AI 量化投研赛事,依托 BigQuant AI 投研平台,通过真实数据、开放赛题与专业评审,发现新一代金融科技人才。 BigAlpha 2026 全球同步开放三大赛事,参赛者可自由选择: | 赛道 | 适合人群 | 链接 | |---|---|---| | **AI 因子挖掘** | 金融工程、量化、数学、统计方向 | [进入](https://bigquant.com/square/competition/76ad3f56-ec2b-431a-890e-139a7f4bbcba) | | **端到端量价时序预测** | AI、CS、数据科学、金融科技方向 | [进入](https://bigquant.com/square/competition/523f9302-5b4b-42bd-bce1-f232e7c74316) | | **AI 开放创新** | 跨学科、创新创业团队 | [进入](https://bigquant.com/square/competition/63dd885c-2488-4efd-9c61-9e3a536f172c) | **关于 BigQuant**:国内领先的 AI 量化投资平台,使命是 "Democratize AI to empower investors"。平台将机器学习、深度学习等 AI 技术与量化投资深度融合,为个人 Quant、研究机构、券商及资管机构提供从数据、研究、回测到实盘的一站式解决方案,已被多家头部金融机构采用。核心能力包括 PB 级金融与另类数据、2000+ 基础因子库与表达式引擎、高性能 DAI 数据引擎,以及策略源码库与实盘对接。本赛道直接使用与机构客户一致的工具链。 **为什么是端到端模型**:传统的"因子挖掘 + 组合优化"两步走范式,过度依赖人工经验构建特征,难以捕捉市场中瞬息万变的非线性、高阶交互关系,面临信息损耗与人工偏见的双重挑战。**端到端(End-to-End)量化建模** 通过深度神经网络跳过繁琐的显式特征工程,直接从原始市场序列数据中学习投资逻辑,实现从"原始数据"到"投资决策"的一站式映射。本赛道聚焦 **端到端模型生成**:参赛者不再挖掘孤立因子,而是以主办方提供的多频率分钟级行情数据为输入、以股票残差收益率为目标,构建能处理复杂时空关系的大模型。我们鼓励采用无特征或弱特征的研发模式,尽可能使用原始量价序列(如 OHLCV、分时快照),利用模型内部机制自发捕捉市场微观结构的深层规律。 ## 数据 * **股票池**:中证 1000 指数在历史相应时间点上的成分股。 * **时间范围**:2019-01-01 至 2023-12-31。 * **数据内容**:1 分钟 / 5 分钟 / 15 分钟 / 30 分钟级别 K 线及盘口快照数据。 ## 参赛与提交 ### 模版代码 本赛道采用"端到端模型生成"方式:参赛者按规范构建模型并提交训练 / 推理代码。主办方提供以下模版供参考: | 模版 | 说明 | |---|---| | `Transformer.ipynb` | 实时训练一个 transformer 模型 | | `Transformer_modelsave_train.ipynb` | 如果训练时间过长,请将模型保存下来一并提交。(本地训练代码,提交时请转换为py文件) | | `Transformer_modelsave_predict.ipynb` | 如果训练时间过长,请将模型保存下来一并提交。(预测模块) | > 注意:可以提交多个不同类型的文件,但要保证调用评估模块的代码放在 notebook 中,且提交文件中只能有一个 notebook,后台会提取其中的代码运行。 ### 模型规范 **输入与特征约束** 1. **特征上限**:模型输入字段不超过 **100 个原始字段**。时序窗口的同一字段在不同时间步上仍计为 1 个字段(即时序长度不计入字段数)。 2. **数据来源**:所有输入字段必须直接来源于主办方提供的数据。**禁止任何衍生或人工特征工程**,包括跨字段算子、滚动统计、因子合成、降维、第三方数据等。 3. **允许的预处理**:缺失值填充、按字段统一的归一化(MinMax / StandardScaler)、按字段统一的对数或符号变换。预处理参数仅基于训练集统计得到。 4. **时序窗口上限**:单次推理回看窗口 ≤ **240 个交易日**。 **模型架构约束** 1. **可训练参数量**:≥ 100,000(10 万),≤ 100,000,000(1 亿)。 2. **外部预训练权重**:禁止使用任何外部预训练权重。所有参数由参赛者基于本竞赛数据从零训练。 3. **架构形态**:未做硬性指定,但参数量下限与禁特征工程的组合,意味着浅层模型(XGBoost、线性模型)难以达到有竞争力的成绩。 ### 提交格式 每次提交模型推理产出一个分数文件,必须且仅包含三列(默认分数越大越好,参赛者需自行确保符号正确): | date | instrument | score | |---|---|---| | 2023-01-03 | 000001.SZ | 0.05 | | 2023-01-03 | 000002.SZ | -0.12 | > 所产出的分数经风格剔除后等价于一个每日更新的单因子,因此直接以单因子得分作为团队得分。 ### 数据校验 提交的分数文件须通过以下全部校验,否则视为无效: * **数据列**:列名严格匹配 `date`、`instrument`、`score` 三列,无多余列。 * **交易日完整性**:评估区间内不得缺失任一交易日。 * **截面覆盖度**:每个交易日分数缺失率不得高于 **40%**。 ### 平台预处理 校验通过后,平台依次对原始分数统一处理: 1. **去极值**:截面 1% / 99% 分位 winsorize。 2. **标准化**:截面 z-score。 3. **风格剔除**:将标准化后的分数对 BARRA 风险因子(市值、Beta、动量、波动率、流动性、估值、盈利、成长、杠杆、非线性市值)做截面回归,**取残差作为最终评估对象**。 ### 运行环境要求 为保证公平,所有代码须在指定的线上 BigQuant Notebook 环境运行并提交,所有提交必须是通过推理脚本自动运行并生成分数文件的完整代码包: * **运行时长**:GPU Notebook ≤ 3 小时(公榜单次推理上限 12 小时)。 * **禁止外部网络**:为防信息泄露与使用未来数据,Notebook 互联网访问被禁用。 ## 评分机制 所产出的分数经风格剔除后等价于一个每日更新的单因子,团队得分即该单因子得分。 ### 最终得分公式 $$ \text{Score}_{\text{final}} = 0.25 \times \text{Rank}_{IC_{mean}} + 0.25 \times \text{Rank}_{IC_{IR}} + 0.25 \times \text{Rank}_{SR} + 0.25 \times \text{Rank}_{\text{Stress}} $$ * $\text{Rank}_{IC_{mean}}$:评估区间内截面 IC 均值的全场排名。 * $\text{Rank}_{IC_{IR}}$:IC 序列的 IR(IC 均值 / IC 标准差)排名。 * $\text{Rank}_{SR}$:以模型分数构建的多空 10 分组组合的年化夏普比率排名。 * $\text{Rank}_{\text{Stress}}$:分 regime 评估的稳健性排名。 > 四项均做百分位归一化后等权相加,按 $\text{Score}_{\text{final}}$ 降序排列即得团队最终排名。 ## 评估周期与排名 竞赛分**公榜**和**私榜**两阶段,使用不同数据区间,最终排名以私榜为准。 ### 数据划分 | 阶段 | 训练集 | 验证集 | 说明 | |---|---|---|---| | 公榜 | 2019-01-01 ~ 2023-12-31 | 2024-01-01 ~ 2024-12-31 | 验证集得分可见,用于调试迭代 | | 私榜 | 不公开 | 不公开 | 含样本外数据,用于最终排名 | ### 提交规范与频次 **公榜阶段**: * **每次提交必须是完整模型包**,包含训练脚本、推理脚本、依赖声明、超参配置、随机种子,以及在公榜训练集上得到的**已训练权重**。平台公榜阶段**仅基于提交的权重做推理**,不重新训练,借此让参赛者免去因平台重训导致的重复训练成本。 * 每队每日最多提交 **3 次**(含失败提交)。 * 提交之间**互不覆盖**:每次提交以独立记录入库,分别在公榜区间上推理打分并展示其得分。参赛者可同时持有并迭代多个候选模型,无需在迭代过程中提前选定某一份权重。 * 公榜截止前,每队必须从历史提交记录中**指定唯一一个端到端模型**作为私榜参赛模型;逾期未指定者,平台默认取该队公榜得分最高的一次提交。指定一旦确认即冻结,参赛者不得新增或修改其代码、配置与依赖。 **私榜阶段**: 1. **平台重训**:平台在隔离环境中,使用特定训练集按参赛者提交的训练脚本与配置**从零重训**该唯一模型,参赛者提交的公榜权重不参与私榜评测。 2. **私榜推理**:用重训得到的权重在私榜验证区间上推理打分,得分即为最终排名。 ### 每轮公示内容 公榜阶段每日固定时点,根据最新评估结果公布以下信息,帮助参赛者明确优化方向。 **(1)模型画像**(公榜总得分排名前 10 的提交,按团队去重,每队仅取其当前最高分提交) | 特征 | 说明 | |---|---| | BARRA 风格暴露 | 风格剔除前模型分数在市值、Beta、动量、波动率等风格上的暴露分布 | | 行业 IC 分布 | 模型在各申万一级行业的平均 IC,揭示行业偏好 | | 截面分散度 | 分数截面 std 的时序均值,衡量预测是否过度集中 | > 公布的是**聚合特征**,不涉及具体网络结构,不影响知识产权保护。 **(2)团队细节得分** * 本队**每一次有效提交**的总得分、四个分项的全场分位(IC mean / IC_IR / SR / Stress),以及该队当前最高分提交。 * 当前最高分提交与第 1 名、第 10 名的分项差距分解,定位最弱的一项。 * 近 30 个评估日的得分轨迹(按提交聚合,可切换查看本队不同提交的轨迹)。 **(3)指数增强策略跟踪** 平台基于每队**当前公榜最高分提交**的分数,同步构建**中证 1000 指数增强策略**:以模型分数为信号,在成分股内超配高分股、低配低分股,跟踪误差约束 5% 以内。每轮评估后更新持仓并展示: | 指标 | 说明 | |---|---| | 累计超额收益 | 相对中证 1000 的累计 alpha | | 信息比率(IR) | 年化超额收益 / 跟踪误差 | | 最大回撤 | 超额收益的最大回撤 | | 增量贡献 | 新一轮提交后策略 IR 的变化 | > 端到端模型若真从原始数据中提取到增量信息,应能持续推动指增策略 IR 上升;若某轮迭代未能改善策略表现,也会如实呈现,作为对参赛者的反馈。 ## 赛程安排 ### 阶段一:宣传报名 * **时间**:2026-05-15 起宣传报名,报名截止 **2026-07-25**。 * **报名组队**:通过活动主页报名,可单人或组队(单队最多 5 人),报名后可加入官方社群(微信 / QQ 群)寻找队友。 * **赛前培训**:**6 月 24 日** 举办赛前培训,帮助参赛者熟悉比赛系统、数据与提交规范。 * **系统内测**:2026-06-22 至 06-28,可提交代码测试系统稳定性、熟悉比赛系统,成绩不计入初赛,内测后重置榜单。 ### 阶段二:初赛 * **正式开赛**:**7 月 1 日**。 * **公榜阶段**:**7 月 1 日 – 8 月 5 日**,以 **2026-08-05 23:59:59** 为提交截止。平台用验证集实时打分、更新排名,以队伍最好成绩展示在公榜;参赛队可选择并替换总计不超过 **1 个**模型作为截止后的候选模型。 * **私榜阶段**:**8 月 5 日 – 8 月 12 日**,截止后不得修改候选模型的构建代码;平台用新的训练集从零重训候选模型,并在新的验证集上推理打分,以得分展示在私榜。 * **账号发放**:向成功报名队伍发放比赛专用账号并开放数据访问。 ### 阶段三:决赛 * **晋级榜单公布**:**8 月 16 日**。 * **线下总决赛**(9 月初): | 场次 | 时间 | 地点 | |---|---|---| | 美国场 | 2026-09-01 | UC Berkeley | | 亚洲场 | 2026 年 9 月中旬 | 北京大学 | * **晋级规则**:每场设 **12 个名额**,综合三大赛事(AI 因子挖掘、端到端大模型、AI 开放创新)初赛表现评定——各赛事**前 2 名直通**(3 赛事 × 2 = 6 个),其余 **6 个**由组委会综合判定。 ## 决赛 ### 参赛材料 入围队伍须按时提交模型研究报告(PDF,10–15 页),结构需包含: | 章节 | 内容要点 | |---|---| | 摘要 | 研究目标、核心方法与主要结论 | | 引言 | 模型研究背景与文献综述 | | 模型构建 | 详细阐述模型搭建的细节(数据处理、网络结构、训练策略)| | 创新性与局限性 | 方法创新点与局限性讨论 | | 结论 | 研究总结与未来方向 | ### 答辩与颁奖 决赛答辩采用 **"25 分钟展示 + 5 分钟评委问答"**,线下举行并同步线上直播。答辩后公布最终名次并举行颁奖典礼,邀请所有嘉宾、评委与选手共同参与。 ### 评估标准 评审委员会综合评估: * **模型质量与逻辑性**:建模思路与有效性,跨周期、跨行业的稳健性与统计显著性。 * **研究深度与规范性**:报告结构严谨度、分析深度;代码规范性、可读性、可复现性。 * **现场表现**:陈述表达的清晰度与条理;问答的精准度与逻辑性。 * **AI 创新性**:模型架构与技术选型的原创性、对市场微观结构的建模深度与落地效果。 ## 赛事奖励 本赛道与其他两条赛道共享以下奖项体系。 ### 洲际奖项(线下决赛) 亚洲场与美国场各设: | 奖项 | 名额 | 奖金 | 其他 | |---|---|---|---| | 金奖 | 1 名 | ¥20,000 | 奖杯 + 电子证书 | | 银奖 | 2 名 | ¥15,000 | 奖杯 + 电子证书 | | 铜奖 | 3 名 | ¥10,000 | 奖杯 + 电子证书 | ### 初赛奖项 * **赛道周冠军**:每场每周按排名评选,奖励 ¥1,500。 * **BigAlpha 量化新星**:至少提交一次有效合规作品的团队均获电子证书。 ### 特色奖项 随赛事推进评选特色作品与团队进行专项颁奖,奖项届时公布,奖金合计 ¥12,500。

奖金&奖项

¥200000

比赛数据

## Overview 本比赛只可使用指定的数据源来构建因子。评判程序会 `import` 参赛用户提交代码里的 `main` 函数,并传入数据源名、开始日期时间、结束日期时间来调用。 ## 数据源 本次 BigAlpha 的比赛均放在 BigQuant 数据平台:https://bigquant.com/data/categories/-BigAlpha。股票池:中证1000指数在历史相应时间点上的成分股 - 构建因子的基础数据 * 1分钟级别K线及盘口快照数据,数据表链接:[bigalpha_2026_stock_bar1m](https://bigquant.com/data/datasources/bigalpha_2026_stock_bar1m) * 5分钟级别K线及盘口快照数据,数据表链接:[bigalpha_2026_stock_bar5m](https://bigquant.com/data/datasources/bigalpha_2026_stock_bar5m) * 15分钟级别K线及盘口快照数据,数据表链接:[bigalpha_2026_stock_bar15m](https://bigquant.com/data/datasources/bigalpha_2026_stock_bar15m) * 30分钟级别K线及盘口快照数据,数据表链接:[bigalpha_2026_stock_bar30m](https://bigquant.com/data/datasources/bigalpha_2026_stock_bar30m) - 其他数据 * 股票列表,数据表链接:[bigalpha_2026_instruments](https://bigquant.com/data/datasources/bigalpha_2026_instruments) * 因子库,数据表链接:[bigalpha_2026_factorlib](https://bigquant.com/data/datasources/bigalpha_2026_factorlib) * 风险暴露,数据表链接:[bigalpha_2026_exposure](https://bigquant.com/data/datasources/bigalpha_2026_exposure) ## 数据格式 以分钟行情为例,参考:[bigalpha_2026_stock_bar1m](https://bigquant.com/data/datasources/bigalpha_2026_stock_bar1m) 以下是根据您提供的内容转换成的 Markdown 格式表格: | 字段名 | 数据类型 | 描述 | | --- | --- | --- | | date | np.datetime64 | 时间 | | instrument | pd.StringDtype | 标的 | | time | np.int32 | 时间(HHMMSSmmm) | | trading_day | np.int32 | 交易日期 | | pre_close | np.float32 | 前收盘 | | open | np.float32 | 开盘价 | | high | np.float32 | 最高价 | | low | np.float32 | 最低价 | | price | 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档委卖价 | | ask_price6 | np.float32 | 6档委卖价 | | ask_price7 | np.float32 | 7档委卖价 | | ask_price8 | np.float32 | 8档委卖价 | | ask_price9 | np.float32 | 9档委卖价 | | ask_price10 | np.float32 | 10档委卖价 | | ask_volume1 | np.int64 | 1档委卖量 | | ask_volume2 | np.int32 | 2档委卖量 | | ask_volume3 | np.int32 | 3档委卖量 | | ask_volume4 | np.int32 | 4档委卖量 | | ask_volume5 | np.int32 | 5档委卖量 | | ask_volume6 | np.int32 | 6档委卖量 | | ask_volume7 | np.int32 | 7档委卖量 | | ask_volume8 | np.int32 | 8档委卖量 | | ask_volume9 | np.int32 | 9档委卖量 | | ask_volume10 | np.int32 | 10档委卖量 | | 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档委买价 | | bid_price6 | np.float32 | 6档委买价 | | bid_price7 | np.float32 | 7档委买价 | | bid_price8 | np.float32 | 8档委买价 | | bid_price9 | np.float32 | 9档委买价 | | bid_price10 | np.float32 | 10档委买价 | | bid_volume1 | np.int64 | 1档委买量 | | bid_volume2 | np.int32 | 2档委买量 | | bid_volume3 | np.int32 | 3档委买量 | | bid_volume4 | np.int32 | 4档委买量 | | bid_volume5 | np.int32 | 5档委买量 | | bid_volume6 | np.int32 | 6档委买量 | | bid_volume7 | np.int32 | 7档委买量 | | bid_volume8 | np.int32 | 8档委买量 | | bid_volume9 | np.int32 | 9档委买量 | | bid_volume10 | np.int32 | 10档委买量 | | 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档委托笔数 | | bid_num_orders6 | np.int32 | 卖6档委托笔数 | | bid_num_orders7 | np.int32 | 卖7档委托笔数 | | bid_num_orders8 | np.int32 | 卖8档委托笔数 | | bid_num_orders9 | np.int32 | 卖9档委托笔数 | | bid_num_orders10 | np.int32 | 卖10档委托笔数 | | 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档委托笔数 | | ask_num_orders6 | np.int32 | 买6档委托笔数 | | ask_num_orders7 | np.int32 | 买7档委托笔数 | | ask_num_orders8 | np.int32 | 买8档委托笔数 | | ask_num_orders9 | np.int32 | 买9档委托笔数 | | ask_num_orders10 | np.int32 | 买10档委托笔数 | | num_trades | np.int32 | 成交笔数 | | volume | np.int64 | 当日累计成交量 | | amount | np.float64 | 当日成交额(元) | | total_bid_volume | np.int64 | 委买总量 | | total_ask_volume | np.int64 | 委卖总量 | | bid_avg_price | np.float32 | 加权平均委买价 | | ask_avg_price | np.float32 | 加权平均委卖价 | ## 读取示例 ``` import dai dai.query("SELECT * FROM bigalpha_2026_stock_bar1m", filters={"date": ["2019-01-01 00:00:00", "2019-01-05 23:59:59"]}).df().head() ``` | | date | instrument | 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 | 2019-01-02 09:31:00 | 000006.SZ | 5.18 | 5.2 | 5.18 | 5.18 | 5.18 | 48 | 19000 | 98444 | 5.19 | 5.2 | 5.21 | 5.22 | 5.23 | 5.18 | 5.17 | 5.16 | 5.15 | 5.14 | 14600 | 38300 | 19400 | 20100 | 8400 | 18700 | 30700 | 14500 | 59200 | 8500 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 1 | 2019-01-02 09:31:00 | 000011.SZ | 9.18 | 9.26 | 9.2 | 9.2 | 9.26 | 25 | 24300 | 223956 | 9.27 | 9.28 | 9.29 | 9.32 | 9.33 | 9.26 | 9.25 | 9.24 | 9.23 | 9.22 | 1400 | 6300 | 14800 | 3000 | 1100 | 1600 | 172300 | 700 | 200 | 3000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 2 | 2019-01-02 09:31:00 | 000012.SZ | 3.99 | 4.04 | 3.99 | 3.99 | 4 | 39 | 125062 | 501100 | 4.01 | 4.02 | 4.03 | 4.04 | 4.05 | 4 | 3.99 | 3.98 | 3.96 | 3.95 | 5200 | 600 | 10495 | 445800 | 32075 | 69500 | 152238 | 34100 | 9800 | 40000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 3 | 2019-01-02 09:31:00 | 000016.SZ | 3.24 | 3.26 | 3.24 | 3.24 | 3.26 | 52 | 77000 | 249727 | 3.26 | 3.27 | 3.28 | 3.29 | 3.3 | 3.25 | 3.24 | 3.23 | 3.22 | 3.21 | 35100 | 21400 | 13700 | 35500 | 24500 | 99100 | 5800 | 13800 | 34900 | 22600 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | 4 | 2019-01-02 09:31:00 | 000018.SZ | 2.12 | 2.15 | 2.15 | 2.14 | 2.15 | 121 | 674000 | 1.44844e+06 | 2.16 | 2.17 | 2.18 | 2.19 | 2.2 | 2.15 | 2.14 | 2.13 | 2.12 | 2.11 | 191800 | 193600 | 153400 | 110100 | 206000 | 22200 | 17300 | 178800 | 148300 | 85200 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ## 因子计算示例 ### 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 bigalpha_2026_stock_bar1m GROUP BY date::DATE, instrument ORDER BY date, instrument """, filters={"date": ["2023-01-01 00:00:00", "2023-02-01 23:59:59"]}, compression=True).df().head() ``` | | date | instrument | factor | |---:|:--------------------|:-------------|---------:| | 0 | 2023-01-03 00:00:00 | 000006.SZ | 1.00064 | | 1 | 2023-01-03 00:00:00 | 000011.SZ | 1.0023 | | 2 | 2023-01-03 00:00:00 | 000012.SZ | 0.993469 | | 3 | 2023-01-03 00:00:00 | 000016.SZ | 0.999046 | | 4 | 2023-01-03 00:00:00 | 000019.SZ | 1.00017 | ### 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 bigalpha_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": ["2023-01-01 00:00:00", "2023-02-01 23:59:59"]}, compression=True, udf_list=[ dai.DaiUDF( name="calculate_factor", function=calculate_factor, ) ]).df().head() ``` | | date | instrument | factor | |---:|:--------------------|:-------------|---------:| | 0 | 2023-01-03 00:00:00 | 000006.SZ | 0.997372 | | 1 | 2023-01-03 00:00:00 | 000011.SZ | 0.997007 | | 2 | 2023-01-03 00:00:00 | 000012.SZ | 0.989028 | | 3 | 2023-01-03 00:00:00 | 000016.SZ | 0.988163 | | 4 | 2023-01-03 00:00:00 | 000019.SZ | 0.994797 | ### 第三计算库 DAI 数据引擎也支持将数据转换为 pd.DataFrame、pl.DataFrame、arrow 等格式的数据类型。 ``` import dai data = dai.query("SELECT date, instrument, close FROM bigalpha_2026_stock_bar1m", filters={"date": ["2023-01-01 00:00:00", "2023-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 文档:[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 bigalpha_2026_stock_bar1m", filters={"date": ["2023-01-01 00:00:00", "2023-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 bigalpha_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 bigalpha_2026_stock_bar1m` ## 计算资源 - 使用 `compression=True` 参数可降低内存占用:`dai.query("SELECT * FROM bigalpha_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

比赛规则

> 本文为 **BigAlpha 2026 全球高校联赛 · 端到端模型**赛道的合规与免责文件,与同名介绍文档配套使用。本规则中的"模型"特指参赛者按介绍文档"模型规范"章节构建的端到端深度学习模型,评估对象为该模型输出的截面分数文件。 ## 基本规则 ### 知识产权 * 参赛作品(含训练脚本、推理脚本、模型权重、配置与文档)的知识产权归参赛队伍所有。 * 主办方对所有作品拥有**非商业性的评审、展示、宣传**权利。 * 对于获奖的优秀作品,主办方在**同等条件下**拥有优先的商业合作洽谈权;商业合作的具体形式、对价、署名将另行签署书面协议,本规则不构成商业授权本身。 * 对于参赛者使用的第三方资源(开源库、外部 API 等),其许可与权属由参赛者自行负责,详见"参赛者责任 · 第三方依赖"。本赛道**禁止使用任何外部预训练权重**(详见介绍文档"模型架构约束"),由此引发的合规与权属争议风险由参赛者自担。 ### 诚信竞赛 参赛者须遵守以下基本原则;具体可识别的违规行为见第二章"反作弊与违规清单"。 * 严禁**抄袭**他人代码、模型架构或权重(包括往届赛事、公开仓库、其他队伍)。 * 严禁**跨队共享**核心代码、模型权重、训练超参;**禁止串通刷分**(如多队伍互相提交近似模型推高自身相对排名)。 * 严禁以任何方式**绕过、欺骗、攻击**评估系统(详见第二章)。 * 鼓励参考公开文献、开源工具、官方模板代码——以"复现 + 改进"为基础的工作受到欢迎,但须在决赛报告中**明确标注引用来源与改进点**。 ## 反作弊与违规清单 > 在过往赛事中,部分参赛者会利用赛制设计的灰色地带提升排名。本章对**可识别的违规行为**进行明确列举,并说明检测机制与处理梯度,避免事后争议。 ### 数据使用类违规 * **使用未来数据(look-ahead bias)**:在 t 日推理中使用 t 日盘后或 t+1 日及以后的数据。包括但不限于:用 t 日收盘价构造 t 日 09:45 的输入特征、用 t+5 日的财报数据回填 t 日特征、跨样本批归一化中混入未来时间步的统计量。 * **越权访问数据**:使用赛题股票池(中证 1000 在历史时点的成分股)以外的数据、或使用赛题时间范围(公榜训练 2019-01-01 ~ 2023-12-31、公榜验证 2024-01-01 ~ 2024-12-31)以外的数据来辅助训练或推理。 * **私自上传外部数据**:通过 Notebook 上传非平台提供的数据集(包括但不限于另类数据、海外市场数据、第三方因子库、外部预训练模型权重文件)参与训练或推理。 * **数据投毒**:手工修改、伪造、注入分数文件中的数值,而非由模型推理脚本端到端生成。 ### 端到端模型规范类违规 > 本节对应介绍文档"模型规范"章节的硬性约束,违反即视为不符合赛道定义。 * **隐式特征工程**:以模型组件(自定义 Layer、损失函数、数据加载器)为名实施跨字段算子、滚动统计、因子合成或降维等显式特征工程;包括但不限于在 `Dataset.__getitem__` 中调用 talib、在前向传播中拼接预先离线计算的因子。 * **超界字段使用**:模型输入字段(按介绍文档定义,时序长度不计入字段数)超过 100 个;或使用主办方未提供的字段。 * **回看窗口超限**:单次推理依赖的回看窗口超过 240 个交易日。 * **参数量越界**:可训练参数量低于 10 万或高于 1 亿;通过分支冻结、Lazy 初始化等手段在重训阶段实际训练参数量超出申报范围。 * **使用外部预训练权重**:包括加载公开预训练模型 checkpoint、用其他数据集预训练后迁移、或在代码中以"权重初始化"为名嵌入第三方权重值。 * **私榜重训不可复现**:提交的训练脚本在平台隔离环境中无法按申明的随机种子与配置复现申报权重所对应的训练流程(含依赖缺失、硬编码外部路径、未声明的随机性来源等)。 ### 提交规避类违规 * **截面覆盖度规避**:刻意构造覆盖率刚好高于 60%(即缺失率 40%)但实际仅在少数股票上分数有判别力的输出,规避校验。 * **多模型拼接绕过相关性约束**:将一个完整模型拆分为多个高度相关的子模型分别提交,意图占据更多排名席位或在私榜候选上"试错"。 * **轮换提交刷新排名**:对同一模型权重做无实质改动的微调(如仅替换无关层、轻微改动随机种子)反复提交,仅为触发评估或刷新公榜显示。 * **反向输出滥用**:在模型预测方向不显著时,仅通过加负号输出或重命名"新模型"。 ### 身份与协作类违规 * **多账号参赛**:同一自然人注册多个账号、加入多个队伍。 * **跨队伍代码 / 权重共享**:不同队伍之间共享训练脚本、模型权重、关键 prompt 或超参;包括以"师门内部分工"、"实验室共享"为名的分发。 * **代提交**:他人代为编写并提交参赛作品,本人对作品无实质贡献。 * **串通刷分**:多个队伍合谋调整提交策略,意图共同抬高某一方排名或压制竞争对手。 ### 检测机制 主办方将通过以下机制进行违规检测,参赛者提交即视为同意接受: * **静态代码分析**:扫描提交代码中的可疑模式(如时间索引偏移、外部网络请求、隐式特征工程、可疑的权重加载路径)。 * **输出相关性聚类**:对全场入池模型分数做相关性矩阵分析,识别异常聚簇。 * **跨队伍指纹比对**:比对不同队伍提交代码的结构相似度、变量命名、注释风格、模型架构特征。 * **运行时审计**:抽样队伍代码在隔离环境中复现训练与推理,比对模型输出与队伍声称的逻辑、参数量、输入字段是否一致。 * **私榜重训审计**:私榜阶段平台从零重训时同步执行参数量统计、字段使用扫描、回看窗口探针等自动化检查。 ## 规则版本与变更 * **规则版本说明**:当前比赛规则为**初拟版本**,可能在内测阶段遇到不可抗的工程或评估问题(如数据接口变更、评估算法瓶颈、第三方服务异常等)。**最终以"内测结束、正式比赛开始前"发布的规则版本为准**,请参赛者持续关注官方公告与社群通知。 * **比赛期间的规则调整权**:为保障公平性,**主办方保留在比赛进行期间修订规则、调整评估口径、增补反作弊机制的权利**。规则调整将兼顾已提交作品的处理方式(如重新评分、保留历史得分作为参考、给予合理的代码调整窗口等),尽量降低对正常参赛队伍的影响。 * **变更类型与提前量**: | 变更类型 | 举例 | 提前通知量 | |---|---|---| | 重大变更 | 评分公式修改、提交规范调整、赛程顺延 | ≥ 48 小时 | | 一般变更 | 公示信息字段调整、本地工具版本更新 | ≥ 24 小时 | | 紧急修订 | 反作弊补丁、严重数据 / 平台 Bug 修复、安全漏洞响应 | 即时通知,事后补充说明 | * **变更通知渠道**:官网公告、官方社群(微信 / QQ 群)置顶、平台站内信,三个渠道至少**两个**同步发布,以站内信送达时间为正式生效时间。 * **历史版本留档**:所有规则版本将在官网保留可追溯的历史记录,便于参赛者核对自己提交时所依据的规则;版本号采用"主版本.次版本"格式,重大变更升级主版本号。 ## 数据与平台免责 * **数据使用范围**:比赛数据仅供**赛事评估与学习研究**使用,严禁外传、商用、上传至公开仓库或用于本赛事以外的任何场景,包括赛事结束后。一经发现,主办方将依法追究责任。 * **数据保密期限**:本赛事所提供的高频快照、PIT 财务数据等敏感数据的保密义务**长期有效**,不因比赛结束而解除。 * **数据准确性**:主办方已对数据做必要的清洗与校验,但不对数据的绝对准确性、完整性作出保证;因数据问题导致的模型分数波动,**一般情况下不作为评估申诉的依据**,但严重数据错误(如批量缺失、字段错位、复权异常)经核实后会触发统一重算,并向所有受影响队伍同步说明。 * **平台稳定性**:BigQuant 平台已做高可用部署,但仍可能因不可抗力(机房故障、网络中断、第三方依赖异常等)出现短时不可用。因平台故障导致的提交延误,主办方将根据故障时长合理顺延截止时间或取消该时段的评估结果,**不对参赛者的算力消耗、时间投入作经济补偿**。 * **算力配额**:GPU Notebook 单次推理 / 重训 ≤ 6 小时,公榜阶段单次推理上限 12 小时(详见介绍文档"代码要求与平台约束")。超出配额导致的运行失败由参赛者自行负责;私榜重训阶段平台将按上述上限执行,超时即判定该模型重训失败。 * **结果不构成投资建议**:本赛事所有模型、分数、回测结果及衍生分析仅供学术研究与赛事评估使用,**不构成任何形式的投资建议**。任何人据此进行实盘投资所产生的盈亏,主办方、平台方及合作方均不承担责任。 ## 参赛者责任 ### 代码合规与安全 * 参赛者需对自己提交的代码负责,不得包含: * 恶意代码、后门、未授权访问平台资源的逻辑; * 试图规避平台沙箱、网络隔离、资源限制的代码; * 试图获取其他队伍提交内容、评估中间结果的代码; * 在私榜重训环境中读取或写入非沙箱路径的文件操作。 * 一经发现,立即按 L4 处理(取消比赛资格),并保留追究法律责任的权利。 ### 第三方依赖 * 若参赛者使用了开源库、外部 API 等第三方资源,需自行确认其许可协议**允许竞赛及商业评审场景使用**。 * **禁止使用任何外部预训练权重**——包括但不限于 HuggingFace 公开 checkpoint、torchvision 预训练模型、自有项目的迁移学习权重。所有模型参数须基于本竞赛数据从零训练。 * 由第三方依赖引发的版权 / 许可争议,由参赛者自行承担;主办方有权要求队伍替换有争议的依赖。 ### 个人信息与肖像 * 参赛者报名时提供的个人信息仅用于赛事相关用途,主办方将依法保护,但参赛者需保证所提供信息真实有效。 * 决赛入围队伍同意主办方在赛事宣传中使用其**姓名、学校、队名、决赛影像**;如需保留匿名权利,须在决赛入围确认时书面提出。 ### 内测与冻结期约束 * 内测阶段(2026-06-08 至 2026-06-18)的提交不计入初赛得分,内测结束后排行榜重置。 * 公榜截止前,每队须从历史提交记录中**指定唯一一个端到端模型**作为私榜参赛模型(详见介绍文档"提交规范与频次");逾期未指定者,平台默认取该队公榜得分最高的一次提交。 * 候选模型一经指定即冻结,私榜阶段参赛者**不得新增或修改其训练脚本、推理脚本、依赖声明、超参配置或随机种子**;提交后的代码包须能在平台隔离环境中独立完成训练与推理。 ## 申诉与最终解释 ### 申诉流程 * **申诉范围**:评估结果争议(含公榜得分异常、私榜重训失败、风格剔除残差异常等)、违规处理异议、数据严重错误等。 * **申诉渠道**:联系赛事运营人员,附必要的证据(截图、日志、代码片段等)。**不接受**通过非官方渠道(私下联系评委、社群刷屏等)的申诉。 * **响应时限**: | 申诉类型 | 首次响应 | 处理结论 | |---|---|---| | 一般申诉(评估结果、公示信息) | 5 个工作日内 | 10 个工作日内 | | 违规处理异议 | 48 小时内 | 7 个工作日内 | | 紧急申诉(涉及截止时间、关键数据) | 24 小时内 | 与紧急修订一并处理 | * **重复申诉**:同一事项的重复申诉、无新证据的申诉,组委会有权不再单独答复。 ### 最终解释权 本赛事所有规则的最终解释权归 **BigAlpha 2026 大赛组委会**所有。规则中文版本与任何翻译版本存在歧义时,以**中文版本为准**。 --- > **承诺**:报名即视为已阅读并同意本规则全部条款。如有疑问,请在报名前通过官方渠道咨询;报名后再以"未注意到某条规则"为由的申诉,组委会不予采纳。 >