BigAlpha

由bq8x1gi2创建,最终由bq8x1gi2 被浏览 1 用户

Overview

本比赛只可使用指定的数据源来构建因子。评判程序会 import 参赛用户提交代码里的 main 函数,并传入数据源名、开始日期时间、结束日期时间来调用。

数据源

本次 BigAlpha 的比赛均放在 BigQuant 数据平台:https://bigquant.com/data/categories/-BigAlpha。股票池:中证1000指数在历史相应时间点上的成分股

数据格式

以分钟行情为例,参考: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级金融数据、另类投资数据和因子数据 (数据字典),并支持用户自定义数据。

  • 技术先进:采用现代化的分布式架构,支持大规模数据的低延迟读写和高性能计算。

  • 使用文档访问链接:https://bigquant.com/wiki/doc/PLSbc1SbZX

{link}