BigAlpha
由bq8x1gi2创建,最终由bq8x1gi2 被浏览 1 用户
Overview
本比赛只可使用指定的数据源来构建因子。评判程序会 import 参赛用户提交代码里的 main 函数,并传入数据源名、开始日期时间、结束日期时间来调用。
数据源
本次 BigAlpha 的比赛均放在 BigQuant 数据平台:https://bigquant.com/data/categories/-BigAlpha。股票池:中证1000指数在历史相应时间点上的成分股
-
构建因子的基础数据
-
1分钟级别K线及盘口快照数据,数据表链接:bigalpha_2026_stock_bar1m
-
财务数据,数据表链接:bigalpha_2026_financial
-
-
其他数据
-
股票列表,数据表链接:bigalpha_2026_instruments
-
因子库,数据表链接:bigalpha_2026_factorlib
-
风险暴露,数据表链接:bigalpha_2026_exposure
-
数据格式
以分钟行情为例,参考:bigalpha_2026_stock_bar1m
以下是根据您提供的内容转换成的 Markdown 格式表格:
读取示例
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()
因子计算示例
DAI 数据引擎
DAI 内置多种算子/函数,参考 DAI函数文档。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()
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 Nonereturn 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()
第三计算库
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文档
混合计算
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函数文档:
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 或者更高的资源规格。参赛后平台会赠送宽币用于升级计算资源,用户也可以通过参加比赛培训、邀请用户等获得更多宽币。
DAI 文档
DAI(DATA FOR AI)是BigQuant研发的高性能分布式数据平台
-
使用简单:通过统一接口访问BigQuant各类数据。
-
数据丰富:提供PB级金融数据、另类投资数据和因子数据 (数据字典),并支持用户自定义数据。
-
技术先进:采用现代化的分布式架构,支持大规模数据的低延迟读写和高性能计算。