精华帖子

使用dai加工实时因子

由bq7zuymm创建,最终由bq7zuymm 被浏览 3 用户

引言

现在在Aistudio中能够使用dai来加工实时因子了, 本系列文档旨在降低dai在实际业务中加工日内高频因子的开发难度。

阅读本系列后您将掌握:

  • 基于实时快照、逐笔、分钟数据合成任意日内高频因子;
  • 能够基于加工的因子实现动态可视化;
  • 通过dai获取实时交易信号并发送至邮件.

在正式加工因子之前,你需要了解以下内容:

  • dai加工实时因子的流程;
  • 目前dai支持访问哪些流数据;
  • 推送的数据当中会包含哪些字段。

可访问的流数据会在接下来的内容当中介绍, 要获取推送数据, 请联系小Q。

因子加工流程

图1 因子加工到应用全流程

订阅数据

使用以下代码可订阅实时数据:

import dai
 
dai.pull_data_to_table(datasource='cn_stock_level2_snapshot', table_name='stock_table', overwrite=True, lookback_time=10*60*60)

上述代码可理解为:创建一个名为stock_table的表来接受cn_stock_level2_snapshot表中输出的实时数据, overwrite表示stock_table这张表同时能够被其他流数据输出的实时数据覆盖, lookback_time表示推送数据的时间跨度,上述代码中表示以此刻时间点为起始点向前取10个小时的数据。

若不明白能够订阅哪些表, 您可以运行以下代码:

import dai

dai.stream_datasources()

因子加工

这个阶段我们需要使用SQL表达式和dai.stream_factor来获取因子或者因子加工所需的字段, 我们来加工一个因子, 其遵循以下步骤:

  • 计算十档盘口委买量之和;
  • 分钟内委买量之和求平均.
import dai
 
dai.pull_data_to_table(datasource='cn_stock_level2_snapshot', table_name='stock_table', overwrite=True, lookback_time=10*60*60)

instruments = "('000001.SZ', '000002.SZ', '688038.SZ')"
 
sql = f"""
WITH agg AS (
    -- 计算十档盘口委托买量之和
    SELECT to_char(to_timestamp(datetime * 1.0 / 1000 + 8 * 60 * 60), 'YYYY-MM-DD HH24:MI') as dt, 
    instrument, 
    bid_volume1 + bid_volume2 + bid_volume3 + bid_volume4 + bid_volume5 + bid_volume6 + bid_volume7 + bid_volume8 + bid_volume9 + bid_volume10 AS sum_volume
    FROM stock_table
    WHERE instrument in {instruments}
)
 
-- 聚合成分钟
SELECT CAST(dt AS TIMESTAMP) AS date, instrument, AVG(sum_volume) AS buy_quote_volume
FROM agg
GROUP BY CAST(dt AS TIMESTAMP), instrument
ORDER BY CAST(dt AS TIMESTAMP)
"""
stock_df1 = dai.stream_factor(sql, 'factor1', overwrite=True, order_by='date ASC')

上述代码虽然是加工实时因子的代码, 但是依旧不能反应出数据输出的实时性,所以我们访问以下代码即可输出当前时刻以及回看区间内的数据:

stock_df1.df()

我们可以反复运行上述代码来获取最新的实时数据。

实时因子应用

图1中我们列举了三个实时因子的应用我们会在后续文章中详细为大家介绍如何可视化、信号邮件发送以及实时因子入库。

文档

基金实时数据加工
{link}