BigQuant使用文档

数据保存

由qxiao创建,最终由qxiao 被浏览 46 用户

文章目标

给出一个保存自己创建的数据列表的示例贴。

数据

本文所展示的数据列表如下:


\

数据生成与筛选

利用可视化模块中的输入特征模块:input_features_dai.v30,进行导入。表达式字段如下所示:

-- DAI SQL 算子/函数: https://bigquant.com/wiki/doc/dai-PLSbc1SbZX#h-%E5%87%BD%E6%95%B0
-- 数据&字段: 数据文档 https://bigquant.com/data/home
-- 数据使用: 表名.字段名, 对于没有指定表名的列, 会从 expr_tables 推断, 如果同名字段在多个表中出现, 需要显式的给出表名
-- 可以进行以下两种数据表达式
-- first 选取expr_tables中拥有的字段进行编写或利用其中的字典进行交易信号的生成
-- 基础的因子如下所示

open
high
low
close
volume
momentum_5
reversal_5
volatility_5

-- 基于基础指标衍生计算得到的指标
-- 形成排名作为排序择股的依据,这里以动量为例
-- c_rank具体含义参见:https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS
c_rank(-momentum_5) as momentum_5_rank 
-- 基础的计算均线
m_avg(close,5) as ma_5
-- ta_rsi(open,) as RSI_5
-- 借助IF语句进行交易信号的产生
IF(m_avg(close,5)>m_avg(close,30), 1, 0) as buy_signal


-- second 直接'数据库.字段的形式进行调用',数据库名称以及数据字段见数据文档
-- cn_stock_bar1d.close / cn_stock_bar1d.open
-- cn_stock_prefactors https://bigquant.com/data/datasources/cn_stock_prefactors 是常用因子表(VIEW), JOIN了很多数据表, 性能会比直接用相关表慢一点, 但使用简单
-- cn_stock_prefactors.pe_ttm

-- 表达式模式下, 会自动join输入数据1/2/3, 可以在表达式里直接使用其字段。包括 input_1 的所有列但去掉 date, instrument。注意字段不能有重复的, 否则会报错
-- input_1.* EXCLUDE(date, instrument)
-- input_1.close
-- input_2.close / input_1.close

我选择了8个‘cn_stock_prefactors’库中收录的数据作为基础的数据指标(可以选择自己需要的数据进行尝试),并利用换手率和动量因子的截面排序对其进行了筛选,表达式字段如下所示:

-- DAI SQL 算子/函数: https://bigquant.com/wiki/doc/dai-PLSbc1SbZX#h-%E5%87%BD%E6%95%B0
-- 数据&字段: 数据文档 https://bigquant.com/data/home
-- 表达式模式的过滤都是放在 QUALIFY 里, 即数据查询、计算, 最后才到过滤条件

-- 这里可以直接放置筛选条件或利用上面生成的rank进行筛选
-- 利用刚刚计算得到的排序指标进行筛选
momentum_5_rank <= 50
-- 利用换手率进行筛选
turn > 0.02
-- c_pct_rank(-return_90) <= 0.3
-- c_pct_rank(return_30) <= 0.3

代码块如下:

m1 = M.input_features_dai.v30(
    mode="""表达式""",
    expr="""-- DAI SQL 算子/函数: https://bigquant.com/wiki/doc/dai-PLSbc1SbZX#h-%E5%87%BD%E6%95%B0
-- 数据&字段: 数据文档 https://bigquant.com/data/home
-- 数据使用: 表名.字段名, 对于没有指定表名的列, 会从 expr_tables 推断, 如果同名字段在多个表中出现, 需要显式的给出表名
-- 可以进行以下两种数据表达式
-- first 选取expr_tables中拥有的字段进行编写或利用其中的字典进行交易信号的生成
-- 基础的因子如下所示

open
high
low
close
volume
momentum_5
reversal_5
volatility_5

-- 基于基础指标衍生计算得到的指标
-- 形成排名作为排序择股的依据,这里以动量为例
-- c_rank具体含义参见:https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS
c_rank(-momentum_5) as momentum_5_rank 
-- 基础的计算均线
m_avg(close,5) as ma_5
-- ta_rsi(open,) as RSI_5

-- 借助IF语句进行交易信号的产生
IF(m_avg(close,5)>m_avg(close,30), 1, 0) as buy_signal

-- second 直接'数据库.字段的形式进行调用',数据库名称以及数据字段见数据文档
-- cn_stock_bar1d.close / cn_stock_bar1d.open
-- cn_stock_prefactors https://bigquant.com/data/datasources/cn_stock_prefactors 是常用因子表(VIEW), JOIN了很多数据表, 性能会比直接用相关表慢一点, 但使用简单
-- cn_stock_prefactors.pe_ttm

-- 表达式模式下, 会自动join输入数据1/2/3, 可以在表达式里直接使用其字段。包括 input_1 的所有列但去掉 date, instrument。注意字段不能有重复的, 否则会报错
-- input_1.* EXCLUDE(date, instrument)
-- input_1.close
-- input_2.close / input_1.close
""",
    expr_filters="""-- DAI SQL 算子/函数: https://bigquant.com/wiki/doc/dai-PLSbc1SbZX#h-%E5%87%BD%E6%95%B0
-- 数据&字段: 数据文档 https://bigquant.com/data/home
-- 表达式模式的过滤都是放在 QUALIFY 里, 即数据查询、计算, 最后才到过滤条件

-- 这里可以直接放置筛选条件或利用上面生成的rank进行筛选
-- 利用刚刚计算得到的排序指标进行筛选
momentum_5_rank <= 50
-- 利用换手率进行筛选
turn > 0.02
-- c_pct_rank(-return_90) <= 0.3
-- c_pct_rank(return_30) <= 0.3


""",
    expr_tables="""cn_stock_prefactors""",
    extra_fields="""date, instrument""",
    order_by="""date, instrument""",
    expr_drop_na=True,
    extract_data=False,
    m_name="""m1"""
)

数据提取

编写完成我们需要的数据之后,利用数据提取模块’extract_data_dai.v17’获得数据,该模块使用非常方便,著需要输入提取的时间即可,



这里的历史数据向前取的时间可以选择的大一点,为满足数据中需要用到过去数据计算的指标的需要,代码块如下所示:

m2 = M.extract_data_dai.v17(
    sql=m1.data,
    start_date="""2020-01-01""",
    start_date_bound_to_trading_date=True,
    end_date="""2020-12-31""",
    end_date_bound_to_trading_date=True,
    before_start_days=90,
    debug=False,
    m_name="""m2"""
)

这里可以输出提取的结果


右键该模块,选择运行选中模块,之后再点击‘查看结果’即可看到数据提取结果,示例如下:

# 打印数据
m2.data.read()



还可以对提取的数据进行检查

# 检查一下是否获取得到我们想要的股票数据
df = m2.data.read()
df[df['date'] == df.date.sort_values().unique()[0]].sort_values('momentum_5_rank').reset_index()

数据的保存

最后是对提取出来的数据进行保存,利用模块’write_to_datasource.v8’进行,选项区示例如下:



数据ID输入想要保存的名称即可。

对保存数据进行检查

# 检查是否已经成功保存
import dai 
dai.query(" select * from huangshuai_test_01  where date >= '2020-01-01'").df() 

或者在数据库中的>我的 中查看是否有自己命名的数据库产生,如下所示:


\

数据库中的操作

点击进入该数据库,可以看到如下界面:



点击界面中的‘编辑’,可以对该数据库进行补充说明,

数据描述

可以包含对该数据库的简单介绍,说明该数据库包含了那些数据,以及数据期限等等


\

表结构

对各个字段的具体含义进行简单的介绍


\

文档

可以对字段及其用法进行进一步的说明

用例

可以编写一些数据表的调用示例


\

数据的发布

编写完成后可以选择对该数据表进行发布,点击发布可以获得如下界面



选择需要发布的目录以及该数据表的收费选项,最后点击确定即可发布成功。

数据下架

在数据发布成功后,如果发现数据有误,或数据不匹配要求,可以通过点击下架进行修改或删除。


\

代码

https://bigquant.com/codesharev3/a58690da-7cc3-4821-a0aa-c5d23bf54ae0

总结

以上就是数据存储的主要流程,希望能够对大家有所帮助。

2024年8月23日

\

评论
  • 挺完整的一个教程
{link}